-
Notifications
You must be signed in to change notification settings - Fork 7
/
main.go
94 lines (80 loc) 路 2.52 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
package main
import (
"log"
"os"
"bufio"
"strings"
"github.com/decentraland/world/internal/cli"
"github.com/decentraland/world/internal/commons/config"
)
type rootConfig struct {
IdentityURL string `overwrite-flag:"authURL" validate:"required"`
ProfileURL string `overwrite-flag:"profileURL" validate:"required"`
Auth0 struct {
Domain string `overwrite-flag:"auth0Domain" validate:"required"`
}
Cli struct {
Store bool `overwrite-flag:"store"`
Retrieve bool `overwrite-flag:"retrieve"`
Auth0ClientID string `overwrite-flag:"auth0ClientID" validate:"required"`
Auth0Audience string `overwrite-flag:"auth0Audience" validate:"required"`
Auth0ClientSecret string `overwrite-flag:"auth0ClientSecret" validate:"required"`
Email string `overwrite-flag:"email" validate:"required"`
Password string `overwrite-flag:"password" validate:"required"`
KeyPath string `overwrite-flag:"keyPath" validate:"required"`
}
}
func main() {
var conf rootConfig
if err := config.ReadConfiguration("config/config", &conf); err != nil {
log.Fatal(err)
}
if conf.Cli.Store == conf.Cli.Retrieve {
log.Fatal("please specify --store or --retrieve")
}
ephemeralKey, err := cli.ReadEphemeralKeyFromFile(conf.Cli.KeyPath)
if err != nil {
log.Fatalf("error loading ephemeral key: %v", err)
}
auth0 := cli.Auth0{
Domain: conf.Auth0.Domain,
ClientID: conf.Cli.Auth0ClientID,
ClientSecret: conf.Cli.Auth0ClientSecret,
Audience: conf.Cli.Auth0Audience,
Email: conf.Cli.Email,
Password: conf.Cli.Password,
}
auth := cli.Auth{
IdentityURL: conf.IdentityURL,
PubKey: cli.EncodePublicKey(ephemeralKey),
}
accessToken, err := cli.ExecuteAuthFlow(&auth0, &auth)
if err != nil {
log.Fatalf("auth failure: %v", err)
}
client := cli.ProfileClient{
ProfileURL: conf.ProfileURL,
EphemeralKey: ephemeralKey,
}
if conf.Cli.Retrieve {
profile, err := client.RetrieveProfile(accessToken)
if err != nil {
log.Fatalf("error retrieving profile: %v", err)
}
log.Println(profile)
} else {
builder := strings.Builder{}
reader := bufio.NewReader(os.Stdin)
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
builder.WriteString(scanner.Text())
}
if err = scanner.Err(); err != nil {
log.Fatalf("error reading from stdin: %v", err)
}
profile := strings.NewReader(builder.String())
if err = client.StoreProfile(accessToken, profile); err != nil {
log.Fatalf("error storing profile: %v", err)
}
}
}