Connect to restlet from SuiteScript 2.0 NetSuite using oauth 2.0

196 views Asked by At

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;
            });
}
0

There are 0 answers