Web:Common:OAuth: add new utils, new interfaces

This commit is contained in:
Timofey Boyko 2023-09-25 17:02:28 +03:00
parent a56a46236c
commit 3b9c56c5f4
3 changed files with 177 additions and 19 deletions

View File

@ -1,6 +1,17 @@
import axios, { AxiosRequestConfig } from "axios"; import axios, { AxiosRequestConfig } from "axios";
import { ClientDTO, ClientListDTO } from "../../utils/oauth/dto"; import {
transformToClientProps,
transformToClientDTO,
} from "./../../utils/oauth/index";
import {
ClientDTO,
ClientListDTO,
ClientListProps,
ClientProps,
ScopeDTO,
} from "../../utils/oauth/dto";
const axiosConfig: AxiosRequestConfig = { const axiosConfig: AxiosRequestConfig = {
baseURL: "/api", baseURL: "/api",
@ -24,49 +35,56 @@ const request = (options: any): Promise<any> => {
return client(options).then(onSuccess).catch(onError); return client(options).then(onSuccess).catch(onError);
}; };
export const getClient = async (clientId: string): Promise<ClientDTO> => { export const getClient = async (clientId: string): Promise<ClientProps> => {
const client: ClientDTO = await request({ const client: ClientDTO = await request({
method: "get", method: "get",
url: `/clients/${clientId}`, url: `/clients/${clientId}`,
}); });
return client;
return transformToClientProps(client);
}; };
export const getClientList = async ( export const getClientList = async (
page: number, page: number,
limit: number limit: number
): Promise<ClientListDTO> => { ): Promise<ClientListProps> => {
const clients: ClientListDTO = ( const { data }: { data: ClientListDTO } = await request({
await request({
method: "get", method: "get",
url: `/clients?page=${page}&limit=${limit}`, url: `/clients?page=${page}&limit=${limit}`,
}) });
).data;
const clients = { ...data, content: [] as ClientProps[] };
data.content.forEach((item) => {
const client = transformToClientProps(item);
clients.content.push({ ...client });
});
return clients; return clients;
}; };
export const addClient = async (data: ClientDTO): Promise<ClientDTO> => { export const addClient = async (data: ClientProps): Promise<ClientProps> => {
const client: ClientDTO = await request({ const client: ClientDTO = await request({
method: "post", method: "post",
url: `/clients`, url: `/clients`,
data, data: transformToClientDTO(data),
}); });
return client; return transformToClientProps(client);
}; };
export const updateClient = async ( export const updateClient = async (
clientId: string, clientId: string,
data: ClientDTO data: ClientProps
): Promise<ClientDTO> => { ): Promise<ClientProps> => {
const client: ClientDTO = await request({ const client: ClientDTO = await request({
method: "put", method: "put",
url: `/clients/${clientId}`, url: `/clients/${clientId}`,
data, data: transformToClientDTO(data),
}); });
return client; return transformToClientProps(client);
}; };
export const regenerateSecret = async (clientId: string): Promise<string> => { export const regenerateSecret = async (clientId: string): Promise<string> => {
@ -86,3 +104,21 @@ export const deleteClient = async (clientId: string): Promise<void> => {
url: `/clients/${clientId}`, url: `/clients/${clientId}`,
}); });
}; };
export const getScope = async (name: string): Promise<ScopeDTO> => {
const scope: ScopeDTO = await request({
method: "get",
url: `/scopes/${name}`,
});
return scope;
};
export const getScopeList = async (): Promise<ScopeDTO[]> => {
const scopeList: ScopeDTO[] = await request({
method: "get",
url: `/scopes`,
});
return scopeList;
};

View File

@ -1,4 +1,23 @@
import { OauthScopes } from "./enums"; export type ScopeDTO = {
name: string;
description: string;
};
export interface ClientProps {
clientId: string;
secret: string;
description: string;
termsUrl: string;
policyUrl: string;
logoUrl: string;
authenticationMethod: string;
redirectUri: string;
logoutRedirectUri: string;
scopes: string[];
tenant: number;
invalidated?: boolean;
name: string;
}
export type ClientDTO = { export type ClientDTO = {
client_id: string; client_id: string;
@ -10,11 +29,41 @@ export type ClientDTO = {
authenticationMethod: string; authenticationMethod: string;
redirect_uri: string; redirect_uri: string;
logout_redirect_uri: string; logout_redirect_uri: string;
scopes: OauthScopes[]; scopes: string[];
tenant: number; tenant: number;
invalidated?: boolean; invalidated?: boolean;
name: string;
}; };
export interface ClientListProps {
content: ClientProps[];
empty: boolean;
first: boolean;
last: true;
number: number;
numberOfElements: number;
pageable: {
offset: number;
pageNumber: number;
pageSize: number;
paged: boolean;
sort: {
empty: boolean;
sorted: boolean;
unsorted: boolean;
};
unpaged: boolean;
};
size: number;
sort: {
empty: boolean;
sorted: boolean;
unsorted: boolean;
};
totalElements: number;
totalPages: number;
}
export type ClientListDTO = { export type ClientListDTO = {
content: ClientDTO[]; content: ClientDTO[];
empty: boolean; empty: boolean;

View File

@ -0,0 +1,73 @@
import { ClientDTO, ClientProps } from "./dto";
export const transformToClientProps = (clientDto: ClientDTO): ClientProps => {
const {
client_id,
client_secret,
description,
terms_url,
policy_url,
logo_url,
authenticationMethod,
redirect_uri,
logout_redirect_uri,
scopes,
tenant,
invalidated,
name,
} = clientDto;
const client: ClientProps = {
clientId: client_id,
secret: client_secret,
description,
termsUrl: terms_url,
policyUrl: policy_url,
logoUrl: logo_url,
authenticationMethod,
redirectUri: redirect_uri,
logoutRedirectUri: logout_redirect_uri,
scopes,
tenant,
invalidated,
name,
};
return client;
};
export const transformToClientDTO = (clientProps: ClientProps): ClientDTO => {
const {
clientId: client_id,
secret: client_secret,
description,
termsUrl: terms_url,
policyUrl: policy_url,
logoUrl: logo_url,
authenticationMethod,
redirectUri: redirect_uri,
logoutRedirectUri: logout_redirect_uri,
scopes,
tenant,
invalidated,
name,
} = clientProps;
const client: ClientDTO = {
client_id,
client_secret,
description,
terms_url,
policy_url,
logo_url,
authenticationMethod,
redirect_uri,
logout_redirect_uri,
scopes,
tenant,
invalidated,
name,
};
return client;
};