From 06faa233f86cae817c14dd054a20ac825edea81c Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 31 Dec 2021 17:57:29 +0800 Subject: [PATCH] core: domain_del --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/api.ts | 1 + packages/hydrooj/src/handler/domain.ts | 12 +++++++++-- packages/ui-default/package.json | 2 +- .../ui-default/templates/domain_edit.html | 20 +++++++++++++++++++ 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index c48d43d7f..3dace9c85 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.2.39", + "version": "3.2.40", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/api.ts b/packages/hydrooj/src/handler/api.ts index 21a354925..db9d972c1 100644 --- a/packages/hydrooj/src/handler/api.ts +++ b/packages/hydrooj/src/handler/api.ts @@ -41,6 +41,7 @@ export function registerResolver( const res = await func(arg, ctx, info); if (typeof res !== 'object') return res; if (handlers[value]) Object.assign(res, handlers[value]); + ctx.parent = res; return res; }; if (handlers[typeName]) handlers[typeName][key.split('(')[0].trim()] = wrappedFunc; diff --git a/packages/hydrooj/src/handler/domain.ts b/packages/hydrooj/src/handler/domain.ts index a1286296c..4a23f0481 100644 --- a/packages/hydrooj/src/handler/domain.ts +++ b/packages/hydrooj/src/handler/domain.ts @@ -2,8 +2,8 @@ import { load } from 'js-yaml'; import { Dictionary } from 'lodash'; import moment from 'moment-timezone'; import { - DomainJoinAlreadyMemberError, DomainJoinForbiddenError, InvalidJoinInvitationCodeError, - RoleAlreadyExistError, ValidationError, + DomainJoinAlreadyMemberError, DomainJoinForbiddenError, ForbiddenError, + InvalidJoinInvitationCodeError, RoleAlreadyExistError, ValidationError, } from '../error'; import type { DomainDoc } from '../interface'; import avatar from '../lib/avatar'; @@ -56,6 +56,7 @@ class DomainEditHandler extends ManageHandler { } async post(args) { + if (args.operation) return; const $set = {}; for (const key in args) { if (DOMAIN_SETTINGS_BY_KEY[key]) $set[key] = args[key]; @@ -63,6 +64,13 @@ class DomainEditHandler extends ManageHandler { await domain.edit(args.domainId, $set); this.response.redirect = this.url('domain_dashboard'); } + + async postDelete({ password }) { + this.user.checkPassword(password); + if (this.domain.owner === this.user._id) throw new ForbiddenError('You are not the owner of this domain.'); + await domain.del(this.domainId); + this.response.redirect = this.url('home_domain', { domainId: 'system' }); + } } class DomainDashboardHandler extends ManageHandler { diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 193420c81..3bfbd8876 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.27.16", + "version": "4.27.17", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/domain_edit.html b/packages/ui-default/templates/domain_edit.html index b312beb5f..f3fd847f7 100644 --- a/packages/ui-default/templates/domain_edit.html +++ b/packages/ui-default/templates/domain_edit.html @@ -3,4 +3,24 @@
{% include "partials/setting.html" %}
+
+
+

{{ _('Delete Domain') }}

+
+
+
+ {{ form.form_text({ + type:'password', + label:'Password', + columns:10, + name:'password', + required:true + }) }} +
+ + +
+
+
+
{% endblock %}