I am trying to connect to restlet from SuiteScript 2.1 using **oauth 1.0(TBA)*, but SuiteScript 2.1 crypto does not support hash. Is there any possible way we can achieve this?
We have used crypto and encode, but nothing works. Is there any other way in SuiteScript 2.1 or 2.0 to oauth 1.0(TBA) for encrypted authentication or to create a signature using HMAC-SHA256?
var SIGNATURE_METHOD = "HMAC-SHA256"
var length = 11;
var OAUTH_NONCE = random(length)
var date = new Date()
var milliseconds = date.getTime()
var TIME_STAMP = parseInt(((milliseconds -120000)/1000))
var OAUTH_VERSION = "1.0";
var SCRIPT_DEPLOYMENT_ID = 1;
var REALM = "78787878"
var CONSUMERKEY = "4554545";
var CONSUMERSECRET = "45455454";
var TOKENKEY = "78787878";
var TOKENSECRET = "4545454544";
var base_url = "https://89898989-sb1.restlets.api.netsuite.com/app/site/hosting/restlet.nl"
var encdata = "deploy=" + SCRIPT_DEPLOYMENT_ID + "&"
encdata = encdata + "oauth_consumer_key=" + CONSUMERKEY + "&"
encdata = encdata + "oauth_nonce=" + OAUTH_NONCE + "&"
encdata = encdata + "oauth_signature_method=" + SIGNATURE_METHOD + "&"
encdata = encdata + "oauth_timestamp=" + TIME_STAMP + "&"
encdata = encdata + "oauth_token=" + TOKENKEY + "&"
encdata = encdata + "oauth_version=" + OAUTH_VERSION + "&"
encdata = encdata + "script=" + scriptId
var baseEncrypt = base_url;
var encryptData = encdata;
var completeData = method+'&' + baseEncrypt + '&'+ encryptData
var ConsumerSecretEncode = CONSUMERSECRET
var ConsumerTokedEncode = TOKENSECRET
var key = ConsumerSecretEncode + "&" + ConsumerTokedEncode
var algorithm = 'SHA256';
var signatureNormal = generateHMAC(key, completeData, algorithm, crypto, encode);
var signature = signatureNormal
var OAuth = "OAuth realm=\"" + REALM + "\","
OAuth = OAuth + "oauth_consumer_key=\"" + CONSUMERKEY + "\","
OAuth = OAuth + "oauth_token=\"" + TOKENKEY + "\","
OAuth = OAuth + "oauth_signature_method=\"HMAC-SHA256\","
OAuth = OAuth + "oauth_timestamp=\"" + TIME_STAMP + "\","
OAuth = OAuth + "oauth_nonce=\"" + OAUTH_NONCE + "\","
OAuth = OAuth + "oauth_version=\"" + "1.0" + "\","
OAuth = OAuth + "oauth_signature=\"" + signature + "\""
return OAuth
}
function generateHMAC(key, data, algorithm, crypto, encode) {
const encoder = encode
const dataValue = encoder.convert({
string: data,
inputEncoding: encoder.Encoding.UTF_8, // Use the value directly
outputEncoding: encoder.Encoding.BASE_64 // Use the value directly
});
const keyData = encoder.convert({
string: key,
inputEncoding: encoder.Encoding.UTF_8, // Use the value directly
outputEncoding: encoder.Encoding.BASE_64 // Use the value directly
});
return crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])
.then((cryptoKey) => crypto.subtle.sign('HMAC', cryptoKey, dataValue))
.then((signature) => {
const view = new DataView(signature);
let hash = '';
for (let i = 0; i < view.byteLength; i++) {
const hex = view.getUint8(i).toString(16);
if (hex.length === 1) {
hash += '0';
}
hash += hex;
}
return hash;
});
}