From daf0d85c83adab6936a73470b663d765051f6387 Mon Sep 17 00:00:00 2001 From: wonderlandpark Date: Fri, 21 May 2021 09:44:17 +0900 Subject: [PATCH] feat: private api changes --- .../bots/submits/[id]/[date]/deny.ts | 32 +++++++++++++++++++ .../bots/submits/[id]/[date]/index.ts | 24 ++++++++++++++ .../v2/management/bots/submits/[id]/index.ts | 23 +++++++++++++ .../bots/{submits.ts => submits/index.ts} | 0 pages/api/v2/management/index.ts | 9 ++++++ utils/Constants.ts | 13 ++++++++ utils/Query.ts | 7 +++- 7 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 pages/api/v2/management/bots/submits/[id]/[date]/deny.ts create mode 100644 pages/api/v2/management/bots/submits/[id]/[date]/index.ts create mode 100644 pages/api/v2/management/bots/submits/[id]/index.ts rename pages/api/v2/management/bots/{submits.ts => submits/index.ts} (100%) create mode 100644 pages/api/v2/management/index.ts diff --git a/pages/api/v2/management/bots/submits/[id]/[date]/deny.ts b/pages/api/v2/management/bots/submits/[id]/[date]/deny.ts new file mode 100644 index 0000000..a767432 --- /dev/null +++ b/pages/api/v2/management/bots/submits/[id]/[date]/deny.ts @@ -0,0 +1,32 @@ +import { NextApiRequest } from 'next' +import { MessageEmbed } from 'discord.js' + +import RequestHandler from '@utils/RequestHandler' +import ResponseWrapper from '@utils/ResponseWrapper' +import { get, update } from '@utils/Query' +import { DiscordBot, getBotReviewLogChannel } from '@utils/DiscordBot' +import { KoreanbotsEndPoints } from '@utils/Constants' + +const DenyBotSubmit = RequestHandler() + .post(async (req: ApiRequest, res) => { + const bot = await get.BotAuthorization(req.headers.authorization) + if(bot !== DiscordBot.user.id) return ResponseWrapper(res, { code: 403 }) + const submit = await get.botSubmit.load(JSON.stringify({ id: req.query.id, date: req.query.date })) + if(!submit) return ResponseWrapper(res, { code: 404 }) + await update.denyBotSubmission(submit.id, submit.date, req.body.reason) + get.botSubmit.clear(JSON.stringify({ id: req.query.id, date: req.query.date })) + await getBotReviewLogChannel().send(new MessageEmbed().setTitle('거부 됨').setColor('RED').setDescription(`[${submit.id}/${submit.date}](${KoreanbotsEndPoints.URL.submittedBot(submit.id, submit.date)})`).setTimestamp()) + return ResponseWrapper(res, { code: 200 }) + }) + +interface ApiRequest extends NextApiRequest { + query: { + id: string + date: string + } + body: { + reason?: string + } +} + +export default DenyBotSubmit \ No newline at end of file diff --git a/pages/api/v2/management/bots/submits/[id]/[date]/index.ts b/pages/api/v2/management/bots/submits/[id]/[date]/index.ts new file mode 100644 index 0000000..5f3a4db --- /dev/null +++ b/pages/api/v2/management/bots/submits/[id]/[date]/index.ts @@ -0,0 +1,24 @@ +import { NextApiRequest } from 'next' + +import RequestHandler from '@utils/RequestHandler' +import ResponseWrapper from '@utils/ResponseWrapper' +import { get } from '@utils/Query' +import { DiscordBot } from '@utils/DiscordBot' + +const BotSubmit = RequestHandler() + .get(async (req: ApiRequest, res) => { + const bot = await get.BotAuthorization(req.headers.authorization) + if(bot !== DiscordBot.user.id) return ResponseWrapper(res, { code: 403 }) + const submit = await get.botSubmit.load(JSON.stringify({ id: req.query.id, date: req.query.date })) + if(!submit) return ResponseWrapper(res, { code: 404 }) + return ResponseWrapper(res, { code: 200, data: submit }) + }) + +interface ApiRequest extends NextApiRequest { + query: { + id: string + date: string + } +} + +export default BotSubmit \ No newline at end of file diff --git a/pages/api/v2/management/bots/submits/[id]/index.ts b/pages/api/v2/management/bots/submits/[id]/index.ts new file mode 100644 index 0000000..bd35cbb --- /dev/null +++ b/pages/api/v2/management/bots/submits/[id]/index.ts @@ -0,0 +1,23 @@ +import { NextApiRequest } from 'next' + +import RequestHandler from '@utils/RequestHandler' +import ResponseWrapper from '@utils/ResponseWrapper' +import { get } from '@utils/Query' +import { DiscordBot } from '@utils/DiscordBot' + +const BotSubmit = RequestHandler() + .get(async (req: ApiRequest, res) => { + const bot = await get.BotAuthorization(req.headers.authorization) + if(bot !== DiscordBot.user.id) return ResponseWrapper(res, { code: 403 }) + const submits = await get.botSubmitList() + const submit = submits.find(el => el.id === req.query.id) + if(!submit) return ResponseWrapper(res, { code: 404 }) + return ResponseWrapper(res, { code: 200, data: submit }) + }) + +interface ApiRequest extends NextApiRequest { + query: { + id: string + } +} +export default BotSubmit \ No newline at end of file diff --git a/pages/api/v2/management/bots/submits.ts b/pages/api/v2/management/bots/submits/index.ts similarity index 100% rename from pages/api/v2/management/bots/submits.ts rename to pages/api/v2/management/bots/submits/index.ts diff --git a/pages/api/v2/management/index.ts b/pages/api/v2/management/index.ts new file mode 100644 index 0000000..cbb7592 --- /dev/null +++ b/pages/api/v2/management/index.ts @@ -0,0 +1,9 @@ +import RequestHandler from '@utils/RequestHandler' +import ResponseWrapper from '@utils/ResponseWrapper' + +const BotSubmits = RequestHandler() + .get(async (_req, res) => { + return ResponseWrapper(res, { code: 403, message: 'Private API' }) + }) + +export default BotSubmits \ No newline at end of file diff --git a/utils/Constants.ts b/utils/Constants.ts index d902658..aa18108 100644 --- a/utils/Constants.ts +++ b/utils/Constants.ts @@ -188,6 +188,18 @@ export const DiscordEnpoints = { } export const KoreanbotsEndPoints = { + OG: class { + static root = 'https://og.kbots.link' + static bot(id: string, name: string, bio: string, tags: string[], stats: string[]) { + const u = new URL(this.root) + u.pathname = name + u.searchParams.append('image', KoreanbotsEndPoints.CDN.avatar(id, { format: 'webp', size: 256 })) + u.searchParams.append('bio', bio) + tags.map(t => u.searchParams.append('tags', t)) + stats.map(s => u.searchParams.append('stats', s)) + return u.href + } + }, CDN: class { static root = '/api/image' static avatar (id: string, options: KoreanbotsImageOptions) { return makeImageURL(`${this.root}/discord/avatars/${id}`, options) } @@ -195,6 +207,7 @@ export const KoreanbotsEndPoints = { URL: class { static root = process.env.KOREANBOTS_URL || 'https://koreanbots.dev' static bot (id: string) { return `${this.root}/bots/${id}` } + static user (id: string) { return `${this.root}/users/${id}` } static submittedBot(id: string, date: number) { return `${this.root}/pendingBots/${id}/${date}` } }, baseAPI: '/api/v2', diff --git a/utils/Query.ts b/utils/Query.ts index 52b21e6..fecb4b1 100644 --- a/utils/Query.ts +++ b/utils/Query.ts @@ -381,6 +381,10 @@ async function getBotSubmitList() { return await Promise.all(res.map(b => get.botSubmit.load(JSON.stringify({ id: b.id, date: b.date })))) } +async function denyBotSubmission(id: string, date: number, reason?: string) { + await knex('submitted').update({ state: 2 }).where({ state: 0, id, date, reason: reason || null }) +} + export const get = { discord: { user: new DataLoader( @@ -475,7 +479,8 @@ export const update = { updateServer, Github, bot: updateBot, - botOwners: updateOwner + botOwners: updateOwner, + denyBotSubmission } export const put = {