import {UserDTO, UserRoles} from '../../../common/entities/UserDTO'; import {IUserManager} from '../interfaces/IUserManager'; import {UserEntity} from './enitites/UserEntity'; import {SQLConnection} from './SQLConnection'; import {PasswordHelper} from '../PasswordHelper'; export class UserManager implements IUserManager { constructor() { } public async findOne(filter: any) { const connection = await SQLConnection.getConnection(); const pass = filter.password; delete filter.password; const user = (await connection.getRepository(UserEntity).findOne(filter)); if (user.permissions && user.permissions != null) { user.permissions = JSON.parse(user.permissions); } if (pass && !PasswordHelper.comparePassword(pass, user.password)) { throw new Error('No entry found'); } return user; } public async find(filter: any) { const connection = await SQLConnection.getConnection(); return (await connection.getRepository(UserEntity).find(filter)).map(user => { if (user.permissions && user.permissions != null) { user.permissions = JSON.parse(user.permissions); } return user; }); } public async createUser(user: UserDTO) { const connection = await SQLConnection.getConnection(); if (user.permissions && user.permissions != null) { user.permissions = JSON.stringify(user.permissions); } user.password = PasswordHelper.cryptPassword(user.password); return await connection.getRepository(UserEntity).save(user); } public async deleteUser(id: number) { const connection = await SQLConnection.getConnection(); const user = await connection.getRepository(UserEntity).findOne({id: id}); return await connection.getRepository(UserEntity).remove(user); } public async changeRole(id: number, newRole: UserRoles) { const connection = await SQLConnection.getConnection(); const userRepository = connection.getRepository(UserEntity); const user = await userRepository.findOne({id: id}); user.role = newRole; return await userRepository.save(user); } public async changePassword(request: any) { throw new Error('not implemented'); // TODO: implement } }