aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/http/token.ts
diff options
context:
space:
mode:
Diffstat (limited to 'FrontEnd/src/http/token.ts')
-rw-r--r--FrontEnd/src/http/token.ts71
1 files changed, 71 insertions, 0 deletions
diff --git a/FrontEnd/src/http/token.ts b/FrontEnd/src/http/token.ts
new file mode 100644
index 00000000..f8b09d63
--- /dev/null
+++ b/FrontEnd/src/http/token.ts
@@ -0,0 +1,71 @@
+// 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 {
+ apiBaseUrl,
+ convertToIfErrorCodeIs,
+ extractResponseData,
+} from "./common";
+import { HttpUser } from "./user";
+
+export interface HttpCreateTokenRequest {
+ username: string;
+ password: string;
+ expire: number;
+}
+
+export interface HttpCreateTokenResponse {
+ token: string;
+ user: HttpUser;
+}
+
+export interface HttpVerifyTokenRequest {
+ token: string;
+}
+
+export interface HttpVerifyTokenResponse {
+ user: HttpUser;
+}
+
+export class HttpCreateTokenBadCredentialError extends Error {
+ constructor(public innerError?: AxiosError) {
+ super();
+ }
+}
+
+export interface IHttpTokenClient {
+ create(req: HttpCreateTokenRequest): Promise<HttpCreateTokenResponse>;
+ verify(req: HttpVerifyTokenRequest): Promise<HttpVerifyTokenResponse>;
+}
+
+export class HttpTokenClient implements IHttpTokenClient {
+ create(req: HttpCreateTokenRequest): Promise<HttpCreateTokenResponse> {
+ return axios
+ .post<HttpCreateTokenResponse>(`${apiBaseUrl}/token/create`, req)
+ .then(extractResponseData)
+ .catch(
+ convertToIfErrorCodeIs(11010101, HttpCreateTokenBadCredentialError)
+ );
+ }
+
+ verify(req: HttpVerifyTokenRequest): Promise<HttpVerifyTokenResponse> {
+ return axios
+ .post<HttpVerifyTokenResponse>(`${apiBaseUrl}/token/verify`, req)
+ .then(extractResponseData);
+ }
+}
+
+let client: IHttpTokenClient = new HttpTokenClient();
+
+export function getHttpTokenClient(): IHttpTokenClient {
+ return client;
+}
+
+export function setHttpTokenClient(
+ newClient: IHttpTokenClient
+): IHttpTokenClient {
+ const old = client;
+ client = newClient;
+ return old;
+}