79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import {
|
|
HttpStatus,
|
|
Injectable,
|
|
Scope,
|
|
UnauthorizedException,
|
|
} from '@nestjs/common';
|
|
import { InjectDataSource } from '@nestjs/typeorm';
|
|
import {
|
|
CONNECTION_NAME,
|
|
OPERATION,
|
|
} from 'src/core/strings/constants/base.constants';
|
|
import { DataSource } from 'typeorm';
|
|
import { UserRole } from 'src/modules/user-related/user/constants';
|
|
import { UserModel } from 'src/modules/user-related/user/data/models/user.model';
|
|
import { AppSource, LogUserType } from 'src/core/helpers/constant';
|
|
import { EventBus } from '@nestjs/cqrs';
|
|
import { LogUserLoginEvent } from 'src/modules/configuration/log/domain/entities/log-user-login.event';
|
|
import { UserLoginModel } from 'src/modules/user-related/user/data/models/user-login.model';
|
|
|
|
interface UserEntity {
|
|
user_id: string;
|
|
username: string;
|
|
role: UserRole;
|
|
user_privilege_id: string;
|
|
item_id: string;
|
|
item_name: string;
|
|
source: AppSource;
|
|
}
|
|
|
|
@Injectable({ scope: Scope.REQUEST })
|
|
export class AuthService {
|
|
constructor(
|
|
@InjectDataSource(CONNECTION_NAME.DEFAULT)
|
|
protected readonly dataSource: DataSource,
|
|
|
|
private eventBus: EventBus,
|
|
) {}
|
|
|
|
get repository() {
|
|
return this.dataSource.getRepository(UserLoginModel);
|
|
}
|
|
|
|
async logoutUser(user: UserEntity, token: string) {
|
|
await this.repository.delete({ login_token: token });
|
|
|
|
const userLogout = {
|
|
type: LogUserType.logout,
|
|
created_at: new Date().getTime(),
|
|
name: user.username,
|
|
user_privilege_id: user.user_privilege_id,
|
|
...user,
|
|
};
|
|
|
|
this.eventBus.publish(
|
|
new LogUserLoginEvent({
|
|
id: user.user_id,
|
|
old: null,
|
|
data: userLogout,
|
|
user: userLogout as any,
|
|
description: 'Logout',
|
|
module: UserModel.name,
|
|
op: OPERATION.UPDATE,
|
|
}),
|
|
);
|
|
}
|
|
|
|
async verifyRegisteredLoginToken(token: string) {
|
|
const data = await this.repository.findOneBy({ login_token: token });
|
|
|
|
if (!data) {
|
|
throw new UnauthorizedException({
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
message: `Invalid token`,
|
|
error: 'Unauthorized',
|
|
});
|
|
}
|
|
}
|
|
}
|