-
Notifications
You must be signed in to change notification settings - Fork 0
/
factory.go
37 lines (32 loc) · 961 Bytes
/
factory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package store
import (
"fmt"
"net/url"
"strings"
)
func CreateStoreFromUrlOrDie(storeUrl string) Store {
parsedURL, err := url.Parse(strings.ToLower(storeUrl))
if err != nil {
panic(fmt.Errorf("failed to parse store url '%s': %v", storeUrl, err))
}
queries := parsedURL.Query()
switch parsedURL.Scheme {
case "s3":
region := getFirstOrEmpty(queries, "region")
assumeRole := getFirstOrEmpty(queries, "assume_role")
return createS3Store(parsedURL.Host, region, assumeRole)
case "vault":
roleID := getFirstOrEmpty(queries, "role_id")
secretID := getFirstOrEmpty(queries, "secret_id")
vaultPath := parsedURL.Host + parsedURL.Path
return createVaultStoreOrDie(vaultPath, roleID, secretID)
default:
panic(fmt.Errorf("failed to create store '%s': unknown scheme '%s'", storeUrl, parsedURL.Scheme))
}
}
func getFirstOrEmpty(queries url.Values, key string) string {
if len(queries[key]) > 0 {
return queries[key][0]
}
return ""
}