| Current Path : /home/deltalab/PMS/ims-connector/rest/queries/ |
| Current File : //home/deltalab/PMS/ims-connector/rest/queries/auth.js |
/* eslint-disable no-restricted-syntax */
require('dotenv').config();
const axios = require('axios');
const crypto = require('crypto');
const restUrl = process.env.MAGENTO_REST_HOST;
const OAUTH_VERSION = '1.0';
const OAUTH_SIGNATURE = 'HMAC-SHA256';
async function getBearerToken(storeName = 'all') {
if (process.env.MAGENTO_BEARER) {
return process.env.MAGENTO_BEARER;
}
const config = {
method: 'post',
url: `${restUrl}/${storeName}/V1/integration/admin/token`,
headers: {
'Content-Type': 'application/json',
},
data: {
username: process.env.MAGENTO_USERNAME,
password: process.env.MAGENTO_PASSWORD,
},
};
const result = await axios(config);
return result.data;
}
function getNonce() {
const bin = crypto.randomBytes(32);
const hex = Buffer.from(bin, 'ascii').toString('hex');
return hex;
}
function sign(verb, endpoint, params) {
const strParams = [];
for (const key in params) {
if (Object.prototype.hasOwnProperty.call(params, key)) {
strParams.push(`${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`);
}
}
strParams.sort();
const baseString = `${verb.toUpperCase()}&${encodeURIComponent(endpoint)}&${encodeURIComponent(strParams.join('&'))}`;
const key = `${encodeURIComponent(process.env.MAGENTO_CONSUMER_SECRET)}&${encodeURIComponent(process.env.MAGENTO_SECRET_TOKEN)}`;
const oauthSignature = crypto.createHmac('sha256', key).update(baseString).digest('base64');
return oauthSignature;
}
function getOAuthToken(verb, endpoint, criteria = {}) {
const params = {
oauth_consumer_key: process.env.MAGENTO_CONSUMER_KEY,
oauth_nonce: getNonce(),
oauth_signature_method: OAUTH_SIGNATURE,
oauth_timestamp: Math.round(Date.now() / 1000),
oauth_token: process.env.MAGENTO_ACCESS_TOKEN,
oauth_version: OAUTH_VERSION,
};
// const newParams = { ...params, ...criteria };
Object.assign(params, criteria);
params.oauth_signature = sign(verb, endpoint, params);
const strParams = [];
for (const key in params) {
if (Object.prototype.hasOwnProperty.call(params, key)) {
strParams.push(`${key}="${params[key]}"`);
}
}
return strParams.join(',');
}
module.exports = {
getBearerToken,
getOAuthToken,
};