aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/http/token.ts
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-07-26 15:02:55 +0800
committercrupest <crupest@outlook.com>2020-07-26 15:02:55 +0800
commitb78d21a524f7a11ad29b4bd230f23825f80c3ed7 (patch)
tree88bfe8d4c5298f61a90c501933784885ec9ce77f /Timeline/ClientApp/src/app/http/token.ts
parent886ab2a222bc503156542988edc7be5062f6e7b1 (diff)
downloadtimeline-b78d21a524f7a11ad29b4bd230f23825f80c3ed7.tar.gz
timeline-b78d21a524f7a11ad29b4bd230f23825f80c3ed7.tar.bz2
timeline-b78d21a524f7a11ad29b4bd230f23825f80c3ed7.zip
Merge front end repo
Diffstat (limited to 'Timeline/ClientApp/src/app/http/token.ts')
-rw-r--r--Timeline/ClientApp/src/app/http/token.ts72
1 files changed, 72 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/http/token.ts b/Timeline/ClientApp/src/app/http/token.ts
new file mode 100644
index 00000000..26f7891f
--- /dev/null
+++ b/Timeline/ClientApp/src/app/http/token.ts
@@ -0,0 +1,72 @@
+import axios, { AxiosError } from 'axios';
+
+import {
+ apiBaseUrl,
+ convertToNetworkError,
+ 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)
+ )
+ .catch(convertToNetworkError);
+ }
+
+ verify(req: HttpVerifyTokenRequest): Promise<HttpVerifyTokenResponse> {
+ return axios
+ .post<HttpVerifyTokenResponse>(`${apiBaseUrl}/token/verify`, req)
+ .then(extractResponseData)
+ .catch(convertToNetworkError);
+ }
+}
+
+let client: IHttpTokenClient = new HttpTokenClient();
+
+export function getHttpTokenClient(): IHttpTokenClient {
+ return client;
+}
+
+export function setHttpTokenClient(
+ newClient: IHttpTokenClient
+): IHttpTokenClient {
+ const old = client;
+ client = newClient;
+ return old;
+}