import { IsEmail, IsOptional, IsString } from 'class-validator'; import * as jsonwebtoken from 'jsonwebtoken'; import { getConnectionManager } from 'typeorm'; import { PasswordNeededError, UserNotFoundError } from '../../errors/AuthError'; import { UsernameOrEmailNeededError } from '../../errors/UserErrors'; import { Auth } from '../entities/Auth'; import { User } from '../entities/User'; export class CreateAuth { @IsOptional() @IsString() username?: string; @IsString() password: string; @IsOptional() @IsEmail() @IsString() email?: string; public async toAuth(): Promise { let newAuth: Auth = new Auth(); if (this.email === undefined && this.username === undefined) { throw new UsernameOrEmailNeededError(); } if (!this.password) { throw new PasswordNeededError() } const found_users = await getConnectionManager().get().getRepository(User).find({ where: [{ username: this.username }, { email: this.email }] }); if (found_users.length === 0) { throw new UserNotFoundError() } else { const found_user = found_users[0] // TODO: proper jwt creation const token = jsonwebtoken.sign({}, "securekey") newAuth.access_token = token newAuth.refresh_token = token newAuth.access_token_expires_at = 1587349200 newAuth.refresh_token_expires_at = 1587349200 } return newAuth; } }