mirror of
https://github.com/go-acme/lego
synced 2026-03-14 22:45:48 +01:00
refactor: expose KID
This commit is contained in:
parent
6a526639c2
commit
ceac79a8f4
3 changed files with 34 additions and 15 deletions
|
|
@ -16,11 +16,10 @@ func (a *AccountService) New(ctx context.Context, req acme.Account) (acme.Extend
|
|||
var account acme.Account
|
||||
|
||||
resp, err := a.core.post(ctx, a.core.GetDirectory().NewAccountURL, req, &account)
|
||||
|
||||
location := getLocation(resp)
|
||||
|
||||
if location != "" {
|
||||
a.core.jws.SetKid(location)
|
||||
}
|
||||
a.core.setKid(location)
|
||||
|
||||
if err != nil {
|
||||
return acme.ExtendedAccount{Location: location}, err
|
||||
|
|
|
|||
|
|
@ -22,9 +22,12 @@ import (
|
|||
type Core struct {
|
||||
doer *sender.Doer
|
||||
nonceManager *nonces.Manager
|
||||
jws *secure.JWS
|
||||
directory acme.Directory
|
||||
HTTPClient *http.Client
|
||||
|
||||
HTTPClient *http.Client
|
||||
|
||||
privateKey crypto.PrivateKey
|
||||
kid string
|
||||
|
||||
common service // Reuse a single struct instead of allocating one for each service on the heap.
|
||||
Accounts *AccountService
|
||||
|
|
@ -46,9 +49,16 @@ func New(httpClient *http.Client, userAgent, caDirURL, kid string, privateKey cr
|
|||
|
||||
nonceManager := nonces.NewManager(doer, dir.NewNonceURL)
|
||||
|
||||
jws := secure.NewJWS(privateKey, kid, nonceManager)
|
||||
c := &Core{
|
||||
doer: doer,
|
||||
nonceManager: nonceManager,
|
||||
directory: dir,
|
||||
|
||||
c := &Core{doer: doer, nonceManager: nonceManager, jws: jws, directory: dir, HTTPClient: httpClient}
|
||||
privateKey: privateKey,
|
||||
kid: kid,
|
||||
|
||||
HTTPClient: httpClient,
|
||||
}
|
||||
|
||||
c.common.core = c
|
||||
c.Accounts = (*AccountService)(&c.common)
|
||||
|
|
@ -60,6 +70,21 @@ func New(httpClient *http.Client, userAgent, caDirURL, kid string, privateKey cr
|
|||
return c, nil
|
||||
}
|
||||
|
||||
func (a *Core) jws() *secure.JWS {
|
||||
return secure.NewJWS(a.privateKey, a.kid, a.nonceManager)
|
||||
}
|
||||
|
||||
// setKid Sets the key identifier (account URI).
|
||||
func (a *Core) setKid(kid string) {
|
||||
if kid != "" {
|
||||
a.kid = kid
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Core) GetKid() string {
|
||||
return a.kid
|
||||
}
|
||||
|
||||
// post performs an HTTP POST request and parses the response body as JSON,
|
||||
// into the provided respBody object.
|
||||
func (a *Core) post(ctx context.Context, uri string, reqBody, response any) (*http.Response, error) {
|
||||
|
|
@ -109,7 +134,7 @@ func (a *Core) retrievablePost(ctx context.Context, uri string, content []byte,
|
|||
}
|
||||
|
||||
func (a *Core) signedPost(ctx context.Context, uri string, content []byte, response any) (*http.Response, error) {
|
||||
signedContent, err := a.jws.SignContent(ctx, uri, content)
|
||||
signedContent, err := a.jws().SignContent(ctx, uri, content)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to post JWS message: failed to sign content: %w", err)
|
||||
}
|
||||
|
|
@ -128,7 +153,7 @@ func (a *Core) signedPost(ctx context.Context, uri string, content []byte, respo
|
|||
}
|
||||
|
||||
func (a *Core) signEABContent(newAccountURL, kid string, hmac []byte) ([]byte, error) {
|
||||
eabJWS, err := a.jws.SignEABContent(newAccountURL, kid, hmac)
|
||||
eabJWS, err := a.jws().SignEABContent(newAccountURL, kid, hmac)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -138,7 +163,7 @@ func (a *Core) signEABContent(newAccountURL, kid string, hmac []byte) ([]byte, e
|
|||
|
||||
// GetKeyAuthorization Gets the key authorization.
|
||||
func (a *Core) GetKeyAuthorization(token string) (string, error) {
|
||||
return a.jws.GetKeyAuthorization(token)
|
||||
return a.jws().GetKeyAuthorization(token)
|
||||
}
|
||||
|
||||
func (a *Core) GetDirectory() acme.Directory {
|
||||
|
|
|
|||
|
|
@ -29,11 +29,6 @@ func NewJWS(privateKey crypto.PrivateKey, kid string, nonceManager *nonces.Manag
|
|||
}
|
||||
}
|
||||
|
||||
// SetKid Sets a key identifier.
|
||||
func (j *JWS) SetKid(kid string) {
|
||||
j.kid = kid
|
||||
}
|
||||
|
||||
// SignContent Signs a content with the JWS.
|
||||
func (j *JWS) SignContent(ctx context.Context, url string, content []byte) (*jose.JSONWebSignature, error) {
|
||||
var alg jose.SignatureAlgorithm
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue