0

JavaScript を使用して再構築する必要があるこの文字列があります。

Label=11121212&TopicArn=test&AWSAccountId.member.1=YYYYYYY&ActionName.member.1=createTopic&Action=AddPermission&Version=2010-03-31& AWSAccessKeyId =XXXXXXXXX&SignatureVersion=2&SignatureMethod=HmacSHA1&Timestamp=2012-05-02T16%3A06%3A09.000Z&Signature=C3uIh2k2%

この例でAWSAccessKeyIdは、 が文字列の最初の部分で、label最後から 2 番目の部分である必要があります。他にも、これに似たものがあります。

Expected output --AWSAccessKeyId=XXXXXXXXX&AWSAccountId.member.1=YYYYYYYYY&Action=AddPermission&ActionName.member.1=Publish&Label=ios-sns-permission-label&Signature=dEaNL0ibP5c7xyl4qXDPFPADW0meoUX9caKyUIx1wkk%3D&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-05-02T00%3A51%3A23.965Z&TopicArn= arn%3Aaws%3Asns%3Aus-east-1%3A335750469596%3AiOSGoesWooooo-1335919882&Version=2010-03-31

この不正な文字列を作成するコード

exports.generatePayload = function(params, accessKeyId, secretKey, endpoint) {
    var host = endpoint.replace(/.*:\/\//, "");
    var payload = null;

    var signer = new AWSV2Signer(accessKeyId, secretKey);
    params = signer.sign(params, new Date(), {
        "verb" : "POST",
        "host" : host,
        "uriPath" : "/"
    });

    var encodedParams = [];
    for(var key in params) {
        if(params[key] !== null) {
            encodedParams.push(encodeURIComponent(key) + "=" + encodeURIComponent(params[key]));
        } else {
            encodedParams.push(encodeURIComponent(key));
        }
    }
    payload = encodedParams.join("&");
    return payload;
}

これを配列に入れて再構築しようとしましたが、うまくいきませんでした。

JavaScriptを使用してこれを簡単に行う方法をアドバイスしてください

4

1 に答える 1

1
exports.generatePayload = function(params, accessKeyId, secretKey, endpoint) {
    var host = endpoint.replace(/.*:\/\//, "");
    var payload = null;

    var signer = new AWSV2Signer(accessKeyId, secretKey);
    params = signer.sign(params, new Date(), {
        "verb" : "POST",
        "host" : host,
        "uriPath" : "/"
    });

    var encodedParams = [];
    if(params["AWSAccessKeyId"] != null)
    {
        encodedParams.push(encodeURIComponent("AWSAccessKeyId") + "=" + encodeURIComponent(params["AWSAccessKeyId"]));

    }
    if(params["AWSAccountId.member.1"] != null)
    {
        encodedParams.push(encodeURIComponent("AWSAccountId.member.1") + "=" + encodeURIComponent(params["AWSAccountId.member.1"]));

    }
    //other_ifs_for_param_keys_here
    payload = encodedParams.join("&");
    return payload;
于 2012-05-02T16:53:26.873 に答える