diff --git a/packages/hydrooj/locales/zh.yaml b/packages/hydrooj/locales/zh.yaml index e749d1d02..b239ec8e6 100644 --- a/packages/hydrooj/locales/zh.yaml +++ b/packages/hydrooj/locales/zh.yaml @@ -92,6 +92,9 @@ Begin Time: 开始时间 Belongs to: 属于 Bio Visibility: 个人简介可见性 Bio: 个人简介 +blog_detail: 博客详情 +blog_edit: 编辑博客 +blog_main: 博客 Blog: 博客 Bold: 加粗 Boom!: 炸了! diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index e6c526380..64ca573fb 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.2.22", + "version": "3.2.23", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/blog.ts b/packages/hydrooj/src/handler/blog.ts index c2085cd67..d521b0bfe 100644 --- a/packages/hydrooj/src/handler/blog.ts +++ b/packages/hydrooj/src/handler/blog.ts @@ -1,11 +1,11 @@ import { ObjectID } from 'mongodb'; -import { DiscussionNotFoundError } from '../error'; +import { DiscussionNotFoundError, ForbiddenError } from '../error'; import { BlogDoc } from '../interface'; import paginate from '../lib/paginate'; import * as blog from '../model/blog'; -import { PERM, PRIV } from '../model/builtin'; -import * as discussion from '../model/discussion'; +import { PRIV } from '../model/builtin'; import * as oplog from '../model/oplog'; +import * as system from '../model/system'; import user from '../model/user'; import { Handler, param, Route, Types, @@ -16,7 +16,7 @@ class BlogHandler extends Handler { @param('did', Types.ObjectID, true) async _prepare(domainId: string, did: ObjectID) { - this.checkPerm(PERM.PERM_VIEW_DISCUSSION); + if (!system.get('server.blog')) throw new ForbiddenError('Blog is disabled'); if (did) { this.ddoc = await blog.get(did); if (!this.ddoc) throw new DiscussionNotFoundError(domainId, did); @@ -89,7 +89,6 @@ class BlogEditHandler extends BlogHandler { @param('title', Types.Title) @param('content', Types.Content) async postCreate(domainId: string, title: string, content: string) { - this.checkPerm(PERM.PERM_CREATE_DISCUSSION); await this.limitRate('add_blog', 3600, 60); const did = await blog.add(this.user._id, title, content, this.request.ip); this.response.body = { did }; @@ -100,8 +99,7 @@ class BlogEditHandler extends BlogHandler { @param('title', Types.Title) @param('content', Types.Content) async postUpdate(domainId: string, did: ObjectID, title: string, content: string) { - if (!this.user.own(this.ddoc)) this.checkPerm(PERM.PERM_EDIT_DISCUSSION); - else this.checkPerm(PERM.PERM_EDIT_DISCUSSION_SELF); + if (!this.user.own(this.ddoc)) this.checkPriv(PRIV.PRIV_EDIT_SYSTEM); await blog.edit(did, title, content); await oplog.add({ ...this.ddoc, operator: this.user._id, type: 'edit', @@ -112,9 +110,8 @@ class BlogEditHandler extends BlogHandler { @param('did', Types.ObjectID) async postDelete(domainId: string, did: ObjectID) { - if (!this.user.own(this.ddoc)) this.checkPerm(PERM.PERM_DELETE_DISCUSSION); - else this.checkPerm(PERM.PERM_DELETE_DISCUSSION_SELF); - await discussion.del(domainId, did); + if (!this.user.own(this.ddoc)) this.checkPriv(PRIV.PRIV_EDIT_SYSTEM); + await blog.del(did); await oplog.add({ ...this.ddoc, operator: this.user._id, operateIp: this.request.ip, type: 'delete', }); diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index 60b858286..73bdc2fa0 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -201,6 +201,7 @@ SystemSetting( Setting('setting_server', 'server.language', 'zh_CN', langRange, 'server.language', 'Default display language'), Setting('setting_server', 'server.login', true, 'boolean', 'server.login', 'Allow builtin-login', FLAG_PRO), Setting('setting_server', 'server.message', true, 'boolean', 'server.message', 'Allow users send messages'), + Setting('setting_server', 'server.blog', true, 'boolean', 'server.blog', 'Allow users post blog'), Setting('setting_server', 'server.ignoreUA', ignoreUA, 'textarea', 'server.ignoreUA', 'ignoredUA'), ServerLangSettingNode, Setting('setting_limits', 'limit.problem_files_max', 100, 'number', 'limit.problem_files_max', 'Max files per problem'), diff --git a/packages/ui-default/entry.js b/packages/ui-default/entry.js index d05984d7f..9622b1223 100644 --- a/packages/ui-default/entry.js +++ b/packages/ui-default/entry.js @@ -20,7 +20,7 @@ console.log( `, ); -document.addEventListener('DOMContentLoaded', () => { +document.addEventListener('DOMContentLoaded', async () => { window.UiContext = JSON.parse(window.UiContext); // eslint-disable-next-line camelcase @@ -32,16 +32,14 @@ document.addEventListener('DOMContentLoaded', () => { eval(payload[0]); // eslint-disable-line no-eval payload.shift(); window.Hydro.preload = payload; - import('./hydro'); } else { - fetch(`/constant?version=${UiContext.constantVersion}`) - .then((res) => res.json()) - .then((data) => { - eval(data.payload[0]); // eslint-disable-line no-eval - localStorage.setItem('hydro-constant', JSON.stringify(data)); - data.payload.shift(); - window.Hydro.preload = data.payload; - import('./hydro'); - }); + const res = await fetch(`/constant?version=${UiContext.constantVersion}`); + const data = await res.json(); + eval(data.payload[0]); // eslint-disable-line no-eval + localStorage.setItem('hydro-constant', JSON.stringify(data)); + data.payload.shift(); + window.Hydro.preload = data.payload; } + + import('./hydro'); }, false); diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index dc6ab2112..c31e9595e 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.27.11", + "version": "4.27.12", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/blog_detail.html b/packages/ui-default/templates/blog_detail.html index d70357408..1ccf07ba4 100644 --- a/packages/ui-default/templates/blog_detail.html +++ b/packages/ui-default/templates/blog_detail.html @@ -13,7 +13,7 @@
  • {{ ddoc.title }}

  • - {{ user.render_inline(udict[ddoc.owner]) }} + {{ user.render_inline(udoc) }} @ {{ datetimeSpan(ddoc._id)|safe }}
  • @@ -23,7 +23,7 @@