This commit is contained in:
undefined committed 2020-07-23 20:00:36 +08:00
1 parent 81868cafbb
commit 2e4c818c37
4 files changed
+38 -20

No files matched your search

+14 -1
View File
@@ -2,7 +2,8 @@ import { RoleAlreadyExistError, ValidationError } from '../error';
import * as user from '../model/user'; import * as user from '../model/user';
import * as domain from '../model/domain'; import * as domain from '../model/domain';
import { DOMAIN_SETTINGS, DOMAIN_SETTINGS_BY_KEY } from '../model/setting'; import { DOMAIN_SETTINGS, DOMAIN_SETTINGS_BY_KEY } from '../model/setting';
import { PERM, PERMS_BY_FAMILY } from '../model/builtin'; import { PERM, PERMS_BY_FAMILY, PRIV } from '../model/builtin';
import { gravatar } from '../lib/misc';
import paginate from '../lib/paginate'; import paginate from '../lib/paginate';
import { import {
Route, Handler, Types, param, Route, Handler, Types, param,
@@ -180,6 +181,17 @@ class DomainRoleHandler extends ManageHandler {
} }
} }
class DomainSearchHandler extends Handler {
@param('q', Types.String)
async get(q: string) {
const ddocs = await domain.getPrefixSearch(q, 20);
for (let i = 0; i < ddocs.length; i++) {
ddocs[i].gravatar = ddocs[i].gravatar ? gravatar(ddocs[i].gravatar) : '/img/team_avatar.png';
}
this.response.body = ddocs;
}
}
export async function apply() { export async function apply() {
Route('ranking', '/ranking', DomainRankHandler); Route('ranking', '/ranking', DomainRankHandler);
Route('domain_dashboard', '/domain/dashboard', DomainDashboardHandler); Route('domain_dashboard', '/domain/dashboard', DomainDashboardHandler);
@@ -187,6 +199,7 @@ export async function apply() {
Route('domain_user', '/domain/user', DomainUserHandler); Route('domain_user', '/domain/user', DomainUserHandler);
Route('domain_permission', '/domain/permission', DomainPermissionHandler); Route('domain_permission', '/domain/permission', DomainPermissionHandler);
Route('domain_role', '/domain/role', DomainRoleHandler); Route('domain_role', '/domain/role', DomainRoleHandler);
Route('domain_search', '/domain/search', DomainSearchHandler, PRIV.PRIV_USER_PROFILE);
} }
global.Hydro.handler.domain = apply; global.Hydro.handler.domain = apply;
+14 -18
View File
@@ -96,9 +96,7 @@ async function executeCommand(input: string) {
async function messageHandler(worker: cluster.Worker, msg: any) { async function messageHandler(worker: cluster.Worker, msg: any) {
if (!msg) msg = worker; if (!msg) msg = worker;
if (msg.event) { if (msg.event) {
if (msg.event === 'setAddon') { if (msg.event === 'bus') {
global.addons = msg.addons;
} else if (msg.event === 'bus') {
if (cluster.isMaster) { if (cluster.isMaster) {
for (const i in cluster.workers) { for (const i in cluster.workers) {
cluster.workers[i].send(msg); cluster.workers[i].send(msg);
@@ -165,11 +163,6 @@ process.on('unhandledRejection', (e) => console.error(e));
process.on('SIGINT', terminate); process.on('SIGINT', terminate);
export async function load() { export async function load() {
while (!global.addons) {
await new Promise((resolve) => {
setTimeout(resolve, 100);
});
}
addon(path.resolve(__dirname, '..')); addon(path.resolve(__dirname, '..'));
Error.stackTraceLimit = 50; Error.stackTraceLimit = 50;
process.on('message', messageHandler); process.on('message', messageHandler);
@@ -201,19 +194,22 @@ export async function load() {
}); });
cluster.on('online', (worker) => { cluster.on('online', (worker) => {
console.log(`Worker ${worker.process.pid} ${worker.id} is online`); console.log(`Worker ${worker.process.pid} ${worker.id} is online`);
worker.send({ event: 'setAddon', addons: global.addons });
}); });
await startWorker(cnt); await startWorker(cnt);
} else if (argv.entry) {
console.log(`Worker ${process.pid} Starting as ${argv.entry}`);
await entry({ entry: argv.entry });
console.log(`Worker ${process.pid} Started as ${argv.entry}`);
} else { } else {
if (argv.firstWorker) cluster.isFirstWorker = true; global.addons = JSON.parse(Buffer.from(argv.addons as string, 'base64').toString());
else cluster.isFirstWorker = false; console.log(global.addons);
console.log(`Worker ${process.pid} Starting`); if (argv.entry) {
await entry({ entry: 'worker' }); console.log(`Worker ${process.pid} Starting as ${argv.entry}`);
console.log(`Worker ${process.pid} Started`); await entry({ entry: argv.entry });
console.log(`Worker ${process.pid} Started as ${argv.entry}`);
} else {
if (argv.firstWorker) cluster.isFirstWorker = true;
else cluster.isFirstWorker = false;
console.log(`Worker ${process.pid} Starting`);
await entry({ entry: 'worker' });
console.log(`Worker ${process.pid} Started`);
}
} }
if (global.gc) global.gc(); if (global.gc) global.gc();
} }
+9
View File
@@ -142,6 +142,14 @@ export async function getDictUserByDomainId(uid: number) {
return dudict; return dudict;
} }
export async function getPrefixSearch(prefix: string, limit = 50) {
const $regex = new RegExp(prefix, 'mi');
const ddocs = await coll.find({
$or: [{ _id: { $regex } }, { name: { $regex } }],
}).limit(limit).toArray();
return ddocs;
}
global.Hydro.model.domain = { global.Hydro.model.domain = {
getRoles, getRoles,
add, add,
@@ -161,4 +169,5 @@ global.Hydro.model.domain = {
incUserInDomain, incUserInDomain,
getMultiInDomain, getMultiInDomain,
getDictUserByDomainId, getDictUserByDomainId,
getPrefixSearch,
}; };
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "hydrooj", "name": "hydrooj",
"version": "2.9.11", "version": "2.9.12",
"main": "dist/loader.js", "main": "dist/loader.js",
"bin": "bin/hydrooj.js", "bin": "bin/hydrooj.js",
"repository": "https://github.com/hydro-dev/Hydro.git", "repository": "https://github.com/hydro-dev/Hydro.git",