diff options
| author | plutorocks <> | 2026-02-26 21:30:32 +0000 |
|---|---|---|
| committer | plutorocks <> | 2026-02-26 21:30:32 +0000 |
| commit | 3db298ec3eca0ed94cb7912f660df7dd1f4582e0 (patch) | |
| tree | d406e1d64aa10c8027bf4bf4a5914f1378fb495e /tokens.go | |
Diffstat (limited to 'tokens.go')
| -rw-r--r-- | tokens.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/tokens.go b/tokens.go new file mode 100644 index 0000000..9736b9c --- /dev/null +++ b/tokens.go @@ -0,0 +1,59 @@ +// tokens.go +package main + +import ( + "crypto/rand" + "encoding/base64" + "encoding/json" + "os" +) + +type TokenConfig struct { + Token string `json:"token"` // raw token; in real life you want a hash + Name string `json:"name"` // internal name ("jeff", etc.) + Revoked bool `json:"revoked,omitempty"` +} + +func loadTokens(path string) (map[string]*TokenConfig, error) { + f, err := os.Open(path) + if err != nil { + return nil, err + } + defer f.Close() + + var list []TokenConfig + if err := json.NewDecoder(f).Decode(&list); err != nil { + return nil, err + } + + m := make(map[string]*TokenConfig) + for i := range list { + tc := list[i] + m[tc.Token] = &tc + } + return m, nil +} + +func saveTokens(path string, tokens map[string]*TokenConfig) error { + f, err := os.Create(path) + if err != nil { + return err + } + defer f.Close() + + enc := json.NewEncoder(f) + enc.SetIndent("", " ") + var list []TokenConfig + for _, tc := range tokens { + list = append(list, *tc) + } + return enc.Encode(list) +} + +func generateToken() (string, error) { + b := make([]byte, 32) + if _, err := rand.Read(b); err != nil { + return "", err + } + return "brg_" + base64.RawURLEncoding.EncodeToString(b), nil +}
\ No newline at end of file |
