go-mockid/mockid/api/common.go

71 行
1.4 KiB
Go

package api
import (
"bytes"
"crypto/sha256"
"encoding/binary"
"encoding/json"
"errors"
"io"
"log"
"math/rand"
2020-08-02 08:16:28 +00:00
mathrand "math/rand"
"net/http"
2020-08-02 08:16:28 +00:00
2020-09-16 22:32:46 +00:00
"git.coolaj86.com/coolaj86/go-mockid/xkeypairs"
)
2020-08-05 08:13:32 +00:00
/*
2020-09-16 22:32:46 +00:00
func getJWS(r *http.Request) (*xkeypairs.KeyOptions, error) {
2020-08-05 08:13:32 +00:00
}
*/
2020-09-16 22:32:46 +00:00
func getOpts(r *http.Request) (*xkeypairs.KeyOptions, error) {
tok := make(map[string]interface{})
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&tok)
if nil != err && io.EOF != err {
log.Printf("json decode error: %s", err)
return nil, errors.New("Bad Request: invalid json body")
}
defer r.Body.Close()
var seed int64
seedStr, _ := tok["seed"].(string)
if "" != seedStr {
if len(seedStr) > 256 {
return nil, errors.New("Bad Request: base64 seed should be <256 characters (and is truncated to 64-bits anyway)")
}
b := sha256.Sum256([]byte(seedStr))
seed, _ = binary.ReadVarint(bytes.NewReader(b[0:8]))
}
key, _ := tok["key"].(string)
2020-09-16 22:32:46 +00:00
opts := &xkeypairs.KeyOptions{
2020-08-02 08:16:28 +00:00
Seed: seed,
Key: key,
2020-08-02 08:16:28 +00:00
}
2020-09-16 22:32:46 +00:00
opts.Claims, _ = tok["claims"].(xkeypairs.Object)
opts.Header, _ = tok["header"].(xkeypairs.Object)
2020-08-04 07:09:43 +00:00
2020-08-02 00:11:50 +00:00
var n int
if 0 != seed {
2020-09-16 22:32:46 +00:00
n = opts.MyFooNextReader().(*mathrand.Rand).Intn(2)
2020-08-02 00:11:50 +00:00
} else {
n = rand.Intn(2)
}
2020-08-02 08:16:28 +00:00
opts.KeyType, _ = tok["kty"].(string)
if "" == opts.KeyType {
2020-08-02 00:11:50 +00:00
if 0 == n {
2020-08-02 08:16:28 +00:00
opts.KeyType = "RSA"
} else {
2020-08-02 08:16:28 +00:00
opts.KeyType = "EC"
}
}
2020-08-02 08:16:28 +00:00
return opts, nil
}