mirror of
https://github.com/koreanbots/core.git
synced 2025-12-16 06:20:24 +00:00
feat: add token reset route
This commit is contained in:
parent
9963ca7b3a
commit
baf13c2c9e
@ -4,9 +4,10 @@ import { DeveloperBot, DeveloperBotSchema } from '@utils/Yup'
|
|||||||
import { get, update } from '@utils/Query'
|
import { get, update } from '@utils/Query'
|
||||||
import ResponseWrapper from '@utils/ResponseWrapper'
|
import ResponseWrapper from '@utils/ResponseWrapper'
|
||||||
import { checkToken } from '@utils/Csrf'
|
import { checkToken } from '@utils/Csrf'
|
||||||
import { User } from '@types'
|
|
||||||
import RequestHandler from '@utils/RequestHandler'
|
import RequestHandler from '@utils/RequestHandler'
|
||||||
|
|
||||||
|
import { User } from '@types'
|
||||||
|
|
||||||
const BotApplications = RequestHandler
|
const BotApplications = RequestHandler
|
||||||
.patch(async (req: ApiRequest, res) => {
|
.patch(async (req: ApiRequest, res) => {
|
||||||
const user = await get.Authorization(req.cookies.token)
|
const user = await get.Authorization(req.cookies.token)
|
||||||
37
pages/api/v2/applications/bots/[id]/reset.ts
Normal file
37
pages/api/v2/applications/bots/[id]/reset.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { NextApiRequest } from 'next'
|
||||||
|
|
||||||
|
import { ResetBotToken, ResetBotTokenSchema } from '@utils/Yup'
|
||||||
|
import { get, update } from '@utils/Query'
|
||||||
|
import ResponseWrapper from '@utils/ResponseWrapper'
|
||||||
|
import { checkToken } from '@utils/Csrf'
|
||||||
|
import RequestHandler from '@utils/RequestHandler'
|
||||||
|
|
||||||
|
import { User } from '@types'
|
||||||
|
|
||||||
|
const ResetApplication = RequestHandler
|
||||||
|
.post(async (req: ApiRequest, res) => {
|
||||||
|
const user = await get.Authorization(req.cookies.token)
|
||||||
|
if(!user) return ResponseWrapper(res, { code: 401 })
|
||||||
|
const csrfValidated = checkToken(req, res, req.body._csrf)
|
||||||
|
if(!csrfValidated) return
|
||||||
|
const validated = await ResetBotTokenSchema.validate(req.body, { abortEarly: false }).then(el => el).catch(e => {
|
||||||
|
ResponseWrapper(res, { code: 400, errors: e.errors })
|
||||||
|
return null
|
||||||
|
})
|
||||||
|
|
||||||
|
if(!validated) return
|
||||||
|
const bot = await get.bot.load(req.query.id)
|
||||||
|
if(!bot) return ResponseWrapper(res, { code: 404, message: '존재하지 않는 봇입니다.' })
|
||||||
|
if(!(bot.owners as User[]).find(el => el.id === user)) return ResponseWrapper(res, { code: 403 })
|
||||||
|
await update.resetBotToken(req.query.id, validated.token)
|
||||||
|
return ResponseWrapper(res, { code: 200 })
|
||||||
|
})
|
||||||
|
|
||||||
|
interface ApiRequest extends NextApiRequest {
|
||||||
|
body: ResetBotToken
|
||||||
|
query: {
|
||||||
|
id: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ResetApplication
|
||||||
11
utils/Yup.ts
11
utils/Yup.ts
@ -1,3 +1,4 @@
|
|||||||
|
import { TokenExpiredError } from 'jsonwebtoken'
|
||||||
import * as Yup from 'yup'
|
import * as Yup from 'yup'
|
||||||
import YupKorean from 'yup-locales-ko'
|
import YupKorean from 'yup-locales-ko'
|
||||||
import { ListType } from '../types'
|
import { ListType } from '../types'
|
||||||
@ -143,4 +144,14 @@ export interface DeveloperBot {
|
|||||||
_csrf: string
|
_csrf: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const ResetBotTokenSchema = Yup.object({
|
||||||
|
token: Yup.string().required(),
|
||||||
|
_csrf: Yup.string().required()
|
||||||
|
})
|
||||||
|
|
||||||
|
export interface ResetBotToken {
|
||||||
|
token: string
|
||||||
|
_csrf: string
|
||||||
|
}
|
||||||
|
|
||||||
export default Yup
|
export default Yup
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user