This repository has been archived on 2025-06-18. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
casino/frontend/src/app/feature/auth/login/login.component.ts
Constantin Simonis 07b594fa36
Some checks failed
CI / Get Changed Files (pull_request) Successful in 8s
CI / eslint (pull_request) Successful in 33s
CI / prettier (pull_request) Failing after 36s
CI / oxlint (pull_request) Successful in 42s
CI / Checkstyle Main (pull_request) Failing after 1m8s
CI / Docker frontend validation (pull_request) Successful in 1m46s
CI / test-build (pull_request) Successful in 1m46s
CI / Docker backend validation (pull_request) Successful in 2m36s
feat: implement Google OAuth2 authentication flow
2025-05-21 11:34:10 +02:00

82 lines
2.2 KiB
TypeScript

import { Component, EventEmitter, Output, signal } from '@angular/core';
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
import { Router } from '@angular/router';
import { LoginRequest } from '../../../model/auth/LoginRequest';
import { AuthService } from '@service/auth.service';
import { CommonModule } from '@angular/common';
import { environment } from '@environments/environment';
@Component({
selector: 'app-login',
standalone: true,
imports: [CommonModule, ReactiveFormsModule],
templateUrl: './login.component.html',
})
export class LoginComponent {
loginForm: FormGroup;
errorMessage = signal('');
isLoading = signal(false);
@Output() switchForm = new EventEmitter<void>();
@Output() closeDialog = new EventEmitter<void>();
@Output() forgotPassword = new EventEmitter<void>();
constructor(
private fb: FormBuilder,
private authService: AuthService,
private router: Router
) {
this.loginForm = this.fb.group({
usernameOrEmail: ['', [Validators.required]],
password: ['', [Validators.required]],
});
}
get form() {
return this.loginForm.controls;
}
switchToRegister(): void {
this.switchForm.emit();
}
onSubmit(): void {
if (this.loginForm.invalid) {
return;
}
this.isLoading.set(true);
this.errorMessage.set('');
const loginRequest: LoginRequest = {
usernameOrEmail: this.form['usernameOrEmail'].value,
password: this.form['password'].value,
};
this.authService.login(loginRequest).subscribe({
next: () => {
this.closeDialog.emit();
this.router.navigate(['/home']);
},
error: (err) => {
this.isLoading.set(false);
this.errorMessage.set(
err.error?.message || 'Failed to login. Please check your credentials.'
);
},
});
}
loginWithGithub(): void {
this.isLoading.set(true);
window.location.href = `${environment.apiUrl}/oauth2/github/authorize`;
}
loginWithGoogle(): void {
this.isLoading.set(true);
window.location.href = `${environment.apiUrl}/oauth2/google/authorize`;
}
switchToForgotPassword() {
this.forgotPassword.emit();
}
}