Added dto for Admin Panel, moved UserRole to dto

This commit is contained in:
Mutzi 2022-08-25 20:22:32 +02:00
parent c83319c300
commit 9923593a6f
12 changed files with 102 additions and 13 deletions

View File

@ -1,3 +1,8 @@
export * as Requests from './requests'; export * as Requests from './requests';
export * as Responses from './responses'; export * as Responses from './responses';
export { validateSync, validateAsync, validateAsyncInline } from './utils'; export {
UserRole,
validateSync,
validateAsync,
validateAsyncInline
} from './utils';

17
dto/src/requests/admin.ts Normal file
View File

@ -0,0 +1,17 @@
import { BaseRequest } from './base';
import { IsEnum, IsNumber } from 'class-validator';
import { UserRole } from '../utils';
class AdminRequest extends BaseRequest {
@IsNumber()
user: number;
}
export class SetUserRole extends AdminRequest {
@IsEnum(UserRole)
role: UserRole;
}
export class LogoutAll extends AdminRequest {}
export class DeleteUser extends AdminRequest {}
export class DisableTfa extends AdminRequest {}

View File

@ -1,3 +1,4 @@
export * from './base'; export * from './base';
export * as Auth from './auth'; export * as Auth from './auth';
export * as FS from './fs'; export * as FS from './fs';
export * as Admin from './admin';

View File

@ -0,0 +1,61 @@
import { SuccessResponse } from './base';
import {
IsArray,
IsBoolean,
IsEnum,
IsNotEmpty,
IsNumber,
IsString,
ValidateNested
} from 'class-validator';
import { UserRole, ValidateConstructor } from '../utils';
@ValidateConstructor
export class GetUsersEntry {
constructor(
id: number,
gitlab: boolean,
name: string,
role: UserRole,
tfaEnabled: boolean
) {
this.id = id;
this.gitlab = gitlab;
this.name = name;
this.role = role;
this.tfaEnabled = tfaEnabled;
}
@IsNumber()
id: number;
@IsBoolean()
gitlab: boolean;
@IsString()
@IsNotEmpty()
name: string;
@IsEnum(UserRole)
role: UserRole;
@IsBoolean()
tfaEnabled: boolean;
}
@ValidateConstructor
export class GetUsers extends SuccessResponse {
constructor(users: GetUsersEntry[]) {
super();
this.users = users;
}
@IsArray()
@ValidateNested({ each: true })
users: GetUsersEntry[];
}
export class LogoutAllUser extends SuccessResponse {}
export class DeleteUser extends SuccessResponse {}
export class SetUserRole extends SuccessResponse {}
export class DisableTfa extends SuccessResponse {}

View File

@ -2,3 +2,4 @@ export * from './base';
export * as Auth from './auth'; export * as Auth from './auth';
export * as FS from './fs'; export * as FS from './fs';
export * as User from './user'; export * as User from './user';
export * as Admin from './admin';

View File

@ -1,5 +1,11 @@
import { validate, validateSync as _validateSync } from 'class-validator'; import { validate, validateSync as _validateSync } from 'class-validator';
export enum UserRole {
ADMIN = 2,
USER = 1,
DISABLED = 0
}
export function validateSync<T extends object>(data: T): void { export function validateSync<T extends object>(data: T): void {
const errors = _validateSync(data); const errors = _validateSync(data);
if (errors.length > 0) { if (errors.length > 0) {

View File

@ -1,12 +1,13 @@
import { Controller, Get, Module } from '@nestjs/common'; import { Controller, Get, Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { INode, JWTToken, User, UserRole } from './entities'; import { INode, JWTToken, User } from './entities';
import FileSystemModule from './modules/filesystem'; import FileSystemModule from './modules/filesystem';
import { JWTAuthGuard, Role, RoleGuard } from './authguards'; import { JWTAuthGuard, Role, RoleGuard } from './authguards';
import AuthModule from './modules/auth'; import AuthModule from './modules/auth';
import { ServeStaticModule } from '@nestjs/serve-static'; import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path'; import { join } from 'path';
import { cwd } from 'process'; import { cwd } from 'process';
import { UserRole } from 'dto';
declare const PROD: boolean | undefined; declare const PROD: boolean | undefined;

View File

@ -6,7 +6,8 @@ import {
} from '@nestjs/common'; } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport'; import { AuthGuard } from '@nestjs/passport';
import { Reflector } from '@nestjs/core'; import { Reflector } from '@nestjs/core';
import { User, UserRole } from './entities'; import { User } from './entities';
import { UserRole } from 'dto';
const IS_PUBLIC_KEY = 'isPublic'; const IS_PUBLIC_KEY = 'isPublic';
export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);

View File

@ -9,9 +9,8 @@ import {
StreamableFile, StreamableFile,
ValidationPipe ValidationPipe
} from '@nestjs/common'; } from '@nestjs/common';
import { Responses, Requests, validateAsyncInline } from 'dto'; import { Responses, Requests, validateAsyncInline, UserRole } from 'dto';
import FileSystemService from 'services/filesystem'; import FileSystemService from 'services/filesystem';
import { UserRole } from 'entities';
import { Role } from 'authguards'; import { Role } from 'authguards';
@Controller('api/fs') @Controller('api/fs')

View File

@ -6,12 +6,7 @@ import {
OneToMany, OneToMany,
OneToOne OneToOne
} from 'typeorm'; } from 'typeorm';
import { UserRole } from 'dto';
export enum UserRole {
ADMIN = 2,
USER = 1,
DISABLED = 0
}
export enum tfaTypes { export enum tfaTypes {
NONE = 0, NONE = 0,

View File

@ -4,11 +4,12 @@ import {
UnauthorizedException UnauthorizedException
} from '@nestjs/common'; } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { JWTToken, User, UserRole } from 'entities'; import { JWTToken, User } from 'entities';
import { LessThanOrEqual, Repository } from 'typeorm'; import { LessThanOrEqual, Repository } from 'typeorm';
import * as argon2 from 'argon2'; import * as argon2 from 'argon2';
import FileSystemService from 'services/filesystem'; import FileSystemService from 'services/filesystem';
import * as jwt from 'jsonwebtoken'; import * as jwt from 'jsonwebtoken';
import { UserRole } from 'dto';
export const jwtSecret = 'CUM'; export const jwtSecret = 'CUM';

View File

@ -1,9 +1,10 @@
import { User, UserRole } from 'entities'; import { User } from 'entities';
import { FastifyRequest } from 'fastify'; import { FastifyRequest } from 'fastify';
import axios from 'axios'; import axios from 'axios';
import * as argon2 from 'argon2'; import * as argon2 from 'argon2';
import { ForbiddenException, UnauthorizedException } from '@nestjs/common'; import { ForbiddenException, UnauthorizedException } from '@nestjs/common';
import TfaAuthService from './tfa'; import TfaAuthService from './tfa';
import { UserRole } from 'dto';
const GITLAB_ID = const GITLAB_ID =
'98bcbad78cb1f880d1d1de62291d70a791251a7bea077bfe7df111ef3c115760'; '98bcbad78cb1f880d1d1de62291d70a791251a7bea077bfe7df111ef3c115760';