|
|
import User from '../models/User.js';
|
|
|
import bcrypt from 'bcrypt';
|
|
|
import TokenService from './TokenService.js';
|
|
|
import UserDto from '../dtos/UserDto.js';
|
|
|
import ApiError from '../controllers/ErrorController.js';
|
|
|
|
|
|
class AuthService {
|
|
|
async registration({login, password}) {
|
|
|
const candidate = await User.findOne({login});
|
|
|
|
|
|
if(candidate) {
|
|
|
throw ApiError.BadRequest('Пользователь с введенным логином уже существует');
|
|
|
}
|
|
|
|
|
|
const hashPassword = await bcrypt.hash(password, 5);
|
|
|
const createdUser = await User.create({login, password: hashPassword });
|
|
|
const userDto = new UserDto(createdUser);
|
|
|
|
|
|
return {user: userDto};
|
|
|
}
|
|
|
|
|
|
async login({login, password}) {
|
|
|
const getUser = await User.findOne({login});
|
|
|
|
|
|
if(!getUser) {
|
|
|
throw ApiError.BadRequest('Пользователя с введенным логином не существует');
|
|
|
}
|
|
|
|
|
|
const isPasswordValid = bcrypt.compareSync(password, getUser.password);
|
|
|
if(!isPasswordValid) {
|
|
|
throw ApiError.BadRequest('Не верный пароль');
|
|
|
}
|
|
|
|
|
|
const userDto = new UserDto(getUser);
|
|
|
const tokens = TokenService.generateTokens({...userDto});
|
|
|
await TokenService.saveToken(userDto._id, tokens.refreshToken);
|
|
|
|
|
|
return {...tokens, user: userDto};
|
|
|
}
|
|
|
|
|
|
async logout(refreshToken) {
|
|
|
const token = await TokenService.removeToken(refreshToken);
|
|
|
return token;
|
|
|
}
|
|
|
|
|
|
async refresh(refreshToken) {
|
|
|
if(!refreshToken) {
|
|
|
throw ApiError.UnauthorizedError();
|
|
|
}
|
|
|
const user = TokenService.validateRefreshToken(refreshToken);
|
|
|
const getToken = await TokenService.findToken(refreshToken);
|
|
|
if(!user || !getToken ) {
|
|
|
throw ApiError.UnauthorizedError();
|
|
|
}
|
|
|
|
|
|
const getUser = await User.findById(user._id)
|
|
|
const userDto = new UserDto(getUser);
|
|
|
const tokens = TokenService.generateTokens({...userDto});
|
|
|
await TokenService.saveToken(userDto._id, tokens.refreshToken);
|
|
|
|
|
|
return {...tokens, user: userDto};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
export default new AuthService(); |