63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
import { Body, Controller, Delete, Get, Patch, Post, Put, Req } from '@nestjs/common';
|
|
import type { Request } from 'express';
|
|
|
|
import { AdminAuthService } from './admin-auth.service';
|
|
import { Public } from './decorators/admin-auth.decorators';
|
|
import { AdminLoginDto, ChangeAdminPasswordDto } from './dto';
|
|
|
|
@Controller('auth/admin')
|
|
export class AdminAuthController {
|
|
constructor(private readonly adminAuthService: AdminAuthService) {}
|
|
|
|
@Get('me')
|
|
me(@Req() request: { admin?: { id: string } }) {
|
|
return this.adminAuthService.me(request.admin!.id);
|
|
}
|
|
|
|
@Put('avatar')
|
|
async updateAvatar(@Req() request: Request & { admin?: { id: string } }) {
|
|
const mimeType = String(request.headers['content-type'] ?? '').split(';')[0].trim().toLowerCase();
|
|
const imageData = await readRequestBody(request);
|
|
return this.adminAuthService.updateAvatar(request.admin!.id, imageData, mimeType);
|
|
}
|
|
|
|
@Delete('avatar')
|
|
deleteAvatar(@Req() request: { admin?: { id: string } }) {
|
|
return this.adminAuthService.deleteAvatar(request.admin!.id);
|
|
}
|
|
|
|
@Patch('password')
|
|
changePassword(
|
|
@Req() request: { admin?: { id: string } },
|
|
@Body() body: ChangeAdminPasswordDto,
|
|
) {
|
|
return this.adminAuthService.changePassword(request.admin!.id, body);
|
|
}
|
|
|
|
@Public()
|
|
@Post('login')
|
|
login(
|
|
@Body() body: AdminLoginDto,
|
|
@Req() request: { ip?: string; headers: Record<string, string | string[] | undefined> },
|
|
) {
|
|
const userAgent = request.headers['user-agent'];
|
|
|
|
return this.adminAuthService.login(body, {
|
|
ipAddress: request.ip,
|
|
userAgent: Array.isArray(userAgent) ? userAgent.join(', ') : userAgent,
|
|
});
|
|
}
|
|
}
|
|
|
|
function readRequestBody(request: Request) {
|
|
return new Promise<Buffer>((resolve, reject) => {
|
|
const chunks: Buffer[] = [];
|
|
|
|
request.on('data', (chunk: Buffer | string) => {
|
|
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
});
|
|
request.on('end', () => resolve(Buffer.concat(chunks)));
|
|
request.on('error', reject);
|
|
});
|
|
}
|