-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
107 lines (92 loc) · 2.54 KB
/
Copy pathmain.go
File metadata and controls
107 lines (92 loc) · 2.54 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
package main
import (
"flag"
"fmt"
"log"
"os"
"strconv"
"github.com/algorinfo/nodeagent/internal/utils"
"github.com/algorinfo/nodeagent/pkg/security"
)
var (
jwtPrivate = os.Getenv("NA_JWT_PRIV")
jwtPublic = os.Getenv("NA_JWT_PUB")
jwtAlg = utils.Env("NA_JWT_ALG", "ES512")
// RFC 7519 fields
// https://datatracker.ietf.org/doc/html/rfc7519#section-4.1
jwtIssuer = utils.Env("NA_JWT_ISS", "")
jwtAudience = utils.Env("NA_JWT_AUD", "")
jwtDefaultExp = utils.Env("NA_JWT_EXP", "30")
Version = "dev"
Commit = "dev"
)
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
defaultExp, _ := strconv.ParseInt(jwtDefaultExp, 10, 64)
// commands
jwtCmd := flag.NewFlagSet("jwt", flag.ExitOnError)
flagSign := jwtCmd.Bool("sign", false, "sign data")
flagVerify := jwtCmd.String("verify", "", "verify a jwt token")
flagShow := jwtCmd.String("show", "", "decode and print the jwt token")
flagExp := jwtCmd.Int64("exp", defaultExp, "Default expiration time for a token")
flagClaims := make(utils.ArgList)
// Params
// user := jwtCmd.String("user", "nuxion", "User to encode")
jwtCmd.Var(flagClaims, "claim", "add additional claims. may be used more than once")
jwtCmd.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
fmt.Fprintf(os.Stderr, " One of the following flags is required: sign, verify\n")
flag.PrintDefaults()
}
flag.Parse()
switch os.Args[1] {
case "jwt":
err := jwtCmd.Parse(os.Args[2:])
jwtcli := security.JWT{Opts: &security.JWTConfig{
Private: jwtPrivate,
Public: jwtPublic,
Alg: jwtAlg,
Issuer: jwtIssuer,
Audience: jwtAudience,
DefaultExp: *flagExp,
}}
err = jwtcli.Open()
if err != nil {
fmt.Println("Error: ", err)
os.Exit(2)
}
// token := os.Getenv("ACCESS")
if *flagVerify != "" {
_, err = jwtcli.Verify(*flagVerify)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Token ok")
}
} else if *flagSign {
body := make(map[string]interface{})
if len(flagClaims) > 0 {
for k, v := range flagClaims {
body[k] = v
}
}
encoded, err := jwtcli.Sign(body)
if err != nil {
fmt.Println(err)
}
fmt.Println(*encoded)
} else if *flagShow != "" {
decoded, err := jwtcli.Show(*flagShow)
if err != nil {
fmt.Println(err)
}
fmt.Println("Header: ")
utils.PrintJSON(decoded.Header)
fmt.Println("Claims: ")
utils.PrintJSON(decoded.Claims)
} else {
flag.Usage()
fmt.Println("None of the required flags are present. What do you want me to do?")
}
}
}