package auth import ( "encoding/base64" "encoding/json" ) type Token struct { Namespace string ID string } func (t Token) String() string { s, _ := t.Obfuscate() return s } func (t Token) Obfuscate() (string, error) { b, err := json.Marshal(t) if err != nil { return "", err } obfuscated := base64.StdEncoding.EncodeToString(b) return obfuscated, nil } func (t Token) Encode(key string) (string, error) { obfuscated, err := t.Obfuscate() if err != nil { return "", err } encoded, err := encrypt(key, obfuscated) if err != nil { return "", err } return encoded, nil } func (t *Token) Deobfuscate(obfuscated string) error { marshalled, err := base64.StdEncoding.DecodeString(obfuscated) if err != nil { return err } if err := json.Unmarshal([]byte(marshalled), t); err != nil { return err } return nil } func (t *Token) Decode(key, encoded string) error { obfuscated, err := decrypt(key, encoded) if err != nil { return err } return t.Deobfuscate(obfuscated) }