package nkeys
import (
"bytes"
"regexp"
"strings"
)
var userConfigRE = regexp .MustCompile (`\s*(?:(?:[-]{3,}.*[-]{3,}\r?\n)([\w\-.=]+)(?:\r?\n[-]{3,}.*[-]{3,}\r?\n))` )
func ParseDecoratedJWT (contents []byte ) (string , error ) {
items := userConfigRE .FindAllSubmatch (contents , -1 )
if len (items ) == 0 {
return string (contents ), nil
}
raw := items [0 ][1 ]
tmp := make ([]byte , len (raw ))
copy (tmp , raw )
return strings .TrimSpace (string (tmp )), nil
}
func ParseDecoratedNKey (contents []byte ) (KeyPair , error ) {
var seed []byte
items := userConfigRE .FindAllSubmatch (contents , -1 )
if len (items ) > 1 {
seed = items [1 ][1 ]
} else {
lines := bytes .Split (contents , []byte ("\n" ))
for _ , line := range lines {
if bytes .HasPrefix (bytes .TrimSpace (line ), []byte ("SO" )) ||
bytes .HasPrefix (bytes .TrimSpace (line ), []byte ("SA" )) ||
bytes .HasPrefix (bytes .TrimSpace (line ), []byte ("SU" )) {
seed = line
break
}
}
}
if seed == nil {
return nil , ErrNoSeedFound
}
if !bytes .HasPrefix (seed , []byte ("SO" )) &&
!bytes .HasPrefix (seed , []byte ("SA" )) &&
!bytes .HasPrefix (seed , []byte ("SU" )) {
return nil , ErrInvalidNkeySeed
}
kp , err := FromSeed (seed )
if err != nil {
return nil , err
}
return kp , nil
}
func ParseDecoratedUserNKey (contents []byte ) (KeyPair , error ) {
nk , err := ParseDecoratedNKey (contents )
if err != nil {
return nil , err
}
seed , err := nk .Seed ()
if err != nil {
return nil , err
}
if !bytes .HasPrefix (seed , []byte ("SU" )) {
return nil , ErrInvalidUserSeed
}
kp , err := FromSeed (seed )
if err != nil {
return nil , err
}
return kp , nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .