diff --git a/LICENSE b/LICENSE index fcb2806..53e9e2f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ -Misshaialert -Copyright (C) 2020 Xeltica +Misskey Tools +Copyright (C) 2020-2021 Xeltica This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/config.example.json b/config.example.json index ab9126c..6647865 100644 --- a/config.example.json +++ b/config.example.json @@ -1,6 +1,6 @@ { "port": 4000, - "url": "https://misshaialert.com", + "url": "https://misskey.tools", "db": { "host": "localhost", "port": 5432, @@ -8,5 +8,9 @@ "pass": "pass", "db": "misshaialert", "extra": {} + }, + "admin": { + "username": "your_user_name", + "host": "your-instance-host" } -} \ No newline at end of file +} diff --git a/src/backend/controllers/admin.ts b/src/backend/controllers/admin.ts new file mode 100644 index 0000000..cf03482 --- /dev/null +++ b/src/backend/controllers/admin.ts @@ -0,0 +1,18 @@ +/** + * バージョン情報など、サーバーのメタデータを返すAPI + * @author Xeltica + */ + +import { Get, JsonController } from 'routing-controllers'; +import { config } from '../../config'; + + @JsonController('/admin') +export class AdminController { + @Get() getAdmin() { + const { username, host } = config.admin; + return { + username, host, + acct: `@${username}@${host}`, + }; + } +} diff --git a/src/backend/functions/users.ts b/src/backend/functions/users.ts index c8884a2..f9ecc5a 100644 --- a/src/backend/functions/users.ts +++ b/src/backend/functions/users.ts @@ -2,6 +2,21 @@ import { User } from '../models/entities/user'; import { Users } from '../models'; import { DeepPartial } from 'typeorm'; import { genToken } from './gen-token'; +import { IUser } from '../../common/types/user'; +import { config } from '../../config'; + +/** + * IUser インターフェイスに変換します。 + */ +const packUser = (user: User | undefined): IUser | undefined => { + if (!user) return undefined; + const { username: adminName, host: adminHost } = config.admin; + + return { + ...user, + isAdmin: adminName === user.username && adminHost === user.host, + }; +}; /** * ユーザーを取得します @@ -9,8 +24,8 @@ import { genToken } from './gen-token'; * @param host ホスト名 * @returns ユーザー */ -export const getUser = (username: string, host: string): Promise => { - return Users.findOne({ username, host }); +export const getUser = (username: string, host: string): Promise => { + return Users.findOne({ username, host }).then(packUser); }; /** @@ -18,7 +33,7 @@ export const getUser = (username: string, host: string): Promise => { +export const updateUsersToolsToken = async (user: User | User['id']): Promise => { const u = typeof user === 'number' ? user : user.id; @@ -33,8 +48,8 @@ export const updateUsersMisshaiToken = async (user: User | User['id']): Promise< * @param token ミス廃トークン * @returns ユーザー */ -export const getUserByMisshaiToken = (token: string): Promise => { - return Users.findOne({ misshaiToken: token }); +export const getUserByToolsToken = (token: string): Promise => { + return Users.findOne({ misshaiToken: token }).then(packUser); }; /** diff --git a/src/backend/router.ts b/src/backend/router.ts index b4237c0..0e1078f 100644 --- a/src/backend/router.ts +++ b/src/backend/router.ts @@ -7,7 +7,7 @@ import { v4 as uuid } from 'uuid'; import ms from 'ms'; import { config } from '../config'; -import { upsertUser, getUser, updateUser, updateUsersMisshaiToken } from './functions/users'; +import { upsertUser, getUser, updateUser, updateUsersToolsToken } from './functions/users'; import { api } from './services/misskey'; import { die } from './die'; @@ -158,7 +158,7 @@ async function login(ctx: Context, user: Record, host: string, }); } - const misshaiToken = await updateUsersMisshaiToken(u); + const toolsToken = await updateUsersToolsToken(u); - await ctx.render('frontend', { token: misshaiToken }); + await ctx.render('frontend', { token: toolsToken }); } diff --git a/src/backend/server.ts b/src/backend/server.ts index ecd8000..10dd859 100644 --- a/src/backend/server.ts +++ b/src/backend/server.ts @@ -6,14 +6,14 @@ import constant from './const'; import { config } from '../config'; import { render } from './render'; import { router } from './router'; -import { getUserByMisshaiToken } from './functions/users'; +import { getUserByToolsToken } from './functions/users'; import 'reflect-metadata'; export default (): void => { const app = new Koa(); - console.log('Misshaialert v' + constant.version); + console.log('Misskey Tools v' + constant.version); console.log('Initializing DB connection...'); @@ -30,7 +30,7 @@ export default (): void => { if (!authorization || !authorization.startsWith('Bearer ')) return null; const token = authorization.split(' ')[1].trim(); - const user = await getUserByMisshaiToken(token); + const user = await getUserByToolsToken(token); return user; }, }); @@ -38,8 +38,6 @@ export default (): void => { app.use(router.routes()); app.use(router.allowedMethods()); - app.keys = ['人類', 'ミス廃化', '計画', 'ここに極まれり', 'フッフッフ...']; - console.log(`listening port ${config.port}...`); console.log('App launched!'); diff --git a/src/backend/services/misskey.ts b/src/backend/services/misskey.ts index ab08b39..a1b476e 100644 --- a/src/backend/services/misskey.ts +++ b/src/backend/services/misskey.ts @@ -1,7 +1,7 @@ import axios from 'axios'; import _const from '../const'; -export const ua = `Mozilla/5.0 misshaialertBot/${_const.version} +https://github.com/Xeltica/misshaialert Node/${process.version}`; +export const ua = `Mozilla/5.0 MisskeyTools/${_const.version} +https://github.com/Xeltica/MisskeyTools Node/${process.version}`; axios.defaults.headers['User-Agent'] = ua; axios.defaults.validateStatus = (stat) => stat < 500; diff --git a/src/common/types/user.ts b/src/common/types/user.ts index 46e7214..49f8460 100644 --- a/src/common/types/user.ts +++ b/src/common/types/user.ts @@ -18,5 +18,6 @@ export interface IUser { prevRating: number; rating: number; bannedFromRanking: boolean; + isAdmin?: boolean; }