mirror of
https://github.com/koreanbots/core.git
synced 2025-12-15 14:10:22 +00:00
feat(management): added user management page
This commit is contained in:
parent
65fc1081c5
commit
1d4a0c77aa
26
pages/api/v2/management/users/[id].ts
Normal file
26
pages/api/v2/management/users/[id].ts
Normal 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
|
||||
34
pages/management/index.tsx
Normal file
34
pages/management/index.tsx
Normal 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
|
||||
42
pages/management/users/[id].tsx
Normal file
42
pages/management/users/[id].tsx
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user