summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/web
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-03-19 19:08:55 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-03-19 19:08:55 +0900
commitcaadc0978a786f2f64aad1caa37fcd9dafff0546 (patch)
tree63bec1bd4a7fd658a61fe89ab83bce44963f5397 /packages/backend/src/server/web
parentFix: "Adding email to profile ends in error" (#8405) (diff)
downloadsharkey-caadc0978a786f2f64aad1caa37fcd9dafff0546.tar.gz
sharkey-caadc0978a786f2f64aad1caa37fcd9dafff0546.tar.bz2
sharkey-caadc0978a786f2f64aad1caa37fcd9dafff0546.zip
feat: introduce bull dashboard
Diffstat (limited to 'packages/backend/src/server/web')
-rw-r--r--packages/backend/src/server/web/index.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/packages/backend/src/server/web/index.ts b/packages/backend/src/server/web/index.ts
index cc4c2cc9ca..44c199c30c 100644
--- a/packages/backend/src/server/web/index.ts
+++ b/packages/backend/src/server/web/index.ts
@@ -10,6 +10,9 @@ import Router from '@koa/router';
import send from 'koa-send';
import favicon from 'koa-favicon';
import views from 'koa-views';
+import { createBullBoard } from '@bull-board/api';
+import { BullAdapter } from '@bull-board/api/bullAdapter.js';
+import { KoaAdapter } from '@bull-board/koa';
import packFeed from './feed.js';
import { fetchMeta } from '@/misc/fetch-meta.js';
@@ -20,6 +23,7 @@ import * as Acct from '@/misc/acct.js';
import { getNoteSummary } from '@/misc/get-note-summary.js';
import { urlPreviewHandler } from './url-preview.js';
import { manifestHandler } from './manifest.js';
+import { queues } from '@/queue/queues.js';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
@@ -31,6 +35,37 @@ const assets = `${_dirname}/../../../../../built/_client_dist_/`;
// Init app
const app = new Koa();
+//#region Bull Dashboard
+const bullBoardPath = '/queue';
+
+// Authenticate
+app.use(async (ctx, next) => {
+ if (ctx.path === bullBoardPath || ctx.path.startsWith(bullBoardPath + '/')) {
+ const token = ctx.cookies.get('token');
+ if (token == null) {
+ ctx.status = 401;
+ return;
+ }
+ const user = await Users.findOne({ token });
+ if (user == null || !(user.isAdmin || user.isModerator)) {
+ ctx.status = 403;
+ return;
+ }
+ }
+ await next();
+});
+
+const serverAdapter = new KoaAdapter();
+
+createBullBoard({
+ queues: queues.map(q => new BullAdapter(q)),
+ serverAdapter,
+});
+
+serverAdapter.setBasePath(bullBoardPath);
+app.use(serverAdapter.registerPlugin());
+//#endregion
+
// Init renderer
app.use(views(_dirname + '/views', {
extension: 'pug',