From bf577ed5e81452d3c712a681d885aeb47fae9fae Mon Sep 17 00:00:00 2001 From: Bastian Wagner Date: Mon, 26 Aug 2024 09:47:00 +0200 Subject: [PATCH] logging & feedback --- idp/src/users/users.service.ts | 12 +++++++++++ idp_client/angular.json | 3 +++ idp_client/proxy.conf.json | 11 ++++++++++ .../src/app/auth/login/login.component.html | 2 +- .../src/app/auth/login/login.component.ts | 21 +++++++++++++------ .../app/auth/register/register.component.ts | 7 +++---- 6 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 idp_client/proxy.conf.json diff --git a/idp/src/users/users.service.ts b/idp/src/users/users.service.ts index f5ec733..ff63a9d 100644 --- a/idp/src/users/users.service.ts +++ b/idp/src/users/users.service.ts @@ -124,6 +124,9 @@ export class UsersService { } if (client.clientSecret !== clientSecret) { + this.logger.error( + `Client ${clientId} provided invalid secret ${clientSecret}`, + ); throw new HttpException('Invalid client', 401); } @@ -132,21 +135,27 @@ export class UsersService { } if (grantType !== 'authorization_code') { + this.logger.error( + `Client ${clientId} provided invalid grant type ${grantType}`, + ); throw new HttpException('Invalid grant type', 401); } const token = await this.tokenRepo.findByCode(code); if (!token) { + this.logger.error(`Token ${code} not found`); throw new HttpException('Invalid token', 401); } if (token.client.id !== clientId) { + this.logger.error(`Token ${code} not found for client ${clientId}`); throw new HttpException('Invalid token', 401); } const user = await this.userRepo.findById(token.user.id); if (!user) { + this.logger.error(`User ${token.user.id} of token not found`); throw new HttpException('Invalid token', 401); } @@ -185,10 +194,12 @@ export class UsersService { async getNewAccessToken(refreshToken: string) { const payload = this.jwtService.verify(refreshToken); if (payload.type !== 'refresh') { + this.logger.error(`Token ${refreshToken} is not a refresh token`); throw new HttpException('Invalid token', 401); } const user = await this.userRepo.findById(payload.id); if (!user) { + this.logger.error(`User ${payload.id} not found for refresh token`); throw new HttpException('Invalid token', 401); } @@ -206,6 +217,7 @@ export class UsersService { const decoded = this.jwtService.verify(token); return decoded; } catch (e) { + this.logger.error(`Token ${token} is invalid. Error: ${e.message}`); throw new HttpException(e.message, 401); } } diff --git a/idp_client/angular.json b/idp_client/angular.json index 5d97d13..d5d9d93 100644 --- a/idp_client/angular.json +++ b/idp_client/angular.json @@ -72,6 +72,9 @@ }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "proxyConfig": "proxy.conf.json" + }, "configurations": { "production": { "buildTarget": "idp_client:build:production" diff --git a/idp_client/proxy.conf.json b/idp_client/proxy.conf.json new file mode 100644 index 0000000..a44d265 --- /dev/null +++ b/idp_client/proxy.conf.json @@ -0,0 +1,11 @@ +{ + "/api": { + "target": "http://localhost:5000", + "secure": false, + "logLevel": "debug", + "changeOrigin": true, + "pathRewrite": { + "^/api": "/api" + } + } +} \ No newline at end of file diff --git a/idp_client/src/app/auth/login/login.component.html b/idp_client/src/app/auth/login/login.component.html index 15dd8a2..bc30657 100644 --- a/idp_client/src/app/auth/login/login.component.html +++ b/idp_client/src/app/auth/login/login.component.html @@ -11,7 +11,7 @@ - diff --git a/idp_client/src/app/auth/login/login.component.ts b/idp_client/src/app/auth/login/login.component.ts index 464e8f2..4286e07 100644 --- a/idp_client/src/app/auth/login/login.component.ts +++ b/idp_client/src/app/auth/login/login.component.ts @@ -3,7 +3,6 @@ import { Component, inject } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { CommonModule } from '@angular/common'; import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { environment } from '../../../environments/environment'; import { HotToastService } from '@ngxpert/hot-toast'; @Component({ @@ -23,6 +22,8 @@ export class LoginComponent { client: string = ""; client_id = null; + isLoading = false; + loginForm = new FormGroup({ username: new FormControl(''), password: new FormControl(''), @@ -37,7 +38,7 @@ export class LoginComponent { const id = window.localStorage.getItem("auth_sesion_key"); if (!id ||id.length < 2) { return; } - this.http.post(environment.api_url + 'auth/login-with-session-id', { + this.http.post('api/auth/login-with-session-id', { code: id, client_id: this.client_id }).pipe( @@ -64,7 +65,7 @@ export class LoginComponent { this.redirectUri = params.redirect_uri; this.client_id = params.client_id; - this.http.get(environment.api_url + 'auth/', { + this.http.get('api/auth/', { params }).subscribe({ next: (client) => { @@ -78,8 +79,16 @@ export class LoginComponent { } login() { - this.toast.loading('Logging in...'); - this.http.post(environment.api_url + 'auth/login?'+ 'client_id=' + this.client_id, this.loginForm.value).subscribe({ + this.isLoading = true; + this.http.post('api/auth/login?'+ 'client_id=' + this.client_id, this.loginForm.value). + pipe( + this.toast.observe({ + loading: 'Logging in...', + success: 'Login successfull', + error: 'Invalid login' + }) + ) + .subscribe({ next: (data) => { if (data["code"] != null) { window.localStorage.setItem("auth_sesion_key", data["session_key"]); @@ -88,7 +97,7 @@ export class LoginComponent { }, error: (error) => { console.error(error); - this.toast.error('Invalid login'); + this.isLoading = false; } }) } diff --git a/idp_client/src/app/auth/register/register.component.ts b/idp_client/src/app/auth/register/register.component.ts index 5d3dab0..af3a3a2 100644 --- a/idp_client/src/app/auth/register/register.component.ts +++ b/idp_client/src/app/auth/register/register.component.ts @@ -3,7 +3,6 @@ import { Component, inject } from '@angular/core'; import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { HotToastService } from '@ngxpert/hot-toast'; -import { environment } from '../../../environments/environment'; import { CommonModule } from '@angular/common'; @Component({ @@ -40,7 +39,7 @@ export class RegisterComponent { const params = (this.route.snapshot.queryParamMap as any)["params"]; this.redirectUri = params.redirect_uri; this.client_id = params.client_id; - this.http.get(environment.api_url + 'auth/', { + this.http.get('api/auth/', { params }).subscribe({ next: (client) => { @@ -58,10 +57,10 @@ export class RegisterComponent { this.toast.error('Passwords do not match'); return; } - this.http.post(environment.api_url + 'auth/register?'+ 'client_id=' + this.client_id, this.registerForm.value).pipe( + this.http.post('api/auth/register?'+ 'client_id=' + this.client_id, this.registerForm.value).pipe( this.toast.observe({ loading: 'Registering...', - success: 'Registration successfull' + success: 'Registration successfull, please log in', }) ).subscribe({ next: () => {