/* * Copyright © 2024 Hexastack. All rights reserved. * * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ import { Injectable, UnauthorizedException } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { Strategy } from 'passport-local'; import { AuthService } from '../../services/auth.service'; @Injectable() export class LocalStrategy extends PassportStrategy(Strategy) { constructor(private readonly authService: AuthService) { super({ usernameField: 'identifier', }); } async validate(username: string, password: string): Promise { const user = await this.authService.validateUser(username, password); if (!user) { throw new UnauthorizedException('Unable to login, check credentials'); } return Object.entries(user) .filter( ([field]) => !field.startsWith('_') && !field.startsWith('password'), ) .reduce( (acc, [field, value]) => ({ ...acc, ...{ [field]: value }, }), {}, ); } }