diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-11-29 15:31:55 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-11-29 15:31:55 +0700 |
| commit | ddfdcfdc47e8c44fbf7abd0ee69acb959ab79387 (patch) | |
| tree | 145c10eb7db73f5fd76bfaa6ed8896aa68ad4d32 /src/core/api | |
| parent | a5321d82f4b5e8404f575f1d62e92d0322d78db9 (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.js | 71 |
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; |
