aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src
diff options
context:
space:
mode:
Diffstat (limited to 'FrontEnd/src')
-rw-r--r--FrontEnd/src/http/common.ts60
-rw-r--r--FrontEnd/src/http/token.ts8
-rw-r--r--FrontEnd/src/services/user.ts4
3 files changed, 40 insertions, 32 deletions
diff --git a/FrontEnd/src/http/common.ts b/FrontEnd/src/http/common.ts
index 0a27b908..5a8c0346 100644
--- a/FrontEnd/src/http/common.ts
+++ b/FrontEnd/src/http/common.ts
@@ -1,12 +1,31 @@
-import rawAxios, { AxiosError, AxiosResponse } from "axios";
+import axios, { Axios, AxiosError, AxiosResponse } from "axios";
import { Base64 } from "js-base64";
+import { identity } from "lodash";
import { BehaviorSubject, Observable } from "rxjs";
+export { axios };
+
export const apiBaseUrl = "/api";
-export const axios = rawAxios.create();
+export class HttpNetworkError extends Error {
+ constructor(public innerError?: AxiosError) {
+ super();
+ }
+}
-function convertToNetworkError(error: AxiosError): never {
+export class HttpForbiddenError extends Error {
+ constructor(public innerError?: AxiosError) {
+ super();
+ }
+}
+
+export class HttpNotFoundError extends Error {
+ constructor(public innerError?: AxiosError) {
+ super();
+ }
+}
+
+function convertNetworkError(error: AxiosError): never {
if (error.isAxiosError && error.response == null) {
throw new HttpNetworkError(error);
} else {
@@ -14,7 +33,7 @@ function convertToNetworkError(error: AxiosError): never {
}
}
-function convertToForbiddenError(error: AxiosError): never {
+function convertForbiddenError(error: AxiosError): never {
if (
error.isAxiosError &&
error.response != null &&
@@ -26,7 +45,7 @@ function convertToForbiddenError(error: AxiosError): never {
}
}
-function convertToNotFoundError(error: AxiosError): never {
+function convertNotFoundError(error: AxiosError): never {
if (
error.isAxiosError &&
error.response != null &&
@@ -38,12 +57,13 @@ function convertToNotFoundError(error: AxiosError): never {
}
}
-rawAxios.interceptors.response.use(undefined, convertToNetworkError);
-rawAxios.interceptors.response.use(undefined, convertToForbiddenError);
-rawAxios.interceptors.response.use(undefined, convertToNotFoundError);
-axios.interceptors.response.use(undefined, convertToNetworkError);
-axios.interceptors.response.use(undefined, convertToForbiddenError);
-axios.interceptors.response.use(undefined, convertToNotFoundError);
+export function configureAxios(axios: Axios): void {
+ axios.interceptors.response.use(identity, convertNetworkError);
+ axios.interceptors.response.use(identity, convertForbiddenError);
+ axios.interceptors.response.use(identity, convertNotFoundError);
+}
+
+configureAxios(axios);
const tokenSubject = new BehaviorSubject<string | null>(null);
@@ -106,24 +126,6 @@ export function extractErrorCode(
return null;
}
-export class HttpNetworkError extends Error {
- constructor(public innerError?: AxiosError) {
- super();
- }
-}
-
-export class HttpForbiddenError extends Error {
- constructor(public innerError?: AxiosError) {
- super();
- }
-}
-
-export class HttpNotFoundError extends Error {
- constructor(public innerError?: AxiosError) {
- super();
- }
-}
-
export class NotModified {}
export interface BlobWithEtag {
diff --git a/FrontEnd/src/http/token.ts b/FrontEnd/src/http/token.ts
index f8b09d63..3de42d21 100644
--- a/FrontEnd/src/http/token.ts
+++ b/FrontEnd/src/http/token.ts
@@ -1,14 +1,18 @@
// Don't use axios in common because it will contains
// authorization header, which shouldn't be used in token apis.
-import axios, { AxiosError } from "axios";
+import originalAxios, { AxiosError } from "axios";
import {
apiBaseUrl,
convertToIfErrorCodeIs,
extractResponseData,
+ configureAxios,
} from "./common";
import { HttpUser } from "./user";
+const axios = originalAxios.create();
+configureAxios(axios);
+
export interface HttpCreateTokenRequest {
username: string;
password: string;
@@ -42,7 +46,7 @@ export interface IHttpTokenClient {
export class HttpTokenClient implements IHttpTokenClient {
create(req: HttpCreateTokenRequest): Promise<HttpCreateTokenResponse> {
return axios
- .post<HttpCreateTokenResponse>(`${apiBaseUrl}/token/create`, req)
+ .post<HttpCreateTokenResponse>(`${apiBaseUrl}/token/create`, req, {})
.then(extractResponseData)
.catch(
convertToIfErrorCodeIs(11010101, HttpCreateTokenBadCredentialError)
diff --git a/FrontEnd/src/services/user.ts b/FrontEnd/src/services/user.ts
index 2f42dd59..bc33d113 100644
--- a/FrontEnd/src/services/user.ts
+++ b/FrontEnd/src/services/user.ts
@@ -1,5 +1,6 @@
import { useState, useEffect } from "react";
import { BehaviorSubject, Observable } from "rxjs";
+import { AxiosError } from "axios";
import { UiLogicError } from "@/common";
@@ -11,7 +12,6 @@ import {
import { getHttpUserClient, HttpUser, UserPermission } from "@/http/user";
import { pushAlert } from "./alert";
-import { AxiosError } from "axios";
interface IAuthUser extends HttpUser {
token: string;
@@ -67,6 +67,8 @@ export class UserService {
type: "danger",
message: "user.tokenInvalid",
});
+ } else {
+ throw e;
}
});