summaryrefslogtreecommitdiff
path: root/src-migrate/common/libs
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-10-23 17:11:33 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-10-23 17:11:33 +0700
commit90710579ba1c12060877f6ec2d26103f9c31058d (patch)
tree307032cfb8cd13b790c569bc443258b00b07684e /src-migrate/common/libs
parenta001da95b9c03167656aec8a573cf60c12164b3f (diff)
Refactor and migrate register page
Diffstat (limited to 'src-migrate/common/libs')
-rw-r--r--src-migrate/common/libs/auth.ts26
-rw-r--r--src-migrate/common/libs/clsxm.ts6
-rw-r--r--src-migrate/common/libs/odooApi.ts81
3 files changed, 113 insertions, 0 deletions
diff --git a/src-migrate/common/libs/auth.ts b/src-migrate/common/libs/auth.ts
new file mode 100644
index 00000000..fb4e836a
--- /dev/null
+++ b/src-migrate/common/libs/auth.ts
@@ -0,0 +1,26 @@
+import { deleteCookie, getCookie, setCookie } from 'cookies-next';
+import { AuthProps } from '../types/auth';
+
+const COOKIE_KEY = 'auth';
+
+export const getAuth = (): AuthProps | boolean => {
+ const auth = getCookie(COOKIE_KEY);
+
+ if (typeof auth === 'string') {
+ return JSON.parse(auth);
+ }
+
+ return false;
+};
+
+export const setAuth = (user: AuthProps): boolean => {
+ setCookie(COOKIE_KEY, JSON.stringify(user));
+
+ return true;
+};
+
+export const deleteAuth = (): boolean => {
+ deleteCookie(COOKIE_KEY);
+
+ return true;
+};
diff --git a/src-migrate/common/libs/clsxm.ts b/src-migrate/common/libs/clsxm.ts
new file mode 100644
index 00000000..0fc10317
--- /dev/null
+++ b/src-migrate/common/libs/clsxm.ts
@@ -0,0 +1,6 @@
+import clsx, { ClassValue } from 'clsx';
+import { twMerge } from 'tw-merge';
+
+export default function clsxm(...classes: ClassValue[]) {
+ return twMerge(clsx(...classes));
+}
diff --git a/src-migrate/common/libs/odooApi.ts b/src-migrate/common/libs/odooApi.ts
new file mode 100644
index 00000000..2dbc18d3
--- /dev/null
+++ b/src-migrate/common/libs/odooApi.ts
@@ -0,0 +1,81 @@
+import axios, { AxiosRequestConfig, Method } from 'axios';
+import { getCookie, setCookie } from 'cookies-next';
+import { getAuth } from './auth';
+import { AuthApiProps, AuthProps } from '../types/auth';
+
+const ODOO_HOST = process.env.NEXT_PUBLIC_ODOO_API_HOST as string;
+
+const renewToken = async () => {
+ let token = await axios.get(`${ODOO_HOST}/api/token`);
+ setCookie('token', token.data.result);
+
+ return token.data.result;
+};
+
+const getToken = async () => {
+ let token = getCookie('token');
+ if (token == undefined) token = await renewToken();
+
+ return token;
+};
+
+const maxConnectionAttempt = 15;
+let connectionAttempt = 0;
+
+const odooApi = async (
+ method: Method,
+ url: string,
+ data = {},
+ headers = {}
+): Promise<any> => {
+ connectionAttempt++;
+
+ try {
+ let token = await getToken();
+ const auth = getAuth();
+
+ let axiosParameter: AxiosRequestConfig = {
+ method,
+ url: process.env.NEXT_PUBLIC_ODOO_API_HOST + url,
+ headers: { Authorization: token, ...headers },
+ };
+
+ if (typeof auth === 'object' && 'token' in auth) {
+ axiosParameter.headers = {
+ ...axiosParameter.headers,
+ Token: auth.token,
+ };
+ }
+
+ if (method.toUpperCase() === 'POST') {
+ axiosParameter.headers = {
+ ...axiosParameter.headers,
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ };
+ }
+
+ if (Object.keys(data).length > 0) {
+ axiosParameter.data = new URLSearchParams(
+ Object.entries(data)
+ ).toString();
+ }
+
+ let res = await axios(axiosParameter);
+ const authResponse: AuthApiProps = res.data;
+
+ if (
+ authResponse.status.code == 401 &&
+ connectionAttempt < maxConnectionAttempt
+ ) {
+ await renewToken();
+ return odooApi(method, url, data, headers);
+ }
+
+ return authResponse.result || null;
+ } catch (error) {
+ console.log(error);
+ return null;
+ }
+};
+
+export default odooApi;