summaryrefslogtreecommitdiff
path: root/src/server/web/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/web/index.ts')
-rw-r--r--src/server/web/index.ts50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 13751835be..7d4f76665d 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -7,14 +7,32 @@ import * as Koa from 'koa';
import * as Router from 'koa-router';
import * as send from 'koa-send';
import * as favicon from 'koa-favicon';
+import * as views from 'koa-views';
import docs from './docs';
+import User from '../../models/user';
+import parseAcct from '../../acct/parse';
+import { fa } from '../../build/fa';
+import config from '../../config';
+import Note, { pack as packNote } from '../../models/note';
+import getNoteSummary from '../../renderers/get-note-summary';
+const consts = require('../../const.json');
const client = `${__dirname}/../../client/`;
// Init app
const app = new Koa();
+// Init renderer
+app.use(views(__dirname + '/views', {
+ extension: 'pug',
+ options: {
+ config,
+ themeColor: consts.themeColor,
+ facss: fa.dom.css()
+ }
+}));
+
// Serve favicon
app.use(favicon(`${client}/assets/favicon.ico`));
@@ -67,6 +85,38 @@ router.use('/docs', docs.routes());
// URL preview endpoint
router.get('/url', require('./url-preview'));
+//#region for crawlers
+// User
+router.get('/@:user', async ctx => {
+ const { username, host } = parseAcct(ctx.params.user);
+ const user = await User.findOne({
+ usernameLower: username.toLowerCase(),
+ host
+ });
+
+ if (user != null) {
+ await ctx.render('user', { user });
+ } else {
+ ctx.status = 404;
+ }
+});
+
+// Note
+router.get('/notes/:note', async ctx => {
+ const note = await Note.findOne({ _id: ctx.params.note });
+
+ if (note != null) {
+ const _note = await packNote(note);
+ await ctx.render('note', {
+ note: _note,
+ summary: getNoteSummary(_note)
+ });
+ } else {
+ ctx.status = 404;
+ }
+});
+//#endregion
+
// Render base html for all requests
router.get('*', async ctx => {
await send(ctx, `app/base.html`, {