Skip to content
Snippets Groups Projects
getAxiosConfig.js 7.04 KiB
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)
        })

}