Merge branch 'master' of github.com:syuilo/misskey

This commit is contained in:
ha-dai 2017-11-30 13:24:41 +09:00
commit 1956645c2e
13 changed files with 171 additions and 17 deletions

View File

@ -2,6 +2,18 @@ ChangeLog (Release Notes)
=========================
主に notable な changes を書いていきます
3230 (2017/11/28)
-----------------
* :v:
3219 (2017/11/28)
-----------------
* なんか
3212 (2017/11/27)
-----------------
* なんか
3201 (2017/11/23)
-----------------
* Twitterログインを実装 (#939)

View File

@ -1,7 +1,7 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "0.0.3201",
"version": "0.0.3230",
"license": "MIT",
"description": "A miniblog-based SNS",
"bugs": "https://github.com/syuilo/misskey/issues",
@ -26,14 +26,14 @@
"@prezzemolo/zip": "0.0.3",
"@types/bcryptjs": "2.4.1",
"@types/body-parser": "1.16.8",
"@types/chai": "4.0.5",
"@types/chai": "4.0.6",
"@types/chai-http": "3.0.3",
"@types/compression": "0.0.35",
"@types/cookie": "0.3.1",
"@types/cors": "2.8.3",
"@types/debug": "0.0.30",
"@types/deep-equal": "1.0.1",
"@types/elasticsearch": "5.0.17",
"@types/elasticsearch": "5.0.18",
"@types/event-stream": "3.3.33",
"@types/eventemitter3": "2.0.2",
"@types/express": "4.0.39",
@ -48,9 +48,9 @@
"@types/inquirer": "0.0.35",
"@types/is-root": "1.0.0",
"@types/is-url": "1.2.28",
"@types/js-yaml": "3.10.0",
"@types/js-yaml": "3.10.1",
"@types/mocha": "2.2.44",
"@types/mongodb": "2.2.15",
"@types/mongodb": "2.2.16",
"@types/monk": "1.0.6",
"@types/morgan": "1.7.35",
"@types/ms": "0.7.30",
@ -60,7 +60,7 @@
"@types/proxy-addr": "2.0.0",
"@types/ratelimiter": "2.1.28",
"@types/redis": "2.8.1",
"@types/request": "2.0.7",
"@types/request": "2.0.8",
"@types/rimraf": "2.0.2",
"@types/riot": "3.6.1",
"@types/seedrandom": "2.4.27",
@ -69,7 +69,7 @@
"@types/uuid": "3.4.3",
"@types/webpack": "3.8.1",
"@types/webpack-stream": "3.2.8",
"@types/websocket": "0.0.34",
"@types/websocket": "0.0.35",
"accesses": "2.5.0",
"animejs": "2.2.0",
"autwh": "0.0.1",
@ -92,7 +92,7 @@
"elasticsearch": "14.0.0",
"escape-regexp": "0.0.1",
"event-stream": "3.3.4",
"eventemitter3": "2.0.3",
"eventemitter3": "3.0.0",
"express": "4.16.2",
"file-type": "7.3.0",
"fuckadblock": "3.2.1",
@ -113,7 +113,7 @@
"is-root": "1.0.0",
"is-url": "1.2.2",
"js-yaml": "3.10.0",
"mecab-async": "0.1.0",
"mecab-async": "0.1.2",
"mocha": "4.0.1",
"moji": "0.5.1",
"mongodb": "2.2.33",
@ -153,8 +153,8 @@
"tmp": "0.0.33",
"ts-node": "3.3.0",
"tslint": "5.8.0",
"typescript": "2.6.1",
"uglify-es": "3.1.10",
"typescript": "2.6.2",
"uglify-es": "3.2.0",
"uglifyjs-webpack-plugin": "1.1.1",
"uuid": "3.1.0",
"vhost": "3.0.2",

View File

@ -45,7 +45,7 @@ module.exports = (params) => new Promise(async (res, rej) => {
res({
maintainer: config.maintainer,
version: version,
secure: config.https.enable,
secure: config.https != null,
machine: os.hostname(),
os: os.platform(),
node: process.version,

View File

@ -69,4 +69,38 @@
script.setAttribute('async', 'true');
script.setAttribute('defer', 'true');
head.appendChild(script);
// 1秒経ってもスクリプトがロードされない場合はバージョンが古くて
// 404になっているせいかもしれないので、バージョンを確認して古ければ更新する
//
// 読み込まれたスクリプトからこのタイマーを解除できるように、
// グローバルにタイマーIDを代入しておく
window.mkBootTimer = window.setTimeout(async () => {
// Fetch meta
const res = await fetch(API + '/meta', {
method: 'POST',
cache: 'no-cache'
});
// Parse
const meta = await res.json();
// Compare versions
if (meta.version != VERSION) {
alert(
'Misskeyの新しいバージョンがあります。ページを再度読み込みします。' +
'\n\n' +
'New version of Misskey available. The page will be reloaded.');
// Clear cache (serive worker)
try {
navigator.serviceWorker.controller.postMessage('clear');
} catch (e) {
console.error(e);
}
// Force reload
location.reload(true);
}
}, 1000);
}

View File

@ -29,7 +29,8 @@ export default (i, endpoint, data = {}): Promise<{ [x: string]: any }> => {
fetch(endpoint.indexOf('://') > -1 ? endpoint : `${_API_URL_}/${endpoint}`, {
method: 'POST',
body: JSON.stringify(data),
credentials: endpoint === 'signin' ? 'include' : 'omit'
credentials: endpoint === 'signin' ? 'include' : 'omit',
cache: 'no-cache'
}).then(res => {
if (--pending === 0) spinner.parentNode.removeChild(spinner);
if (res.status === 200) {

View File

@ -7,6 +7,14 @@ export default async function(mios: MiOS) {
if (meta.version != _VERSION_) {
localStorage.setItem('should-refresh', 'true');
// Clear cache (serive worker)
try {
navigator.serviceWorker.controller.postMessage('clear');
} catch (e) {
console.error(e);
}
alert('%i18n:common.update-available%'.replace('{newer}', meta.version).replace('{current}', _VERSION_));
}
}

View File

@ -86,7 +86,9 @@
});
this.fetch = () => {
fetch(`https://api.rss2json.com/v1/api.json?rss_url=${this.url}`).then(res => {
fetch(`https://api.rss2json.com/v1/api.json?rss_url=${this.url}`, {
cache: 'no-cache'
}).then(res => {
res.json().then(feed => {
this.update({
initializing: false,

View File

@ -19,6 +19,10 @@ require('./common/tags');
console.info(`Misskey v${_VERSION_} (葵 aoi)`);
// BootTimer解除
window.clearTimeout((window as any).mkBootTimer);
delete (window as any).mkBootTimer;
if (_HOST_ != 'localhost') {
document.domain = _HOST_;
}

View File

@ -4,9 +4,41 @@
import composeNotification from './common/scripts/compose-notification';
// キャッシュするリソース
const cachee = [
'/'
];
// インストールされたとき
self.addEventListener('install', () => {
self.addEventListener('install', ev => {
console.info('installed');
ev.waitUntil(Promise.all([
self.skipWaiting(), // Force activate
caches.open(_VERSION_).then(cache => cache.addAll(cachee)) // Cache
]));
});
// アクティベートされたとき
self.addEventListener('activate', ev => {
// Clean up old caches
ev.waitUntil(
caches.keys().then(keys => Promise.all(
keys
.filter(key => key != _VERSION_)
.map(key => caches.delete(key))
))
);
});
// リクエストが発生したとき
self.addEventListener('fetch', ev => {
ev.respondWith(
// キャッシュがあるか確認してあればそれを返す
caches.match(ev.request).then(response =>
response || fetch(ev.request)
)
);
});
// プッシュ通知を受け取ったとき
@ -31,3 +63,9 @@ self.addEventListener('push', ev => {
});
}));
});
self.addEventListener('message', ev => {
if (ev.data == 'clear') {
caches.keys().then(keys => keys.forEach(key => caches.delete(key)));
}
});

15
src/web/assets/404.js Normal file
View File

@ -0,0 +1,15 @@
const yn = window.confirm(
'サーバー上に存在しないスクリプトがリクエストされました。お使いのMisskeyのバージョンが古いことが原因の可能性があります。Misskeyを更新しますか');
if (yn) {
// Clear cache (serive worker)
try {
navigator.serviceWorker.controller.postMessage('clear');
} catch (e) {
console.error(e);
}
location.reload(true);
} else {
alert('問題が解決しない場合はサーバー管理者までお問い合せください。');
}

View File

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Misskeyのリカバリ</title>
<script>
const yn = window.confirm('キャッシュをクリアしますか?\n\nDo you want to clear caches?');
if (yn) {
try {
navigator.serviceWorker.controller.postMessage('clear');
navigator.serviceWorker.getRegistrations().then(registrations => {
registrations.forEach(registration => registration.unregister());
});
} catch (e) {
console.error(e);
}
localStorage.setItem('should-refresh', 'true');
alert('キャッシュをクリアしました。');
location.href = '/';
} else {
alert('問題が解決しない場合はサーバー管理者までお問い合せください。');
}
</script>
</head>
</html>

View File

@ -39,6 +39,12 @@ app.get('/apple-touch-icon.png', (req, res) => res.sendFile(`${__dirname}/assets
app.use('/assets', express.static(`${__dirname}/assets`, {
maxAge: ms('7 days')
}));
app.use('/assets/*.js', (req, res) => res.sendFile(`${__dirname}/assets/404.js`));
app.use('/assets', (req, res) => {
res.sendStatus(404);
});
app.use('/recover', (req, res) => res.sendFile(`${__dirname}/assets/recover.html`));
/**
* ServiceWroker

View File

@ -2,7 +2,7 @@ const StringReplacePlugin = require('string-replace-webpack-plugin');
import consts from './consts';
import hoist from './hoist';
//import minify from './minify';
import minify from './minify';
import banner from './banner';
const env = process.env.NODE_ENV;
@ -16,7 +16,7 @@ export default (version, lang) => {
];
if (isProduction) {
//plugins.push(minify());
plugins.push(minify());
}
plugins.push(banner(version));