diff options
Diffstat (limited to 'Timeline/ClientApp')
4 files changed, 32 insertions, 19 deletions
diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts b/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts index 22e44dd6..3358a9d9 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts @@ -1,25 +1,29 @@ -export abstract class LoginError extends Error { } - -export class BadNetworkError extends LoginError { +export class BadNetworkError extends Error { constructor() { super('Network is bad.'); } } -export class AlreadyLoginError extends LoginError { +export class AlreadyLoginError extends Error { constructor() { super('Internal logical error. There is already a token saved. Please call validateUserLoginState first.'); } } -export class BadCredentialsError extends LoginError { +export class BadCredentialsError extends Error { constructor() { super('Username or password is wrong.'); } } -export class UnknownError extends LoginError { +export class UnknownError extends Error { constructor(public internalError?: any) { super('Sorry, unknown error occured!'); } } + +export class ServerInternalError extends Error { + constructor(message?: string) { + super('Wrong server response. ' + message); + } +} diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts b/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts index 5664cf7c..f52233c9 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts @@ -6,8 +6,9 @@ export const validateTokenUrl = '/api/User/ValidateToken'; export type CreateTokenRequest = UserCredentials; export interface CreateTokenResponse { - token: string; - userInfo: UserInfo; + success: boolean; + token?: string; + userInfo?: UserInfo; } export interface ValidateTokenRequest { diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts index 6906ed60..15755382 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts @@ -102,6 +102,7 @@ describe('InternalUserService', () => { request.url === createTokenUrl && request.body !== null && request.body.username === mockUserCredentials.username && request.body.password === mockUserCredentials.password).flush(<CreateTokenResponse>{ + success: true, token: mockToken, userInfo: mockUserInfo }); diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts index 6de355f2..66eafde9 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts @@ -5,7 +5,7 @@ import { Router } from '@angular/router'; import { Observable, throwError, BehaviorSubject, of } from 'rxjs'; import { map, catchError, retry, switchMap, tap, filter } from 'rxjs/operators'; -import { AlreadyLoginError, BadCredentialsError, BadNetworkError, UnknownError } from './errors'; +import { AlreadyLoginError, BadCredentialsError, BadNetworkError, UnknownError, ServerInternalError } from './errors'; import { createTokenUrl, validateTokenUrl, CreateTokenRequest, CreateTokenResponse, ValidateTokenRequest, ValidateTokenResponse @@ -84,7 +84,7 @@ export class InternalUserService { if (userInfo) { return of(userInfo); } else { - return throwError(new Error('Wrong server response. IsValid is true but UserInfo is null.')); + return throwError(new ServerInternalError('IsValid is true but UserInfo is null.')); } } else { return of(null); @@ -117,21 +117,28 @@ export class InternalUserService { if (error.error instanceof ErrorEvent) { console.error('An error occurred when login: ' + error.error.message); return throwError(new BadNetworkError()); - } else if (error.status === 400) { - console.error('An error occurred when login: wrong credentials.'); - return throwError(new BadCredentialsError()); } else { console.error('An unknown error occurred when login: ' + error); return throwError(new UnknownError(error)); } }), - map(result => { - this.token = result.token; - if (info.rememberMe) { - this.window.localStorage.setItem(TOKEN_STORAGE_KEY, result.token); + switchMap(result => { + if (result.success) { + if (result.token && result.userInfo) { + this.token = result.token; + if (info.rememberMe) { + this.window.localStorage.setItem(TOKEN_STORAGE_KEY, result.token); + } + this.userInfoSubject.next(result.userInfo); + return of(result.userInfo); + } else { + console.error('An error occurred when login: server return wrong data.'); + return throwError(new ServerInternalError('Token or userInfo is null.')); + } + } else { + console.error('An error occurred when login: wrong credentials.'); + return throwError(new BadCredentialsError()); } - this.userInfoSubject.next(result.userInfo); - return result.userInfo; }) ); } |