summaryrefslogtreecommitdiff
path: root/src/core/api
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-11-29 15:31:55 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-11-29 15:31:55 +0700
commitddfdcfdc47e8c44fbf7abd0ee69acb959ab79387 (patch)
tree145c10eb7db73f5fd76bfaa6ed8896aa68ad4d32 /src/core/api
parenta5321d82f4b5e8404f575f1d62e92d0322d78db9 (diff)
Update odooApi to logout when reach max conn attempt and redirect to login
Diffstat (limited to 'src/core/api')
-rw-r--r--src/core/api/odooApi.js71
1 files changed, 41 insertions, 30 deletions
diff --git a/src/core/api/odooApi.js b/src/core/api/odooApi.js
index fe9fcdd2..3349ff4b 100644
--- a/src/core/api/odooApi.js
+++ b/src/core/api/odooApi.js
@@ -1,22 +1,24 @@
-import axios from 'axios'
-import camelcaseObjectDeep from 'camelcase-object-deep'
-import { getCookie, setCookie } from 'cookies-next'
-import { getAuth } from '../utils/auth'
+import axios from 'axios';
+import camelcaseObjectDeep from 'camelcase-object-deep';
+import { getCookie, setCookie } from 'cookies-next';
+import { deleteAuth, getAuth } from '../utils/auth';
const renewToken = async () => {
- let token = await axios.get(process.env.NEXT_PUBLIC_ODOO_API_HOST + '/api/token')
- setCookie('token', token.data.result)
- return token.data.result
-}
+ let token = await axios.get(
+ process.env.NEXT_PUBLIC_ODOO_API_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
-}
+ let token = getCookie('token');
+ if (token == undefined) token = await renewToken();
+ return token;
+};
-const maxConnectionAttempt = 15
-let connectionAttempt = 0
+const maxConnectionAttempt = 15;
+let connectionAttempt = 0;
/**
* The `odooApi` function is used to make API requests to an Odoo backend with customizable parameters such as `method`, `url`, `data`, and `headers`.
@@ -30,31 +32,40 @@ let connectionAttempt = 0
* @returns {Promise} - A Promise that resolves to the API response data or an empty array.
*/
const odooApi = async (method, url, data = {}, headers = {}) => {
- connectionAttempt++
+ connectionAttempt++;
try {
- let token = await getToken()
- const auth = getAuth()
+ let token = await getToken();
+ const auth = getAuth();
let axiosParameter = {
method,
url: process.env.NEXT_PUBLIC_ODOO_API_HOST + url,
- headers: { Authorization: token, ...headers }
- }
- if (auth) axiosParameter.headers['Token'] = auth.token
+ headers: { Authorization: token, ...headers },
+ };
+ if (auth) axiosParameter.headers['Token'] = auth.token;
if (method.toUpperCase() == 'POST')
- axiosParameter.headers['Content-Type'] = 'application/x-www-form-urlencoded'
+ axiosParameter.headers['Content-Type'] =
+ 'application/x-www-form-urlencoded';
if (Object.keys(data).length > 0)
- axiosParameter.data = new URLSearchParams(Object.entries(data)).toString()
+ axiosParameter.data = new URLSearchParams(
+ Object.entries(data)
+ ).toString();
- let res = await axios(axiosParameter)
- if (res.data.status.code == 401 && connectionAttempt < maxConnectionAttempt) {
- await renewToken()
- return odooApi(method, url, data, headers)
+ let res = await axios(axiosParameter);
+ if (res.data.status.code == 401) {
+ if (connectionAttempt < maxConnectionAttempt) {
+ await renewToken();
+ return odooApi(method, url, data, headers);
+ } else {
+ await deleteAuth();
+ window.location.href = '/login';
+ return false;
+ }
}
- return camelcaseObjectDeep(res.data.result) || []
+ return camelcaseObjectDeep(res.data.result) || [];
} catch (error) {
- console.log(error)
+ console.log(error);
}
-}
+};
-export default odooApi
+export default odooApi;