30 lines
661 B
Go
30 lines
661 B
Go
package main
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func sealCredential(prefix, plain string) (string, error) {
|
|
if plain == "" || strings.HasPrefix(plain, prefix) {
|
|
return plain, nil
|
|
}
|
|
enc, err := encryptSecret(plain)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return prefix + base64.RawStdEncoding.EncodeToString(enc), nil
|
|
}
|
|
|
|
func openCredential(prefix, stored string) (string, error) {
|
|
if !strings.HasPrefix(stored, prefix) {
|
|
return stored, nil
|
|
}
|
|
raw, err := base64.RawStdEncoding.DecodeString(strings.TrimPrefix(stored, prefix))
|
|
if err != nil {
|
|
return "", fmt.Errorf("decode encrypted credential: %w", err)
|
|
}
|
|
return decryptSecret(raw)
|
|
}
|