diff --git a/pages/api/v2/management/users/[id].ts b/pages/api/v2/management/users/[id].ts new file mode 100644 index 0000000..e32842e --- /dev/null +++ b/pages/api/v2/management/users/[id].ts @@ -0,0 +1,26 @@ +import { NextApiRequest } from 'next' + +import { get, management } from '@utils/Query' +import RequestHandler from '@utils/RequestHandler' +import { checkUserFlag } from '@utils/Tools' +import ResponseWrapper from '@utils/ResponseWrapper' + +const UserManagement = RequestHandler() + .patch(async (req: ApiRequest, res) => { + const memberID = await get.Authorization(req.cookies.token) + const member = memberID && await get.user.load(memberID) + if(!member || !checkUserFlag(member.flags, 'staff')) return ResponseWrapper(res, { code: 403 }) + const user = await management.user.get(req.query.id ?? '') + if(!user) return ResponseWrapper(res, { code: 404 }) + await management.user.update(req.query.id, { flags: req.body.flags }) + return ResponseWrapper(res, { code: 200 }) + }) + +interface ApiRequest extends NextApiRequest { + query: { + id: string + date: string + } +} + +export default UserManagement \ No newline at end of file diff --git a/pages/management/index.tsx b/pages/management/index.tsx new file mode 100644 index 0000000..e8077ce --- /dev/null +++ b/pages/management/index.tsx @@ -0,0 +1,34 @@ +import { GetServerSideProps, NextPage } from 'next' +import dynamic from 'next/dynamic' + +import { get } from '@utils/Query' +import { checkUserFlag, parseCookie } from '@utils/Tools' +import { User } from '@types' + +const Forbidden = dynamic(() => import('@components/Forbidden')) +const Container = dynamic(() => import('@components/Container')) +const Redirect = dynamic(() => import('@components/Redirect')) + +const ManagementPage: NextPage = ({ user }) => { + if(checkUserFlag(user.flags, 'staff')) return +

관리 페이지

+
+ else if(checkUserFlag(user.flags, 'botreviewer')) return + return +} + +export const getServerSideProps: GetServerSideProps = async (ctx) => { + const parsed = parseCookie(ctx.req) + const userID = await get.Authorization(parsed?.token) + return { + props: { + user: userID && await get.user.load(userID) + } + } +} + +interface ManagementProps { + user: User +} + +export default ManagementPage \ No newline at end of file diff --git a/pages/management/users/[id].tsx b/pages/management/users/[id].tsx new file mode 100644 index 0000000..74f687f --- /dev/null +++ b/pages/management/users/[id].tsx @@ -0,0 +1,42 @@ +import { GetServerSideProps, NextPage } from 'next' +import dynamic from 'next/dynamic' + +import { get, management } from '@utils/Query' +import { checkUserFlag, getUserFlags, parseCookie } from '@utils/Tools' +import { User, UserSpec } from '@types' + +const Forbidden = dynamic(() => import('@components/Forbidden')) +const Container = dynamic(() => import('@components/Container')) + +const ManagementPage: NextPage = ({ target, user }) => { + if(checkUserFlag(user?.flags, 'staff')) return +

{target ? `${target.username}#${target.tag} (${target.id})` : 'Not Found'}

+
    +
  • EMAIL: {target.email}
  • +
  • FLAGS: {getUserFlags(target.flags).join(', ')}
  • +
  • BLOCKED?: {target.perm !== 'user' ? 'true' : 'false'}
  • +
  • +
+
+ return +} + +export const getServerSideProps: GetServerSideProps = async (ctx) => { + const parsed = parseCookie(ctx.req) + const userID = await get.Authorization(parsed?.token) + const user = userID && await get.user.load(userID) + if(!checkUserFlag(user?.flags, 'staff')) return { props: {} } + return { + props: { + target: await management.user.get(ctx.params.id as string), + user: user + } + } +} + +interface ManagementProps { + target?: UserSpec + user?: User +} + +export default ManagementPage \ No newline at end of file