summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/admin/logs.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-04-14 20:38:55 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-04-14 20:38:55 +0900
commitd66e4b7ff97d512e2a2523815e2eef170456b37f (patch)
tree59ae1a102d88b5c2c2236b734ea4a584b4f9ba46 /src/server/api/endpoints/admin/logs.ts
parent10.100.0 (diff)
parent11.0.0 (diff)
downloadmisskey-d66e4b7ff97d512e2a2523815e2eef170456b37f.tar.gz
misskey-d66e4b7ff97d512e2a2523815e2eef170456b37f.tar.bz2
misskey-d66e4b7ff97d512e2a2523815e2eef170456b37f.zip
Merge branch 'develop'
Diffstat (limited to 'src/server/api/endpoints/admin/logs.ts')
-rw-r--r--src/server/api/endpoints/admin/logs.ts69
1 files changed, 38 insertions, 31 deletions
diff --git a/src/server/api/endpoints/admin/logs.ts b/src/server/api/endpoints/admin/logs.ts
index 805a42b9e0..86e99730c5 100644
--- a/src/server/api/endpoints/admin/logs.ts
+++ b/src/server/api/endpoints/admin/logs.ts
@@ -1,6 +1,7 @@
import $ from 'cafy';
import define from '../../define';
-import Log from '../../../../models/log';
+import { Logs } from '../../../../models';
+import { Brackets } from 'typeorm';
export const meta = {
tags: ['admin'],
@@ -27,41 +28,47 @@ export const meta = {
};
export default define(meta, async (ps) => {
- const sort = {
- _id: -1
- };
- const query = {} as any;
+ const query = Logs.createQueryBuilder('log');
+
+ if (ps.level) query.andWhere('log.level = :level', { level: ps.level });
- if (ps.level) query.level = ps.level;
if (ps.domain) {
- for (const d of ps.domain.split(' ')) {
- const qs: any[] = [];
- let i = 0;
- for (const sd of (d.startsWith('-') ? d.substr(1) : d).split('.')) {
- qs.push({
- [`domain.${i}`]: d.startsWith('-') ? { $ne: sd } : sd
- });
- i++;
- }
- if (d.startsWith('-')) {
- if (query['$and'] == null) query['$and'] = [];
- query['$and'].push({
- $and: qs
- });
- } else {
- if (query['$or'] == null) query['$or'] = [];
- query['$or'].push({
- $and: qs
- });
- }
+ const whiteDomains = ps.domain.split(' ').filter(x => !x.startsWith('-'));
+ const blackDomains = ps.domain.split(' ').filter(x => x.startsWith('-')).map(x => x.substr(1));
+
+ if (whiteDomains.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ for (const whiteDomain of whiteDomains) {
+ let i = 0;
+ for (const subDomain of whiteDomain.split('.')) {
+ const p = `whiteSubDomain_${subDomain}_${i}`;
+ // SQL is 1 based, so we need '+ 1'
+ qb.orWhere(`log.domain[${i + 1}] = :${p}`, { [p]: subDomain });
+ i++;
+ }
+ }
+ }));
+ }
+
+ if (blackDomains.length > 0) {
+ query.andWhere(new Brackets(qb => {
+ for (const blackDomain of blackDomains) {
+ const subDomains = blackDomain.split('.');
+ let i = 0;
+ for (const subDomain of subDomains) {
+ const p = `blackSubDomain_${subDomain}_${i}`;
+ // 全体で否定できないのでド・モルガンの法則で
+ // !(P && Q) を !P || !Q で表す
+ // SQL is 1 based, so we need '+ 1'
+ qb.orWhere(`log.domain[${i + 1}] != :${p}`, { [p]: subDomain });
+ i++;
+ }
+ }
+ }));
}
}
- const logs = await Log
- .find(query, {
- limit: ps.limit,
- sort: sort
- });
+ const logs = await query.orderBy('log.createdAt', 'DESC').take(ps.limit!).getMany();
return logs;
});