pk.Option improvement

This commit is contained in:
Tnze
2022-12-06 11:07:19 +08:00
parent 55bf5eddbb
commit ea76e5a713
7 changed files with 77 additions and 40 deletions

View File

@ -1,10 +1,16 @@
package user
import (
"encoding/base64"
"encoding/json"
"encoding/pem"
"errors"
"fmt"
"io"
"net/http"
"time"
pk "github.com/Tnze/go-mc/net/packet"
)
var ServicesURL = "https://api.minecraftservices.com"
@ -21,6 +27,22 @@ type KeyPairResp struct {
RefreshedAfter time.Time `json:"refreshedAfter"`
}
func (k KeyPairResp) WriteTo(w io.Writer) (int64, error) {
block, _ := pem.Decode([]byte(k.KeyPair.PublicKey))
if block == nil {
return 0, errors.New("pem decode error: no data is found")
}
signature, err := base64.StdEncoding.DecodeString(k.PublicKeySignature)
if err != nil {
return 0, err
}
return pk.Tuple{
pk.Long(k.ExpiresAt.UnixMilli()),
pk.ByteArray(block.Bytes),
pk.ByteArray(signature),
}.WriteTo(w)
}
func GetOrFetchKeyPair(accessToken string) (KeyPairResp, error) {
return fetchKeyPair(accessToken) // TODO: cache
}