You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.9 KiB
JavaScript
105 lines
2.9 KiB
JavaScript
const domain = require('../model/domain');
|
|
const setting = require('../model/setting');
|
|
const system = require('../model/system');
|
|
const { Route, Handler } = require('../service/server');
|
|
const { PERM_MANAGE } = require('../permission');
|
|
const hpm = require('../lib/hpm');
|
|
const loader = require('../loader');
|
|
const { PermissionError } = require('../error');
|
|
|
|
class ManageHandler extends Handler {
|
|
async prepare({ domainId }) {
|
|
this.checkPerm(PERM_MANAGE);
|
|
this.domain = await domain.get(domainId);
|
|
}
|
|
}
|
|
|
|
class ManageMainHandler extends ManageHandler {
|
|
async get() {
|
|
this.response.redirect = '/manage/dashboard';
|
|
}
|
|
}
|
|
|
|
class ManageDashboardHandler extends ManageHandler {
|
|
async get() {
|
|
const path = [
|
|
['Hydro', '/'],
|
|
['manage', '/manage'],
|
|
['manage_dashboard', null],
|
|
];
|
|
this.response.template = 'manage_dashboard.html';
|
|
this.response.body = { domain: this.domain, path };
|
|
}
|
|
}
|
|
|
|
class SystemHandler extends Handler {
|
|
async prepare() {
|
|
if (!this.user.priv) throw new PermissionError('???');
|
|
}
|
|
}
|
|
|
|
class SystemModuleHandler extends SystemHandler {
|
|
async get() {
|
|
const installed = await hpm.getInstalled();
|
|
const path = [
|
|
['Hydro', '/'],
|
|
['manage', '/manage'],
|
|
['manage_module', null],
|
|
];
|
|
this.response.body = { installed, active: loader.active, path };
|
|
this.response.template = 'manage_module.html';
|
|
}
|
|
|
|
async postInstall({ url, id }) {
|
|
await hpm.install(url, id);
|
|
this.back();
|
|
}
|
|
|
|
async postDelete({ id }) {
|
|
await hpm.del(id);
|
|
this.back();
|
|
}
|
|
}
|
|
|
|
class SystemSettingHandler extends SystemHandler {
|
|
async get() {
|
|
this.response.template = 'manage_settings.html';
|
|
const current = {};
|
|
const settings = setting.SYSTEM_SETTINGS;
|
|
for (const s of settings) {
|
|
current[s.key] = await system.get(s.key);
|
|
}
|
|
this.response.body = { current, settings };
|
|
}
|
|
|
|
async post(args) {
|
|
const tasks = [];
|
|
for (const key in args) {
|
|
if (typeof args[key] === 'object') {
|
|
const subtasks = [];
|
|
for (const sub in args[key]) {
|
|
subtasks.push(system.set(`${key}.${sub}`, args[key][sub]));
|
|
}
|
|
tasks.push(Promise.all(subtasks));
|
|
} else tasks.push(system.set(key, args[key]));
|
|
}
|
|
await Promise.all(tasks);
|
|
this.back();
|
|
}
|
|
}
|
|
|
|
async function apply() {
|
|
Route('/manage', module.exports.ManageMainHandler);
|
|
Route('/manage/dashboard', module.exports.ManageDashboardHandler);
|
|
Route('/manage/module', SystemModuleHandler);
|
|
Route('/manage/setting', SystemSettingHandler);
|
|
}
|
|
|
|
global.Hydro.handler.manage = module.exports = {
|
|
ManageMainHandler,
|
|
ManageDashboardHandler,
|
|
SystemModuleHandler,
|
|
SystemSettingHandler,
|
|
apply,
|
|
};
|