diff options
author | crupest <crupest@outlook.com> | 2020-07-26 15:02:55 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-07-26 15:02:55 +0800 |
commit | b78d21a524f7a11ad29b4bd230f23825f80c3ed7 (patch) | |
tree | 88bfe8d4c5298f61a90c501933784885ec9ce77f /Timeline/ClientApp/src/app/http/token.ts | |
parent | 886ab2a222bc503156542988edc7be5062f6e7b1 (diff) | |
download | timeline-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.ts | 72 |
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;
+}
|