mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-29 04:16:07 +00:00
Update Go AWS SDK to the latest version
This commit is contained in:
committed by
Andrey Smirnov
parent
d08be990ef
commit
94a72b23ff
+14
-2
@@ -32,6 +32,19 @@ func (t AWSEpochTime) MarshalJSON() ([]byte, error) {
|
||||
return []byte(fmt.Sprintf(`{"AWS:EpochTime":%d}`, t.UTC().Unix())), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON unserializes AWS Profile epoch time.
|
||||
func (t *AWSEpochTime) UnmarshalJSON(data []byte) error {
|
||||
var epochTime struct {
|
||||
Sec int64 `json:"AWS:EpochTime"`
|
||||
}
|
||||
err := json.Unmarshal(data, &epochTime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t.Time = time.Unix(epochTime.Sec, 0).UTC()
|
||||
return nil
|
||||
}
|
||||
|
||||
// An IPAddress wraps an IPAddress source IP providing JSON serialization information
|
||||
type IPAddress struct {
|
||||
SourceIP string `json:"AWS:SourceIp"`
|
||||
@@ -169,11 +182,10 @@ func NewCannedPolicy(resource string, expires time.Time) *Policy {
|
||||
|
||||
// encodePolicy encodes the Policy as JSON and also base 64 encodes it.
|
||||
func encodePolicy(p *Policy) (b64Policy, jsonPolicy []byte, err error) {
|
||||
jsonPolicy, err = json.Marshal(p)
|
||||
jsonPolicy, err = encodePolicyJSON(p)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("failed to encode policy, %s", err.Error())
|
||||
}
|
||||
|
||||
// Remove leading and trailing white space, JSON encoding will note include
|
||||
// whitespace within the encoding.
|
||||
jsonPolicy = bytes.TrimSpace(jsonPolicy)
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// +build !go1.7
|
||||
|
||||
package sign
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
func encodePolicyJSON(p *Policy) ([]byte, error) {
|
||||
src, err := json.Marshal(p)
|
||||
// Convert \u0026 back to &
|
||||
return bytes.Replace(src, []byte("\\u0026"), []byte("&"), -1), err
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// +build go1.7
|
||||
|
||||
package sign
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
func encodePolicyJSON(p *Policy) ([]byte, error) {
|
||||
buffer := &bytes.Buffer{}
|
||||
encoder := json.NewEncoder(buffer)
|
||||
encoder.SetEscapeHTML(false)
|
||||
err := encoder.Encode(p)
|
||||
return buffer.Bytes(), err
|
||||
}
|
||||
+50
-3
@@ -6,6 +6,7 @@ import (
|
||||
"crypto/rsa"
|
||||
"crypto/sha1"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strings"
|
||||
@@ -27,11 +28,31 @@ func TestEpochTimeMarshal(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEpochTimeUnmarshal(t *testing.T) {
|
||||
now := time.Now().Round(time.Second)
|
||||
data := fmt.Sprintf(`{"AWS:EpochTime":%d}`, now.Unix())
|
||||
var v AWSEpochTime
|
||||
err := json.Unmarshal([]byte(data), &v)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error, %#v", err)
|
||||
}
|
||||
|
||||
expected := now.UTC()
|
||||
if v.Time != expected {
|
||||
t.Errorf("Expected unmarshaled time to match, expect: %s, actual: %s",
|
||||
expected, v.Time)
|
||||
}
|
||||
}
|
||||
|
||||
var testCreateResource = []struct {
|
||||
scheme, u string
|
||||
expect string
|
||||
errPrefix string
|
||||
}{
|
||||
{
|
||||
"https", "https://example.com/a?b=1&c=2",
|
||||
"https://example.com/a?b=1&c=2", "",
|
||||
},
|
||||
{
|
||||
"https", "https://example.com/a?b=1",
|
||||
"https://example.com/a?b=1", "",
|
||||
@@ -44,6 +65,10 @@ var testCreateResource = []struct {
|
||||
"rtmp", "https://example.com/a?b=1",
|
||||
"a?b=1", "",
|
||||
},
|
||||
{
|
||||
"rtmp", "https://example.com/a?b=1&c=2",
|
||||
"a?b=1&c=2", "",
|
||||
},
|
||||
{
|
||||
"ftp", "ftp://example.com/a?b=1",
|
||||
"", "invalid URL scheme",
|
||||
@@ -75,10 +100,11 @@ func TestCreateResource(t *testing.T) {
|
||||
|
||||
var testTime = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
|
||||
|
||||
const expectedJSONPolicy = `{"Statement":[{"Resource":"https://example.com/a","Condition":{"DateLessThan":{"AWS:EpochTime":1257894000}}}]}`
|
||||
const expectedB64Policy = `eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxMjU3ODk0MDAwfX19XX0=`
|
||||
|
||||
func TestEncodePolicy(t *testing.T) {
|
||||
const (
|
||||
expectedJSONPolicy = `{"Statement":[{"Resource":"https://example.com/a","Condition":{"DateLessThan":{"AWS:EpochTime":1257894000}}}]}`
|
||||
expectedB64Policy = `eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxMjU3ODk0MDAwfX19XX0=`
|
||||
)
|
||||
p := NewCannedPolicy("https://example.com/a", testTime)
|
||||
|
||||
b64Policy, jsonPolicy, err := encodePolicy(p)
|
||||
@@ -95,6 +121,27 @@ func TestEncodePolicy(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEncodePolicyWithQueryParams(t *testing.T) {
|
||||
const (
|
||||
expectedJSONPolicy = `{"Statement":[{"Resource":"https://example.com/a?b=1&c=2","Condition":{"DateLessThan":{"AWS:EpochTime":1257894000}}}]}`
|
||||
expectedB64Policy = `eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hP2I9MSZjPTIiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ==`
|
||||
)
|
||||
p := NewCannedPolicy("https://example.com/a?b=1&c=2", testTime)
|
||||
|
||||
b64Policy, jsonPolicy, err := encodePolicy(p)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error, %#v", err)
|
||||
}
|
||||
|
||||
if string(jsonPolicy) != expectedJSONPolicy {
|
||||
t.Errorf("Expected json encoding to match, \nexpect: %s\nactual: %s\n", expectedJSONPolicy, jsonPolicy)
|
||||
}
|
||||
|
||||
if string(b64Policy) != expectedB64Policy {
|
||||
t.Errorf("Expected b64 encoding to match, \nexpect: %s\nactual: %s\n", expectedB64Policy, b64Policy)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSignEncodedPolicy(t *testing.T) {
|
||||
p := NewCannedPolicy("https://example.com/a", testTime)
|
||||
_, jsonPolicy, err := encodePolicy(p)
|
||||
|
||||
Generated
Vendored
+8
-39
@@ -3,9 +3,10 @@ package sign
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go/awstesting/mock"
|
||||
)
|
||||
|
||||
func examplePEMReader() io.Reader {
|
||||
@@ -18,19 +19,9 @@ func examplePEMReader() io.Reader {
|
||||
}
|
||||
|
||||
func ExampleCookieSigner_Sign() {
|
||||
origRandReader := randReader
|
||||
randReader = newRandomReader(rand.New(rand.NewSource(1)))
|
||||
defer func() {
|
||||
randReader = origRandReader
|
||||
}()
|
||||
|
||||
// Load your private key so it can be used by the CookieSigner
|
||||
// To load private key from file use `sign.LoadPEMPrivKeyFile`.
|
||||
privKey, err := LoadPEMPrivKey(examplePEMReader())
|
||||
if err != nil {
|
||||
fmt.Println("failed to load private key", err)
|
||||
return
|
||||
}
|
||||
privKey := mock.RSAPrivateKey
|
||||
|
||||
cookieSigner := NewCookieSigner("keyID", privKey)
|
||||
|
||||
@@ -45,17 +36,11 @@ func ExampleCookieSigner_Sign() {
|
||||
// Output:
|
||||
// Cookies:
|
||||
// CloudFront-Policy: eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2V4YW1wbGUuY29tL3NvbWVwYXRoLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTU4MDB9fX1dfQ__, , , false
|
||||
// CloudFront-Signature: o~jvj~CFkvGZB~yYED3elicKZag-CRijy8yD2E5yF1s7VNV7kNeQWC7MDtEcBQ8-eh7Xgjh0wMPQdAVdh09gBObd-hXDpKUyh8YKxogj~oloV~8KOvqE5xzWiKcqjdfJjmT5iEqIui~H1ExYjyKjgir79npmlyYkaJS5s62EQa8_, , , false
|
||||
// CloudFront-Signature: Gx67J8t1VanOFWN84BQlpN064aGCicJv916esnPr9Rdb2RKEzl7VoDOsh9Uez7SY5blWATkN5F3xNicTpOupdN-ywrTf5zCTLz5RmvLrIyEDS3Y1knTGoWvp6nnIb9FOuI1rSyBaJ8VKuNVQGmvqzXGXsnipgSBPjpkL6Ja3dBXeKIbUeaLKQBZrtMWv9nS5VyG4nOP-CRcTgQ5DA3-h~WP2ZzhONb6yoYXeOSvBu8HBl0IZI27InLpxiKlkWUchNncnkZ32Md0CwLLrA4wxFl0fYsxxg6Us2XBYRGmudugJHgkkopem9Cc4eOiDGMABcJGAuZprVXT0WuOBYJngTA__, , , false
|
||||
// CloudFront-Key-Pair-Id: keyID, , , false
|
||||
}
|
||||
|
||||
func ExampleCookieSigner_SignWithPolicy() {
|
||||
origRandReader := randReader
|
||||
randReader = newRandomReader(rand.New(rand.NewSource(1)))
|
||||
defer func() {
|
||||
randReader = origRandReader
|
||||
}()
|
||||
|
||||
// Sign cookie to be valid for 30 minutes from now, expires one hour
|
||||
// from now, and restricted to the 192.0.2.0/24 IP address range.
|
||||
// http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html
|
||||
@@ -80,11 +65,7 @@ func ExampleCookieSigner_SignWithPolicy() {
|
||||
|
||||
// Load your private key so it can be used by the CookieSigner
|
||||
// To load private key from file use `sign.LoadPEMPrivKeyFile`.
|
||||
privKey, err := LoadPEMPrivKey(examplePEMReader())
|
||||
if err != nil {
|
||||
fmt.Println("failed to load private key", err)
|
||||
return
|
||||
}
|
||||
privKey := mock.RSAPrivateKey
|
||||
|
||||
// Key ID that represents the key pair associated with the private key
|
||||
keyID := "privateKeyID"
|
||||
@@ -104,24 +85,12 @@ func ExampleCookieSigner_SignWithPolicy() {
|
||||
// Output:
|
||||
// Cookies:
|
||||
// CloudFront-Policy: eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL3N1Yi5jbG91ZGZyb250LmNvbSIsIkNvbmRpdGlvbiI6eyJJcEFkZHJlc3MiOnsiQVdTOlNvdXJjZUlwIjoiMTkyLjAuMi4wLzI0In0sIkRhdGVHcmVhdGVyVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxMjU3ODk1ODAwfSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTc2MDB9fX1dfQ__, , , false
|
||||
// CloudFront-Signature: JaWdcbr98colrDAhOpkyxqCZev2IAxURu1RKKo1wS~sI5XdNXWYbZJs2FdpbJ475ZvmhZ1-r4ENUqBXAlRfPfOc21Hm4~24jRmPTO3512D4uuJHrPVxSfgeGuFeigfCGWAqyfYYH1DsFl5JQDpzetsNI3ZhGRkQb8V-oYFanddg_, , , false
|
||||
// CloudFront-Signature: Ixn4bF1LLrLcB8XG-t5bZbIB0vfwSF2s4gkef~PcNBdx73MVvZD3v8DZ5GzcqNrybMiqdYJY5KqK6vTsf5JXDgwFFz-h98wdsbV-izcuonPdzMHp4Ay4qyXM6Ed5jB9dUWYGwMkA6rsWXpftfX8xmk4tG1LwFuJV6nAsx4cfpuKwo4vU2Hyr2-fkA7MZG8AHkpDdVUnjm1q-Re9HdG0nCq-2lnBAdOchBpJt37narOj-Zg6cbx~6rzQLVQd8XIv-Bn7VTc1tkBAJVtGOHb0q~PLzSRmtNGYTnpL0z~gp3tq8lhZc2HuvJW5-tZaYP9yufeIzk5bqsT6DT4iDuclKKw__, , , false
|
||||
// CloudFront-Key-Pair-Id: privateKeyID, , , false
|
||||
}
|
||||
|
||||
func ExampleCookieOptions() {
|
||||
origRandReader := randReader
|
||||
randReader = newRandomReader(rand.New(rand.NewSource(1)))
|
||||
defer func() {
|
||||
randReader = origRandReader
|
||||
}()
|
||||
|
||||
// Load your private key so it can be used by the CookieSigner
|
||||
// To load private key from file use `sign.LoadPEMPrivKeyFile`.
|
||||
privKey, err := LoadPEMPrivKey(examplePEMReader())
|
||||
if err != nil {
|
||||
fmt.Println("failed to load private key", err)
|
||||
return
|
||||
}
|
||||
privKey := mock.RSAPrivateKey
|
||||
|
||||
// Create the CookieSigner with options set. These options can be set
|
||||
// directly with cookieSigner.Opts. These values can be overridden on
|
||||
@@ -151,7 +120,7 @@ func ExampleCookieOptions() {
|
||||
// Output:
|
||||
// Cookies:
|
||||
// CloudFront-Policy: eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxMjU3ODk1ODAwfX19XX0_, /mypath/, .cNameAssociatedWithMyDistribution.com, true
|
||||
// CloudFront-Signature: Yco06vgowwvSYgTSY9XbXpBcTlUlqpyyYXgRhus3nfnC74A7oQ~fMBH0we-rGxvph8ZyHnTxC5ubbPKSzo3EHUm2IcQeEo4p6WCgZZMzCuLlkpeMKhMAkCqX7rmUfkXhTslBHe~ylcmaZqo-hdnOiWrXk2U974ZQbbt5cOjwQG0_, /mypath/, .cNameAssociatedWithMyDistribution.com, true
|
||||
// CloudFront-Signature: DBXEcU6NoyAelecgEcr6mE1IHCqqlHdGwAC2X1dYn0QOLZ8Ar~oehlMub~hEh~UEMijR15ii-yUYf-3ML0b1SwWkh4rTa-SFURWDVuu~vW3cQzRZ4wQrgDR3DGJINrtGtEsDSzA6zdwtZsfvc1W9IRPn9rnVmwDdUurSrcp9M7CdcjkEw9Au~gULX7aUuW87DI5GI7jLo6emmBB1p4V~xAv8rDqOyxdhBzWKDTvl6ErIXnzHitgMclNZrkn-m27BhTQsJOs2R~gT2VrQw-IWX6NMD8r0TDH4DE2HQ8N7jZ0nf8gezbyFk-OhD1P9FUNb1PlwcZWfXtfgHQmM-BmrSQ__, /mypath/, .cNameAssociatedWithMyDistribution.com, true
|
||||
// CloudFront-Key-Pair-Id: keyID, /mypath/, .cNameAssociatedWithMyDistribution.com, true
|
||||
}
|
||||
|
||||
|
||||
+15
-16
@@ -1,11 +1,11 @@
|
||||
package sign
|
||||
|
||||
import (
|
||||
"crypto/rsa"
|
||||
"math/rand"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go/awstesting/mock"
|
||||
)
|
||||
|
||||
var testSignTime = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
|
||||
@@ -20,11 +20,15 @@ var testSignURL = []struct {
|
||||
}{
|
||||
{
|
||||
"http://example.com/a", NewCannedPolicy("http://example.com/a", testSignTime), time.Time{}, true, false,
|
||||
"http://example.com/a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2V4YW1wbGUuY29tL2EiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ__&Signature=Y6qvWOZNl99uNPMGprvrKXEmXpLWJ-xXKVHL~nmF0BR1jPb2XA2jor0MUYKBE4ViTkWZZ1dz46zSFMsEEfw~n6-SVYXZ2QHBBTkSAoxGtH6dH33Ph9pz~f9Wy7aYXq~9I-Ah0E6yC~BMiQuXe5qAOucuMPorKgPfC0dvLMw2EF0_&Key-Pair-Id=KeyID",
|
||||
"http://example.com/a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2V4YW1wbGUuY29tL2EiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ__&Signature=cMutWOvPMOPuh0KFDsOdbML~1fe0eEBC1hdMLGRbYr3mTRrVbKDdUXL6l3vlbE0Og3rTRS6mlaSORTwesN1srESH1pXFUyCVba8tWqNy1frEiL7jZLyzA1KndH0olfJDfgHXdw-Edtk0m8mqY~AnGIYGYDu659dWeP49jVeYn30XF9sYkRCdS5IezAkqh8TO9tTDNGS4Ic6DQue4agHUFLNv1VErTafUxlSBp8hlPCuMdtZLEBLr9UJVc3oWJI3zc1~9JgVTDjbXYV1-HgTn8qQsbAU2KcieUonIzTme2td-7c2FCC0EAbOF~6QXTHWcAiSB5nVmbxn-Mx-QMVsiLw__&Key-Pair-Id=KeyID",
|
||||
},
|
||||
{
|
||||
"https://example.com/a?b=1&c=2", NewCannedPolicy("https://example.com/a?b=1&c=2", testSignTime), time.Time{}, true, false,
|
||||
"https://example.com/a?b=1&c=2&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hP2I9MSZjPTIiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ__&Signature=E6xB7RtIDvx8AxM1Wuup3ROYTQwBDW-qqcrb8lSUvtL78wenjh3P0YLXK-mFK0PSzdNtzI2ZIXja6Nh2yma0IVQiZMjn3wijvVsMy9fRXyusVXB1zYSfiInVr2uhqSb-ZCn1RD32ebyMD6IWn5Kss1fT4wefc8Q76J0Y4jprAvmLCtGnrW~quZdOg~KKmY-qK11ifNwv2ECADBxZeEx1PIDHdWuXYrCBJIwSl-bVscwQWDm2BzeYuHCaLuAVDuc62JJzc7nX3E1CA1VRHY~vegYjOV6zVxtp7aBV4RJUY4yfHNM4n640FXUPPwMacqE-lnNOfx704YVTl4tjzuvzuA__&Key-Pair-Id=KeyID",
|
||||
},
|
||||
{
|
||||
"http://example.com/a", nil, testSignTime, false, false,
|
||||
"http://example.com/a?Expires=1257894000&Signature=Y6qvWOZNl99uNPMGprvrKXEmXpLWJ-xXKVHL~nmF0BR1jPb2XA2jor0MUYKBE4ViTkWZZ1dz46zSFMsEEfw~n6-SVYXZ2QHBBTkSAoxGtH6dH33Ph9pz~f9Wy7aYXq~9I-Ah0E6yC~BMiQuXe5qAOucuMPorKgPfC0dvLMw2EF0_&Key-Pair-Id=KeyID",
|
||||
"http://example.com/a?Expires=1257894000&Signature=cMutWOvPMOPuh0KFDsOdbML~1fe0eEBC1hdMLGRbYr3mTRrVbKDdUXL6l3vlbE0Og3rTRS6mlaSORTwesN1srESH1pXFUyCVba8tWqNy1frEiL7jZLyzA1KndH0olfJDfgHXdw-Edtk0m8mqY~AnGIYGYDu659dWeP49jVeYn30XF9sYkRCdS5IezAkqh8TO9tTDNGS4Ic6DQue4agHUFLNv1VErTafUxlSBp8hlPCuMdtZLEBLr9UJVc3oWJI3zc1~9JgVTDjbXYV1-HgTn8qQsbAU2KcieUonIzTme2td-7c2FCC0EAbOF~6QXTHWcAiSB5nVmbxn-Mx-QMVsiLw__&Key-Pair-Id=KeyID",
|
||||
},
|
||||
{
|
||||
"http://example.com/Ƿ", nil, testSignTime, false, true,
|
||||
@@ -40,27 +44,18 @@ var testSignURL = []struct {
|
||||
},
|
||||
{
|
||||
"rtmp://example.com/a", nil, testSignTime, false, false,
|
||||
"a?Expires=1257894000&Signature=Ds9NbpGwIcDKG1iZDyjfPXp0ZFYSIzfvGzJj-x28XlXfrarHrJbTOQj3bec~aAyb8NAqghBYRdKF9~RdjNrdyxyiequo-SCjFgFHnRNIk0FiqH0fVt2NO63f0X8-Kbur9cPtJoHR9Jzk0I1CQnECqhL6A0OgPhijTfKUITocmzA_&Key-Pair-Id=KeyID",
|
||||
"a?Expires=1257894000&Signature=GIOIWRaT1u5~JyNhyvsbvLfu1eYjmObAHPpV3p7wNL3X-Vts9uj2JPW3bX-xZp4HD~deps5f-GpPkIE7RPq7VCOZMLdckC4V9bvSphmMYP~OVoHwPiRMHgVW8pt9lsODGMAKVcMK-h2WROOxgzwDhfcGJQ~afs~Cz04Cus9tKScLFTNYHbLxpN0VI-vJwOvDW0tavGKxOmLeMDLTgLZSh90MjgESMME8zssks8rXngWxDgV-bLySe1VYHOcC07BMb5RkPaO036gjHJnw5hXhUCug0rkKcSxwU1IsJnGpgTkf7dVo453L2sLeRzK8R-6z9O2Onv6ow-ZoHx7fVw8rww__&Key-Pair-Id=KeyID",
|
||||
},
|
||||
{
|
||||
"rtmp://example.com/a", NewCannedPolicy("a", testSignTime), time.Time{}, true, false,
|
||||
"a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiYSIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI1Nzg5NDAwMH19fV19&Signature=Ds9NbpGwIcDKG1iZDyjfPXp0ZFYSIzfvGzJj-x28XlXfrarHrJbTOQj3bec~aAyb8NAqghBYRdKF9~RdjNrdyxyiequo-SCjFgFHnRNIk0FiqH0fVt2NO63f0X8-Kbur9cPtJoHR9Jzk0I1CQnECqhL6A0OgPhijTfKUITocmzA_&Key-Pair-Id=KeyID",
|
||||
"a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiYSIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI1Nzg5NDAwMH19fV19&Signature=GIOIWRaT1u5~JyNhyvsbvLfu1eYjmObAHPpV3p7wNL3X-Vts9uj2JPW3bX-xZp4HD~deps5f-GpPkIE7RPq7VCOZMLdckC4V9bvSphmMYP~OVoHwPiRMHgVW8pt9lsODGMAKVcMK-h2WROOxgzwDhfcGJQ~afs~Cz04Cus9tKScLFTNYHbLxpN0VI-vJwOvDW0tavGKxOmLeMDLTgLZSh90MjgESMME8zssks8rXngWxDgV-bLySe1VYHOcC07BMb5RkPaO036gjHJnw5hXhUCug0rkKcSxwU1IsJnGpgTkf7dVo453L2sLeRzK8R-6z9O2Onv6ow-ZoHx7fVw8rww__&Key-Pair-Id=KeyID",
|
||||
},
|
||||
}
|
||||
|
||||
// TODO Sign URL HTTP
|
||||
// TODO Sign URL RMTP
|
||||
func TestSignURL(t *testing.T) {
|
||||
origRandReader := randReader
|
||||
randReader = newRandomReader(rand.New(rand.NewSource(1)))
|
||||
defer func() {
|
||||
randReader = origRandReader
|
||||
}()
|
||||
|
||||
privKey, err := rsa.GenerateKey(randReader, 1024)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected priv key error, %#v", err)
|
||||
}
|
||||
privKey := mock.RSAPrivateKey
|
||||
|
||||
s := NewURLSigner("KeyID", privKey)
|
||||
|
||||
@@ -103,6 +98,10 @@ var testBuildSignedURL = []struct {
|
||||
"https://example.com/a?b=1", "KeyID", NewCannedPolicy("", testSignTime), true, []byte("b64Policy"), []byte("b64Sig"),
|
||||
"https://example.com/a?b=1&Policy=b64Policy&Signature=b64Sig&Key-Pair-Id=KeyID",
|
||||
},
|
||||
{
|
||||
"https://example.com/a?b=1&c=2", "KeyID", NewCannedPolicy("", testSignTime), true, []byte("b64Policy"), []byte("b64Sig"),
|
||||
"https://example.com/a?b=1&c=2&Policy=b64Policy&Signature=b64Sig&Key-Pair-Id=KeyID",
|
||||
},
|
||||
{
|
||||
"https://example.com/a", "KeyID", NewCannedPolicy("", testSignTime), true, []byte("b64Policy"), []byte("b64Sig"),
|
||||
"https://example.com/a?Policy=b64Policy&Signature=b64Sig&Key-Pair-Id=KeyID",
|
||||
|
||||
Reference in New Issue
Block a user