From e6edec5b87a90c0ceb260193da09b923d53b908b Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 18 Apr 2018 14:26:46 +0900 Subject: Update dependencies :rocket: --- gulpfile.ts | 2 -- 1 file changed, 2 deletions(-) (limited to 'gulpfile.ts') diff --git a/gulpfile.ts b/gulpfile.ts index fe3b040237..719fe9450a 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -2,9 +2,7 @@ * Gulp tasks */ -import * as childProcess from 'child_process'; import * as fs from 'fs'; -import * as Path from 'path'; import * as gulp from 'gulp'; import * as gutil from 'gulp-util'; import * as ts from 'gulp-typescript'; -- cgit v1.2.3-freya From 0b99483ccbb1a4c111177718c0e9300a19d36a28 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 22 Apr 2018 21:32:09 +0900 Subject: サーバーのバージョンとクライアントのバージョンを分けた MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - gulpfile.ts | 4 ++-- package.json | 7 ++----- src/client/app/boot.js | 4 ++-- src/client/app/common/scripts/check-for-update.ts | 2 +- src/server/api/endpoints/meta.ts | 9 +++++++-- src/version.ts | 7 ------- webpack.config.ts | 4 ++-- 8 files changed, 16 insertions(+), 22 deletions(-) delete mode 100644 src/version.ts (limited to 'gulpfile.ts') diff --git a/.gitignore b/.gitignore index be8689e2ed..326db6fa5e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,3 @@ npm-debug.log run.bat api-docs.json package-lock.json -version.json diff --git a/gulpfile.ts b/gulpfile.ts index 719fe9450a..df355e33e7 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -21,7 +21,7 @@ import * as htmlmin from 'gulp-htmlmin'; const uglifyes = require('uglify-es'); import { fa } from './src/build/fa'; -import version from './src/version'; +const client = require('./built/client/meta.json'); import config from './src/config'; const uglify = uglifyComposer(uglifyes, console); @@ -113,7 +113,7 @@ gulp.task('build:client', [ gulp.task('build:client:script', () => gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js']) - .pipe(replace('VERSION', JSON.stringify(version))) + .pipe(replace('VERSION', JSON.stringify(client.version))) .pipe(replace('API', JSON.stringify(config.api_url))) .pipe(replace('ENV', JSON.stringify(env))) .pipe(isProduction ? uglify({ diff --git a/package.json b/package.json index a6cc8f65e0..0a3026e17e 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,9 @@ { "name": "misskey", "author": "syuilo ", - "version": "0.0.5089", + "version": "1.0.0", + "clientVersion": "1.0.0", "codename": "nighthike", - "license": "MIT", - "description": "A miniblog-based SNS", - "bugs": "https://github.com/syuilo/misskey/issues", - "repository": "https://github.com/syuilo/misskey.git", "main": "./built/index.js", "private": true, "scripts": { diff --git a/src/client/app/boot.js b/src/client/app/boot.js index f5a1afec63..35d02cf9c5 100644 --- a/src/client/app/boot.js +++ b/src/client/app/boot.js @@ -105,8 +105,8 @@ const meta = await res.json(); // Compare versions - if (meta.version != ver) { - localStorage.setItem('v', meta.version); + if (meta.clientVersion != ver) { + localStorage.setItem('v', meta.clientVersion); alert( 'Misskeyの新しいバージョンがあります。ページを再度読み込みします。' + diff --git a/src/client/app/common/scripts/check-for-update.ts b/src/client/app/common/scripts/check-for-update.ts index 20ce64ea85..3ed9d41e76 100644 --- a/src/client/app/common/scripts/check-for-update.ts +++ b/src/client/app/common/scripts/check-for-update.ts @@ -3,7 +3,7 @@ import { version as current } from '../../config'; export default async function(mios: MiOS, force = false, silent = false) { const meta = await mios.getMeta(force); - const newer = meta.version; + const newer = meta.clientVersion; if (newer != current) { localStorage.setItem('should-refresh', 'true'); diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index f6a276a2b7..0e9ecf47df 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -2,10 +2,12 @@ * Module dependencies */ import * as os from 'os'; -import version from '../../../version'; import config from '../../../config'; import Meta from '../../../models/meta'; +const pkg = require('../../../../package.json'); +const client = require('../../../../built/client/meta.json'); + /** * @swagger * /meta: @@ -41,7 +43,10 @@ module.exports = (params) => new Promise(async (res, rej) => { res({ maintainer: config.maintainer, - version: version, + + version: pkg.version, + clientVersion: client.version, + secure: config.https != null, machine: os.hostname(), os: os.platform(), diff --git a/src/version.ts b/src/version.ts deleted file mode 100644 index d379b57f8f..0000000000 --- a/src/version.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Version - */ - -const meta = require('../version.json'); - -export default meta.version as string; diff --git a/webpack.config.ts b/webpack.config.ts index 50e28972ac..96eaf9f4c8 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -19,7 +19,7 @@ import { licenseHtml } from './src/build/license'; import locales from './locales'; const meta = require('./package.json'); -const version = meta.version; +const version = meta.clientVersion; const codename = meta.codename; //#region Replacer definitions @@ -114,7 +114,7 @@ module.exports = entries.map(x => { 'process.env.NODE_ENV': JSON.stringify(isProduction ? 'production' : 'development') }), new WebpackOnBuildPlugin(stats => { - fs.writeFileSync('./version.json', JSON.stringify({ + fs.writeFileSync('./built/client/meta.json', JSON.stringify({ version }), 'utf-8'); }) -- cgit v1.2.3-freya From 440cf139bb7d5998523ae29c0c5e6394f570bc6c Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 6 May 2018 01:34:48 +0900 Subject: メタ情報をレンダリングするように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gulpfile.ts | 8 ++++++- package.json | 2 ++ src/client/app/base.pug | 12 +++++++++- src/renderers/get-note-summary.ts | 2 +- src/server/web/index.ts | 50 +++++++++++++++++++++++++++++++++++++++ src/server/web/views/note.pug | 20 ++++++++++++++++ src/server/web/views/user.pug | 19 +++++++++++++++ 7 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 src/server/web/views/note.pug create mode 100644 src/server/web/views/user.pug (limited to 'gulpfile.ts') diff --git a/gulpfile.ts b/gulpfile.ts index df355e33e7..a9ccbbdb5e 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -59,9 +59,15 @@ gulp.task('build:ts', () => { .pipe(gulp.dest('./built/')); }); -gulp.task('build:copy', () => +gulp.task('build:copy:views', () => + gulp.src('./src/server/web/views/**/*').pipe(gulp.dest('./built/server/web/views')) +); + +gulp.task('build:copy', ['build:copy:views'], () => gulp.src([ './build/Release/crypto_key.node', + './src/const.json', + './src/server/web/views/**/*', './src/**/assets/**/*', '!./src/client/app/**/assets/**/*' ]).pipe(gulp.dest('./built/')) diff --git a/package.json b/package.json index 73369b26f3..d4776a778c 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "@types/koa-multer": "1.0.0", "@types/koa-router": "7.0.28", "@types/koa-send": "4.1.1", + "@types/koa-views": "^2.0.3", "@types/koa__cors": "2.2.2", "@types/kue": "0.11.8", "@types/license-checker": "15.0.0", @@ -146,6 +147,7 @@ "koa-router": "7.4.0", "koa-send": "4.1.3", "koa-slow": "2.1.0", + "koa-views": "^6.1.4", "kue": "0.11.6", "license-checker": "18.0.0", "loader-utils": "1.1.0", diff --git a/src/client/app/base.pug b/src/client/app/base.pug index 32a95a6c99..c182fd6f64 100644 --- a/src/client/app/base.pug +++ b/src/client/app/base.pug @@ -1,3 +1,5 @@ +block vars + doctype html != '\n\n' @@ -9,9 +11,17 @@ html meta(name='application-name' content='Misskey') meta(name='theme-color' content=themeColor) meta(name='referrer' content='origin') + meta(property='og:site_name' content='Misskey') link(rel='manifest' href='/manifest.json') - title Misskey + title + block title + | Misskey + + block desc + meta(name='description' content='A SNS') + + block meta style include ./../../../built/client/assets/init.css diff --git a/src/renderers/get-note-summary.ts b/src/renderers/get-note-summary.ts index dfc05ebfd6..0844c0b184 100644 --- a/src/renderers/get-note-summary.ts +++ b/src/renderers/get-note-summary.ts @@ -1,6 +1,6 @@ /** * 投稿を表す文字列を取得します。 - * @param {*} note 投稿 + * @param {*} note (packされた)投稿 */ const summarize = (note: any): string => { if (note.isHidden) { 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) -- cgit v1.2.3-freya