dndex/server/auth/token.go

57 lines
1013 B
Go

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)
}