wip
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| import { performance } from 'perf_hooks'; | ||||
| import limitter from './limitter'; | ||||
| import { IUser } from '../../models/user'; | ||||
| import { IUser, isLocalUser } from '../../models/user'; | ||||
| import { IApp } from '../../models/app'; | ||||
| import endpoints from './endpoints'; | ||||
|  | ||||
| @@ -21,6 +21,10 @@ export default (endpoint: string, user: IUser, app: IApp, data: any, file?: any) | ||||
| 		return rej('YOUR_ACCOUNT_HAS_BEEN_SUSPENDED'); | ||||
| 	} | ||||
|  | ||||
| 	if (ep.meta.requireAdmin && !(isLocalUser(user) && user.isAdmin)) { | ||||
| 		return rej('YOU_ARE_NOT_ADMIN'); | ||||
| 	} | ||||
|  | ||||
| 	if (app && ep.meta.kind) { | ||||
| 		if (!app.permission.some(p => p === ep.meta.kind)) { | ||||
| 			return rej('PERMISSION_DENIED'); | ||||
| @@ -53,7 +57,7 @@ export default (endpoint: string, user: IUser, app: IApp, data: any, file?: any) | ||||
| 		const time = after - before; | ||||
|  | ||||
| 		if (time > 1000) { | ||||
| 			console.warn(`SLOW API CALL DETECTED: ${ep.name} (${ time }ms)`); | ||||
| 			console.warn(`SLOW API CALL DETECTED: ${ep.name} (${time}ms)`); | ||||
| 		} | ||||
| 	} catch (e) { | ||||
| 		rej(e); | ||||
|   | ||||
| @@ -14,6 +14,11 @@ export interface IEndpointMeta { | ||||
| 	 */ | ||||
| 	requireCredential?: boolean; | ||||
|  | ||||
| 	/** | ||||
| 	 * 管理者のみ使えるエンドポイントか否か | ||||
| 	 */ | ||||
| 	requireAdmin?: boolean; | ||||
|  | ||||
| 	/** | ||||
| 	 * エンドポイントのリミテーションに関するやつ | ||||
| 	 * 省略した場合はリミテーションは無いものとして解釈されます。 | ||||
|   | ||||
							
								
								
									
										46
									
								
								src/server/api/endpoints/admin/suspend-user.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/server/api/endpoints/admin/suspend-user.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| import $ from 'cafy'; | ||||
| import ID from '../../../../misc/cafy-id'; | ||||
| import getParams from '../../get-params'; | ||||
| import User from '../../../../models/user'; | ||||
|  | ||||
| export const meta = { | ||||
|   desc: { | ||||
|     ja: '指定したユーザーを凍結します。', | ||||
|     en: 'Suspend a user.' | ||||
|   }, | ||||
|  | ||||
|   requireCredential: true, | ||||
|   requireAdmin: true, | ||||
|  | ||||
|   params: { | ||||
|     userId: $.type(ID).note({ | ||||
|       desc: { | ||||
|         ja: '対象のユーザーID', | ||||
|         en: 'The user ID which you want to suspend' | ||||
|       } | ||||
|     }), | ||||
|   } | ||||
| }; | ||||
|  | ||||
| export default (params: any) => new Promise(async (res, rej) => { | ||||
|   const [ps, psErr] = getParams(meta, params); | ||||
|   if (psErr) return rej(psErr); | ||||
|  | ||||
|   const user = await User.findOne({ | ||||
|     _id: ps.userId | ||||
|   }); | ||||
|  | ||||
|   if (user == null) { | ||||
|     return rej('user not found'); | ||||
|   } | ||||
|  | ||||
|   await User.findOneAndUpdate({ | ||||
|     _id: user._id | ||||
|   }, { | ||||
|       $set: { | ||||
|         isSuspended: true | ||||
|       } | ||||
|     }); | ||||
|  | ||||
|   res(); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo