52 lines
944 B
Go
52 lines
944 B
Go
package auth
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
)
|
|
|
|
type Token struct {
|
|
Namespace string
|
|
Token string
|
|
}
|
|
|
|
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)
|
|
}
|