import {apiUrl} from '../../env.js' import axios from 'axios' export function getAxiosConfigFromJSON () { let config = { headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers')) } return config } export function updateHeaders (newHeaders) { sessionStorage.setItem('@portalmec/accessToken', newHeaders['access-token']) let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers')) if (auth_headers) { auth_headers['access-token'] = newHeaders['access-token'] } else { auth_headers = { client: newHeaders.client, "access-token": newHeaders['access-token'], uid: newHeaders.uid, expiry: newHeaders.expiry, "token-type": "Bearer" } } sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers)) } function fetchHeaders () { let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers')) if (auth_headers) { const myHeaders = new Headers(auth_headers) return myHeaders } else { return {} } } function checkPreviousTokens (new_token) { let prev_tokens = JSON.parse(sessionStorage.getItem('@portalmec/tokens')) if (prev_tokens) { if (!prev_tokens.hasOwnProperty(new_token)) { prev_tokens[new_token] = 1 sessionStorage.setItem('@portalmec/tokens', JSON.stringify(prev_tokens)) return true } else { return false } } else { let tokens = {} tokens[new_token] = 1 sessionStorage.setItem('@portalmec/tokens', JSON.stringify(tokens)) return true } } function updateAccessToken (newAccessToken) { if (checkPreviousTokens(newAccessToken)) { sessionStorage.setItem('@portalmec/accessToken', newAccessToken) let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers')) if (auth_headers) { auth_headers['access-token'] = newAccessToken } sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers)) } } export const getRequest = (url, onSuccess, onError) => { fetch((`${apiUrl}${url}`), { headers : fetchHeaders() }) .then(response => { if (response.headers.has('access-token')) { updateAccessToken(response.headers.get('access-token')) } return response.json().catch(err => { return {}; }) }) .then(data => { console.log(data) onSuccess(data) }) .catch(error => { onError(error) }) } export const deleteRequest = (url, onSuccess, onError) => { fetch((`${apiUrl}${url}`), { method : 'DELETE', headers : fetchHeaders() }) .then(response => { if (response.headers.has('access-token')) { updateAccessToken(response.headers.get('access-token')) } return response.json().catch(err => { return {}; }) }) .then(data => { console.log(data) onSuccess(data) }) .catch(error => { onError(error) }) } export const putRequest = (url, payload, onSuccess, onError) => { let newHeaders = fetchHeaders() if (payload instanceof FormData) { newHeaders.append('Content-Type', 'multipart/form-data') } else { newHeaders.append('Content-Type', 'application/json') } fetch((`${apiUrl}${url}`), { method : 'PUT', headers : newHeaders, body: payload instanceof FormData ? payload : JSON.stringify(payload) }) .then(response => { if (response.headers.has('access-token')) { updateAccessToken(response.headers.get('access-token')) } return response.json().catch(err => { return {}; }) }) .then(data => { console.log(data) onSuccess(data) }) .catch(error => { onError(error) }) } export const postRequest = (url, payload, onSuccess, onError) => { let newHeaders = fetchHeaders() if (payload instanceof FormData) { newHeaders.append('Content-Type', 'multipart/form-data') } else { newHeaders.append('Content-Type', 'application/json') } fetch((`${apiUrl}${url}`), { method : 'POST', headers : newHeaders, body: payload instanceof FormData ? payload : JSON.stringify(payload) }) .then(response => { if (response.headers.has('access-token')) { updateAccessToken(response.headers.get('access-token')) } return response.json().catch(err => { return {}; }) }) .then(data => { console.log(data) onSuccess(data) }) .catch(error => { onError(error) }) } export const fetchAllRequest = (urls, onSuccess, onError) => { Promise.all( urls.map( url => fetch(`${apiUrl}${url}`, { headers : fetchHeaders() }))).then( (responses) => { for(let res of responses) { console.log(res) if (res.headers.has('access-token') && res.status !== 304) { console.log(res) updateAccessToken(res.headers.get('access-token')) } } return Promise.all(responses.map( (response) => response.json().catch(err => { return {}; }))) }).then( (data) => { onSuccess(data) }).catch((error) => { onError(error) }) } export const validateGoogleLoginToken = (config, onSuccess, onError) => { axios.get( (`${apiUrl}/auth/validate_token/`), config ).then( (response) => { if ( response.headers['access-token'] ) { updateHeaders(response.headers) } onSuccess(response.data) }, (error) => { onError(error) } ) } export const authentication = (url, payload, onSuccess, onError) => { let formData = new FormData() for (const [key, value] of Object.entries(payload)) { formData.append(`${key}`,value); } fetch((`${apiUrl}${url}`), { method : 'POST', body: formData }) .then(response => { const auth_headers = { client: response.headers.get('client'), "access-token": response.headers.get('access-token'), uid: response.headers.get('uid'), expiry: response.headers.get('expiry'), "token-type": "Bearer" } sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers)) return response.json().catch(err => { return {}; }) }) .then(data => { console.log(data) onSuccess(data) }) .catch(error => { onError(error) }) }