Your IP : 216.73.216.220


Current Path : /proc/thread-self/root/proc/thread-self/root/home/deltalab/PMS/ims-connector/rest/queries/
Upload File :
Current File : //proc/thread-self/root/proc/thread-self/root/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,
};