feat: add token reset route

This commit is contained in:
Junseo Park 2021-02-27 22:40:51 +09:00
parent 9963ca7b3a
commit baf13c2c9e
3 changed files with 50 additions and 1 deletions

View File

@ -4,9 +4,10 @@ import { DeveloperBot, DeveloperBotSchema } from '@utils/Yup'
import { get, update } from '@utils/Query'
import ResponseWrapper from '@utils/ResponseWrapper'
import { checkToken } from '@utils/Csrf'
import { User } from '@types'
import RequestHandler from '@utils/RequestHandler'
import { User } from '@types'
const BotApplications = RequestHandler
.patch(async (req: ApiRequest, res) => {
const user = await get.Authorization(req.cookies.token)

View 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

View File

@ -1,3 +1,4 @@
import { TokenExpiredError } from 'jsonwebtoken'
import * as Yup from 'yup'
import YupKorean from 'yup-locales-ko'
import { ListType } from '../types'
@ -143,4 +144,14 @@ export interface DeveloperBot {
_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