2
// goamz - Go packages to interact with the Amazon Web Services.
4
// https://wiki.ubuntu.com/goamz
6
// Copyright (c) 2011 Canonical Ltd.
8
// Written by Gustavo Niemeyer <gustavo.niemeyer@canonical.com>
17
// Region defines the URLs where AWS services may be accessed.
19
// See http://goo.gl/d8BP1 for more details.
21
Name string // the canonical name of this region.
24
S3BucketEndpoint string // Not needed by AWS S3. Use ${bucket} for bucket name.
25
S3LocationConstraint bool // true if this region requires a LocationConstraint declaration.
26
S3LowercaseBucket bool // true if the region requires bucket names to be lower case.
35
"https://ec2.us-east-1.amazonaws.com",
36
"https://s3.amazonaws.com",
40
"https://sdb.amazonaws.com",
41
"https://sns.us-east-1.amazonaws.com",
42
"https://sqs.us-east-1.amazonaws.com",
43
"https://iam.amazonaws.com",
48
"https://ec2.us-west-1.amazonaws.com",
49
"https://s3-us-west-1.amazonaws.com",
53
"https://sdb.us-west-1.amazonaws.com",
54
"https://sns.us-west-1.amazonaws.com",
55
"https://sqs.us-west-1.amazonaws.com",
56
"https://iam.amazonaws.com",
61
"https://ec2.us-west-2.amazonaws.com",
62
"https://s3-us-west-2.amazonaws.com",
66
"https://sdb.us-west-2.amazonaws.com",
67
"https://sns.us-west-2.amazonaws.com",
68
"https://sqs.us-west-2.amazonaws.com",
69
"https://iam.amazonaws.com",
74
"https://ec2.eu-west-1.amazonaws.com",
75
"https://s3-eu-west-1.amazonaws.com",
79
"https://sdb.eu-west-1.amazonaws.com",
80
"https://sns.eu-west-1.amazonaws.com",
81
"https://sqs.eu-west-1.amazonaws.com",
82
"https://iam.amazonaws.com",
85
var APSoutheast = Region{
87
"https://ec2.ap-southeast-1.amazonaws.com",
88
"https://s3-ap-southeast-1.amazonaws.com",
92
"https://sdb.ap-southeast-1.amazonaws.com",
93
"https://sns.ap-southeast-1.amazonaws.com",
94
"https://sqs.ap-southeast-1.amazonaws.com",
95
"https://iam.amazonaws.com",
98
var APSoutheast2 = Region{
100
"https://ec2.ap-southeast-2.amazonaws.com",
101
"https://s3-ap-southeast-2.amazonaws.com",
105
"https://sdb.ap-southeast-2.amazonaws.com",
106
"https://sns.ap-southeast-2.amazonaws.com",
107
"https://sqs.ap-southeast-2.amazonaws.com",
108
"https://iam.amazonaws.com",
111
var APNortheast = Region{
113
"https://ec2.ap-northeast-1.amazonaws.com",
114
"https://s3-ap-northeast-1.amazonaws.com",
118
"https://sdb.ap-northeast-1.amazonaws.com",
119
"https://sns.ap-northeast-1.amazonaws.com",
120
"https://sqs.ap-northeast-1.amazonaws.com",
121
"https://iam.amazonaws.com",
126
"https://ec2.sa-east-1.amazonaws.com",
127
"https://s3-sa-east-1.amazonaws.com",
131
"https://sdb.sa-east-1.amazonaws.com",
132
"https://sns.sa-east-1.amazonaws.com",
133
"https://sqs.sa-east-1.amazonaws.com",
134
"https://iam.amazonaws.com",
137
var Regions = map[string]Region{
138
APNortheast.Name: APNortheast,
139
APSoutheast.Name: APSoutheast,
140
APSoutheast2.Name: APSoutheast2,
144
USWest2.Name: USWest2,
149
AccessKey, SecretKey string
152
var unreserved = make([]bool, 128)
153
var hex = "0123456789ABCDEF"
157
u := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890-_.~"
158
for _, c := range u {
163
// EnvAuth creates an Auth based on environment information.
164
// The AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment
165
// variables are used.
166
func EnvAuth() (auth Auth, err error) {
167
auth.AccessKey = os.Getenv("AWS_ACCESS_KEY_ID")
168
auth.SecretKey = os.Getenv("AWS_SECRET_ACCESS_KEY")
169
if auth.AccessKey == "" {
170
err = errors.New("AWS_ACCESS_KEY_ID not found in environment")
172
if auth.SecretKey == "" {
173
err = errors.New("AWS_SECRET_ACCESS_KEY not found in environment")
178
// Encode takes a string and URI-encodes it in a way suitable
179
// to be used in AWS signatures.
180
func Encode(s string) string {
182
for i := 0; i != len(s); i++ {
184
if c > 127 || !unreserved[c] {
192
e := make([]byte, len(s)*3)
194
for i := 0; i != len(s); i++ {
196
if c > 127 || !unreserved[c] {
206
return string(e[:ei])