forked from kelseyhightower/confd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
95 lines (90 loc) · 2.29 KB
/
main.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"fmt"
"log"
"net/http"
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/private/protocol/json/jsonutil"
"github.com/aws/aws-sdk-go/service/ssm"
)
var db map[string]string
func handler(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" || r.Header.Get("Authorization") == "" {
log.Println("Unauthorized request")
return
}
switch t := r.Header.Get("X-Amz-Target"); t {
case "AmazonSSM.PutParameter":
defer r.Body.Close()
var b ssm.PutParameterInput
err := jsonutil.UnmarshalJSON(&b, r.Body)
if err != nil {
panic(err)
}
log.Printf("Body=%#v\n", b)
log.Printf("DB: Setting key=%s value=%s", *b.Name, *b.Value)
db[*b.Name] = *b.Value
return
case "AmazonSSM.GetParametersByPath":
defer r.Body.Close()
var b ssm.GetParametersByPathInput
err := jsonutil.UnmarshalJSON(&b, r.Body)
if err != nil {
panic(err)
}
log.Printf("Body=%#v\n", b)
var GetParametersByPathOutput ssm.GetParametersByPathOutput
parameters := make([]*ssm.Parameter, 0, 0)
path := b.Path
for k, v := range db {
if strings.HasPrefix(k, *path+"/") == false {
continue
}
log.Printf("DB: Getting key=%s", k)
parameters = append(parameters, &ssm.Parameter{
Name: aws.String(k),
Type: aws.String("String"),
Value: aws.String(v),
})
}
GetParametersByPathOutput.SetParameters(parameters)
resp, err := jsonutil.BuildJSON(GetParametersByPathOutput)
if err != nil {
panic(err)
}
fmt.Fprint(w, string(resp))
return
case "AmazonSSM.GetParameter":
defer r.Body.Close()
var b ssm.GetParameterInput
err := jsonutil.UnmarshalJSON(&b, r.Body)
if err != nil {
panic(err)
}
log.Printf("Body=%#v\n", b)
var GetParameterOutput ssm.GetParameterOutput
log.Printf("DB: Getting key=%s", *b.Name)
parameter := &ssm.Parameter{
Name: aws.String(*b.Name),
Type: aws.String("String"),
Value: aws.String(db[*b.Name]),
}
GetParameterOutput.SetParameter(parameter)
resp, err := jsonutil.BuildJSON(GetParameterOutput)
if err != nil {
panic(err)
}
fmt.Fprint(w, string(resp))
return
default:
log.Println("Unknown target")
return
}
}
func main() {
db = make(map[string]string)
http.HandleFunc("/", handler)
log.Println("Starting AWS SSM HTTP mocking server")
http.ListenAndServe(":8001", nil)
}