diff --git a/src/frontend/init.tsx b/src/frontend/init.tsx index afcb115..546db43 100644 --- a/src/frontend/init.tsx +++ b/src/frontend/init.tsx @@ -2,4 +2,20 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { App } from './App'; -ReactDOM.render(, document.getElementById('app')); \ No newline at end of file +// cookieにトークンが入ってたらlocalStorageに移し替える +const token = document.cookie + .split('; ') + .find(row => row.startsWith('token')) + ?.split('=')[1]; + +console.log(document.cookie); +console.log(token); + +if (token) { + localStorage['token'] = token; + // 今の所はcookieをトークン以外に使用しないため全消去する + // もしcookieの用途が増えるのであればここを良い感じに書き直す必要がある + document.cookie = ''; +} + +ReactDOM.render(, document.getElementById('app')); diff --git a/src/frontend/pages/index.session.tsx b/src/frontend/pages/index.session.tsx new file mode 100644 index 0000000..9a24cc7 --- /dev/null +++ b/src/frontend/pages/index.session.tsx @@ -0,0 +1,27 @@ +import React, { useEffect, useState } from 'react'; + +import { Header } from '../components/Header'; + +export const IndexSessionPage: React.VFC = () => { + const token = localStorage['token']; + const [session, setSession] = useState | null>(null); + + useEffect(() => { + fetch(`//${location.host}/api/v1/session`, { + headers: { + 'Authorization': `Bearer ${token}`, + }, + }).then(s => s.json()) + .then(setSession); + }, []); + + return ( + <> + + + おかえりなさい、{session?.username}さん。 + + + > + ); +}; diff --git a/src/frontend/pages/index.tsx b/src/frontend/pages/index.tsx index d58e125..080f1e6 100644 --- a/src/frontend/pages/index.tsx +++ b/src/frontend/pages/index.tsx @@ -1,41 +1,10 @@ import React from 'react'; -import { Link } from 'react-router-dom'; -import { Ranking } from '../components/Ranking'; -import { LoginForm } from '../components/LoginForm'; -import { DeveloperInfo } from '../components/DeveloperInfo'; -import { HashtagTimeline } from '../components/HashtagTimeline'; -import { Header } from '../components/Header'; +import { IndexSessionPage } from './index.session'; +import { IndexWelcomePage } from './index.welcome'; export const IndexPage: React.VFC = () => { - return ( - <> - - - - Misskeyは楽しいものです。気がついたら1日中入り浸っていることも多いでしょう。 - - - さあ、今すぐみす廃アラートをインストールして、あなたの活動を把握しよう。 - - - - - - - みす廃ランキング - - 全員分見る - - - - - - - - - - - > - ); + const token = localStorage.getItem('token'); + + return token ? : ; }; diff --git a/src/frontend/pages/index.welcome.tsx b/src/frontend/pages/index.welcome.tsx new file mode 100644 index 0000000..0075336 --- /dev/null +++ b/src/frontend/pages/index.welcome.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +import { Ranking } from '../components/Ranking'; +import { LoginForm } from '../components/LoginForm'; +import { DeveloperInfo } from '../components/DeveloperInfo'; +import { HashtagTimeline } from '../components/HashtagTimeline'; +import { Header } from '../components/Header'; + +export const IndexWelcomePage: React.VFC = () => { + return ( + <> + + + Misskeyは楽しいものです。気がついたら1日中入り浸っていることも多いでしょう。 + さあ、今すぐみす廃アラートをインストールして、あなたの活動を把握しよう。 + + + + + + みす廃ランキング + + 全員分見る + + + + + + + + + + + > + ); +}; diff --git a/src/router.ts b/src/router.ts index 0e9da89..daf0507 100644 --- a/src/router.ts +++ b/src/router.ts @@ -18,8 +18,8 @@ import { die } from './die'; export const router = new Router(); -const sessionHostCache: Record = { }; -const tokenSecretCache: Record = { }; +const sessionHostCache: Record = {}; +const tokenSecretCache: Record = {}; router.get('/login', async ctx => { let host = ctx.query.host as string | undefined; @@ -39,7 +39,7 @@ router.get('/login', async ctx => { host = meta.uri.replace(/^https?:\/\//, ''); const name = 'みす廃あらーと'; const description = 'ついついノートしすぎていませんか?'; - const permission = [ 'write:notes', 'write:notifications' ]; + const permission = ['write:notes', 'write:notifications']; if (meta.features.miauth) { // Use MiAuth @@ -252,7 +252,7 @@ async function login(ctx: Context, user: Record, host: string, const misshaiToken = await updateUsersMisshaiToken(u); - ctx.cookies.set('token', misshaiToken, { signed: true }); + ctx.cookies.set('token', misshaiToken, { signed: false, httpOnly: false }); // await ctx.render('logined', { user: u }); ctx.redirect('/'); diff --git a/src/server.ts b/src/server.ts index 35e4c21..344e91f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -21,24 +21,25 @@ export default (): void => { app.use(bodyParser()); useKoaServer(app, { - controllers: [ __dirname + '/controllers/**/*{.ts,.js}' ], + controllers: [__dirname + '/controllers/**/*{.ts,.js}'], routePrefix: '/api/v1', defaultErrorHandler: false, currentUserChecker: async ({ request }: Action) => { - const authorization: string | null = request.headers['Authorization']; + const { authorization } = request.header; if (!authorization || !authorization.startsWith('Bearer ')) return null; - const token = authorization.split(' ')[1]; - return getUserByMisshaiToken(token); + const token = authorization.split(' ')[1].trim(); + const user = await getUserByMisshaiToken(token); + return user; }, }); app.use(router.routes()); - app.keys = [ '人類', 'ミス廃化', '計画', 'ここに極まれり', 'フッフッフ...' ]; + app.keys = ['人類', 'ミス廃化', '計画', 'ここに極まれり', 'フッフッフ...']; console.log(`listening port ${config.port}...`); console.log('App launched!'); app.listen(config.port || 3000); -}; \ No newline at end of file +}; diff --git a/src/views/frontend.pug b/src/views/frontend.pug index 9acd23c..0fd8574 100644 --- a/src/views/frontend.pug +++ b/src/views/frontend.pug @@ -25,7 +25,7 @@ html align-items: center; justify-content: center; } - body + body.dark #app: .loading Loading... - script(src=`/assets/fe.${version}.js`) + script(src=`/assets/fe.${version}.js` async defer)
- Misskeyは楽しいものです。気がついたら1日中入り浸っていることも多いでしょう。 -
- さあ、今すぐみす廃アラートをインストールして、あなたの活動を把握しよう。 -
Misskeyは楽しいものです。気がついたら1日中入り浸っていることも多いでしょう。
さあ、今すぐみす廃アラートをインストールして、あなたの活動を把握しよう。