@kweli/cs-rest
Version:
Simple authentication and REST calls for OpenText Content Server.
58 lines (44 loc) • 1.62 kB
JavaScript
const axios = require('axios')
const get = require('lodash.get')
const FormDataFactory = require('./handlers/form-data-factory')
function getInstance (options) {
const instance = axios.create(options)
instance.interceptors.response.use(response => {
const otcsticket = get(response, 'headers.otcsticket')
if (otcsticket) {
instance.defaults.headers.common.OTCSTicket = otcsticket
}
return response
}, error => {
return Promise.reject(error)
})
return instance
}
function axiosFactory (options) {
const instance = getInstance(options)
const username = get(options, 'username')
const password = get(options, 'password')
const otcsticket = get(options, 'otcsticket')
if (otcsticket) {
instance.defaults.headers.common.OTCSTicket = otcsticket
} else if (username && password) {
instance.interceptors.request.use(async request => {
if (request.headers.common.OTCSTicket) {
return request
} else {
const formData = FormDataFactory.createFormData()
formData.append('username', username)
formData.append('password', password)
const response = process.node
? await axios.post(`${options.baseURL}/api/v1/auth/`, formData.getBuffer(), { headers: formData.getHeaders() })
: await axios.post(`${options.baseURL}/api/v1/auth/`, formData)
request.headers.common.OTCSTicket = get(response, 'data.ticket')
return request
}
})
} else {
throw Error('You must provide an otcsticket or username and password.')
}
return instance
}
module.exports = axiosFactory