leimd/react-native-aws-signature

View on GitHub
lib/Util.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';
var crypto = require('crypto-js');
var moment = require('moment');

class Util {
    static hmac(key, string, digest) {
        if (digest !== undefined && digest.toLowerCase() == 'hex') {
            return crypto.HmacSHA256(string,key).toString(crypto.enc.HEX);
        } else {
            return crypto.HmacSHA256(string,key);
        }
    }

    static getHexEncodedHash(string) {
        return crypto.SHA256(string).toString(crypto.enc.HEX);
    }


    static uriEscape(string) {
        var output = encodeURIComponent(string);
        output = output.replace(/[^A-Za-z0-9_.~\-%]+/g, escape);

        // AWS percent-encodes some extra non-standard characters in a URI
        output = output.replace(/[*]/g, function(ch) {
            return '%' + ch.charCodeAt(0).toString(16).toUpperCase();
        });

        return output;
    }

    static formatDateTime(datetimeString) {
        if (!moment(datetimeString).isValid()) throw "Unacceptable datetime string"; // is warning message shows , please comment out moment.js line 850
        return moment(datetimeString).toISOString().replace(/[:\-]|\.\d{3}/g, '');
    }    
}

module.exports = Util;