forked from TrueCloudLab/lego
Add sync.Mutex to lock and unlock j.nonces
This commit is contained in:
parent
63e8e33beb
commit
2569c53efe
1 changed files with 6 additions and 0 deletions
|
@ -8,6 +8,7 @@ import (
|
||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"gopkg.in/square/go-jose.v1"
|
"gopkg.in/square/go-jose.v1"
|
||||||
)
|
)
|
||||||
|
@ -16,6 +17,7 @@ type jws struct {
|
||||||
directoryURL string
|
directoryURL string
|
||||||
privKey crypto.PrivateKey
|
privKey crypto.PrivateKey
|
||||||
nonces []string
|
nonces []string
|
||||||
|
sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func keyAsJWK(key interface{}) *jose.JsonWebKey {
|
func keyAsJWK(key interface{}) *jose.JsonWebKey {
|
||||||
|
@ -75,6 +77,8 @@ func (j *jws) signContent(content []byte) (*jose.JsonWebSignature, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *jws) getNonceFromResponse(resp *http.Response) error {
|
func (j *jws) getNonceFromResponse(resp *http.Response) error {
|
||||||
|
j.Lock()
|
||||||
|
defer j.Unlock()
|
||||||
nonce := resp.Header.Get("Replay-Nonce")
|
nonce := resp.Header.Get("Replay-Nonce")
|
||||||
if nonce == "" {
|
if nonce == "" {
|
||||||
return fmt.Errorf("Server did not respond with a proper nonce header.")
|
return fmt.Errorf("Server did not respond with a proper nonce header.")
|
||||||
|
@ -104,6 +108,8 @@ func (j *jws) Nonce() (string, error) {
|
||||||
if len(j.nonces) == 0 {
|
if len(j.nonces) == 0 {
|
||||||
return "", fmt.Errorf("Can't get nonce")
|
return "", fmt.Errorf("Can't get nonce")
|
||||||
}
|
}
|
||||||
|
j.Lock()
|
||||||
|
defer j.Unlock()
|
||||||
nonce, j.nonces = j.nonces[len(j.nonces)-1], j.nonces[:len(j.nonces)-1]
|
nonce, j.nonces = j.nonces[len(j.nonces)-1], j.nonces[:len(j.nonces)-1]
|
||||||
return nonce, nil
|
return nonce, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue