32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { db } from '~/drizzle/db'
|
|
import { verifyBindingToken } from '~~/server/utils/oauth-token'
|
|
import { createApiError } from '~~/server/utils/apiError'
|
|
import { SERVER_ERROR_CODES } from '~~/server/config/constants'
|
|
import { fetchGradeClassOptions } from '~~/server/utils/grade-class-options'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const config = await db.query.systemSettings.findFirst()
|
|
if (!config?.allowOAuthRegistration) {
|
|
throw createApiError(403, SERVER_ERROR_CODES.AUTH_OAUTH_REGISTER_DISABLED, '系统已关闭第三方账号注册功能')
|
|
}
|
|
|
|
const bindingToken = getCookie(event, 'binding-token')
|
|
if (!bindingToken) {
|
|
throw createApiError(401, SERVER_ERROR_CODES.AUTH_REGISTER_SESSION_EXPIRED, '注册会话已过期,请重新通过第三方登录发起')
|
|
}
|
|
|
|
try {
|
|
verifyBindingToken(bindingToken)
|
|
} catch {
|
|
deleteCookie(event, 'binding-token')
|
|
throw createApiError(401, SERVER_ERROR_CODES.AUTH_INVALID_REGISTER_TOKEN, '无效的注册令牌')
|
|
}
|
|
|
|
const classes = await fetchGradeClassOptions()
|
|
|
|
return {
|
|
success: true,
|
|
classes
|
|
}
|
|
})
|