Added backend for Admin Panel
This commit is contained in:
parent
9923593a6f
commit
f8ccebc5ad
89
src/controller/admin.ts
Normal file
89
src/controller/admin.ts
Normal file
@ -0,0 +1,89 @@
|
||||
import {
|
||||
BadRequestException,
|
||||
Body,
|
||||
Controller,
|
||||
Get,
|
||||
Post,
|
||||
Request,
|
||||
ValidationPipe
|
||||
} from '@nestjs/common';
|
||||
import { AuthService } from 'services/auth';
|
||||
import { Requests, Responses, UserRole } from 'dto';
|
||||
import { Role } from 'authguards';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { tfaTypes, User } from 'entities';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
@Controller('api/admin')
|
||||
export default class AdminController {
|
||||
constructor(
|
||||
@InjectRepository(User)
|
||||
private userRepo: Repository<User>,
|
||||
private authService: AuthService
|
||||
) {}
|
||||
|
||||
@Role(UserRole.ADMIN)
|
||||
@Get('users')
|
||||
async getUsers(): Promise<Responses.Admin.GetUsers> {
|
||||
const users = await this.userRepo.find();
|
||||
const entries = users.map(
|
||||
(user) =>
|
||||
new Responses.Admin.GetUsersEntry(
|
||||
user.id,
|
||||
user.isGitlabUser,
|
||||
user.name,
|
||||
user.role,
|
||||
this.authService.requiresTfa(user)
|
||||
)
|
||||
);
|
||||
return new Responses.Admin.GetUsers(entries);
|
||||
}
|
||||
|
||||
@Role(UserRole.ADMIN)
|
||||
@Post('set_role')
|
||||
async setRole(
|
||||
@Request() req,
|
||||
@Body(new ValidationPipe()) data: Requests.Admin.SetUserRole
|
||||
): Promise<Responses.Admin.SetUserRole> {
|
||||
const user = await this.authService.getUser(data.user);
|
||||
if (!user) throw new BadRequestException('Invalid user');
|
||||
await this.authService.setUserRole(user, data.role);
|
||||
return new Responses.Admin.SetUserRole();
|
||||
}
|
||||
|
||||
@Role(UserRole.ADMIN)
|
||||
@Post('logout')
|
||||
async logout(
|
||||
@Request() req,
|
||||
@Body(new ValidationPipe()) data: Requests.Admin.LogoutAll
|
||||
): Promise<Responses.Admin.LogoutAllUser> {
|
||||
const user = await this.authService.getUser(data.user);
|
||||
if (!user) throw new BadRequestException('Invalid user');
|
||||
await this.authService.revokeAll(user);
|
||||
return new Responses.Admin.LogoutAllUser();
|
||||
}
|
||||
|
||||
@Role(UserRole.ADMIN)
|
||||
@Post('delete')
|
||||
async delete(
|
||||
@Request() req,
|
||||
@Body(new ValidationPipe()) data: Requests.Admin.DeleteUser
|
||||
): Promise<Responses.Admin.DeleteUser> {
|
||||
const user = await this.authService.getUser(data.user);
|
||||
if (!user) throw new BadRequestException('Invalid user');
|
||||
await this.authService.deleteUser(user);
|
||||
return new Responses.Admin.DeleteUser();
|
||||
}
|
||||
|
||||
@Role(UserRole.ADMIN)
|
||||
@Post('disable_2fa')
|
||||
async disableTfa(
|
||||
@Request() req,
|
||||
@Body(new ValidationPipe()) data: Requests.Admin.DisableTfa
|
||||
): Promise<Responses.Admin.DisableTfa> {
|
||||
const user = await this.authService.getUser(data.user);
|
||||
if (!user) throw new BadRequestException('Invalid user');
|
||||
await this.authService.setTfaType(user, tfaTypes.NONE);
|
||||
return new Responses.Admin.DisableTfa();
|
||||
}
|
||||
}
|
@ -109,4 +109,9 @@ export default class BaseAuthService {
|
||||
ownerId: user.id
|
||||
});
|
||||
}
|
||||
|
||||
async setUserRole(user: User, role: UserRole) {
|
||||
user.role = role;
|
||||
await this.userRepo.save(user);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user