aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp
diff options
context:
space:
mode:
Diffstat (limited to 'Timeline/ClientApp')
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/errors.ts16
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts5
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts1
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts29
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;
})
);
}