feat(management): added user management page

This commit is contained in:
wonderlandpark 2021-07-07 22:07:50 +09:00
parent 65fc1081c5
commit 1d4a0c77aa
3 changed files with 102 additions and 0 deletions

View File

@ -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

View File

@ -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<ManagementProps> = ({ user }) => {
if(checkUserFlag(user.flags, 'staff')) return <Container paddingTop>
<h1 className='text-3xl font-bold'> </h1>
</Container>
else if(checkUserFlag(user.flags, 'botreviewer')) return <Redirect to='/management/botreview' />
return <Forbidden />
}
export const getServerSideProps: GetServerSideProps<ManagementProps> = 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

View File

@ -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<ManagementProps> = ({ target, user }) => {
if(checkUserFlag(user?.flags, 'staff')) return <Container paddingTop>
<h1 className='text-3xl font-bold pt-2'>{target ? `${target.username}#${target.tag} (${target.id})` : 'Not Found'}</h1>
<ul>
<li>EMAIL: {target.email}</li>
<li>FLAGS: {getUserFlags(target.flags).join(', ')}</li>
<li>BLOCKED?: {target.perm !== 'user' ? 'true' : 'false'}</li>
<li></li>
</ul>
</Container>
return <Forbidden />
}
export const getServerSideProps: GetServerSideProps<ManagementProps> = 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