diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-05-06 01:34:48 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-05-06 01:34:48 +0900 |
| commit | 440cf139bb7d5998523ae29c0c5e6394f570bc6c (patch) | |
| tree | 0f090fa9dc9c3a0625a33c380c17b51959684aad /src/server/web | |
| parent | 2.2.0 (diff) | |
| download | sharkey-440cf139bb7d5998523ae29c0c5e6394f570bc6c.tar.gz sharkey-440cf139bb7d5998523ae29c0c5e6394f570bc6c.tar.bz2 sharkey-440cf139bb7d5998523ae29c0c5e6394f570bc6c.zip | |
メタ情報をレンダリングするように
Diffstat (limited to 'src/server/web')
| -rw-r--r-- | src/server/web/index.ts | 50 | ||||
| -rw-r--r-- | src/server/web/views/note.pug | 20 | ||||
| -rw-r--r-- | src/server/web/views/user.pug | 19 |
3 files changed, 89 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`, { diff --git a/src/server/web/views/note.pug b/src/server/web/views/note.pug new file mode 100644 index 0000000000..3107c0329c --- /dev/null +++ b/src/server/web/views/note.pug @@ -0,0 +1,20 @@ +extends ../../../../src/client/app/base + +block vars + - const user = note.user; + - const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`; + - const url = `${config.url}/notes/${note.id}`; + - const img = user.avatarId ? `${config.drive_url}/${user.avatarId}` : null; + +block title + = `${title} | Misskey` + +block desc + meta(name='description' content= summary) + +block meta + meta(name='twitter:card' content='summary') + meta(property='og:title' content= title) + meta(property='og:description' content= summary) + meta(property='og:url' content= url) + meta(property='og:image' content= img) diff --git a/src/server/web/views/user.pug b/src/server/web/views/user.pug new file mode 100644 index 0000000000..cdfacb32b4 --- /dev/null +++ b/src/server/web/views/user.pug @@ -0,0 +1,19 @@ +extends ../../../../src/client/app/base + +block vars + - const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`; + - const url = config.url + '/@' + (user.host ? `${user.username}@${user.host}` : user.username); + - const img = user.avatarId ? `${config.drive_url}/${user.avatarId}` : null; + +block title + = `${title} | Misskey` + +block desc + meta(name='description' content= user.description) + +block meta + meta(name='twitter:card' content='summary') + meta(property='og:title' content= title) + meta(property='og:description' content= user.description) + meta(property='og:url' content= url) + meta(property='og:image' content= img) |