mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-20 12:04:23 +08:00
skip license validation on timeout error
This commit is contained in:
parent
7820d64f77
commit
8a0f96fe9c
1 changed files with 15 additions and 12 deletions
|
@ -97,11 +97,14 @@ func ValidateLicense() (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
validationResponse, err := validateLicenseKey(encryptedData, tempPubKey)
|
validationResponse, timedOut, err := validateLicenseKey(encryptedData, tempPubKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("failed to validate license key: %w", err)
|
err = fmt.Errorf("failed to validate license key: %w", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if timedOut {
|
||||||
|
return
|
||||||
|
}
|
||||||
if len(validationResponse) == 0 {
|
if len(validationResponse) == 0 {
|
||||||
err = errors.New("empty validation response")
|
err = errors.New("empty validation response")
|
||||||
return err
|
return err
|
||||||
|
@ -185,12 +188,11 @@ func getLicensePublicKey(licensePubKeyEncoded string) (*[32]byte, error) {
|
||||||
return ncutils.ConvertBytesToKey(decodedPubKey)
|
return ncutils.ConvertBytesToKey(decodedPubKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, error) {
|
func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, bool, error) {
|
||||||
publicKeyBytes, err := ncutils.ConvertKeyToBytes(publicKey)
|
publicKeyBytes, err := ncutils.ConvertKeyToBytes(publicKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := ValidateLicenseRequest{
|
msg := ValidateLicenseRequest{
|
||||||
LicenseKey: servercfg.GetLicenseKey(),
|
LicenseKey: servercfg.GetLicenseKey(),
|
||||||
NmServerPubKey: base64encode(publicKeyBytes),
|
NmServerPubKey: base64encode(publicKeyBytes),
|
||||||
|
@ -199,7 +201,7 @@ func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, erro
|
||||||
|
|
||||||
requestBody, err := json.Marshal(msg)
|
requestBody, err := json.Marshal(msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := http.NewRequest(
|
req, err := http.NewRequest(
|
||||||
|
@ -208,7 +210,7 @@ func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, erro
|
||||||
bytes.NewReader(requestBody),
|
bytes.NewReader(requestBody),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
req.Header.Add("Content-Type", "application/json")
|
req.Header.Add("Content-Type", "application/json")
|
||||||
req.Header.Add("Accept", "application/json")
|
req.Header.Add("Accept", "application/json")
|
||||||
|
@ -216,7 +218,8 @@ func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, erro
|
||||||
validateResponse, err := client.Do(req)
|
validateResponse, err := client.Do(req)
|
||||||
if err != nil { // check cache
|
if err != nil { // check cache
|
||||||
slog.Warn("proceeding with cached response, Netmaker API may be down")
|
slog.Warn("proceeding with cached response, Netmaker API may be down")
|
||||||
return getCachedResponse()
|
cachedResp, err := getCachedResponse()
|
||||||
|
return cachedResp, false, err
|
||||||
}
|
}
|
||||||
defer validateResponse.Body.Close()
|
defer validateResponse.Body.Close()
|
||||||
code := validateResponse.StatusCode
|
code := validateResponse.StatusCode
|
||||||
|
@ -226,12 +229,12 @@ func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, erro
|
||||||
body, err := io.ReadAll(validateResponse.Body)
|
body, err := io.ReadAll(validateResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Warn("failed to parse response", "error", err)
|
slog.Warn("failed to parse response", "error", err)
|
||||||
return nil, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
if err := cacheResponse(body); err != nil {
|
if err := cacheResponse(body); err != nil {
|
||||||
slog.Warn("failed to cache response", "error", err)
|
slog.Warn("failed to cache response", "error", err)
|
||||||
}
|
}
|
||||||
return body, nil
|
return body, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// at this point the backend returned some undesired state
|
// at this point the backend returned some undesired state
|
||||||
|
@ -244,12 +247,12 @@ func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, erro
|
||||||
|
|
||||||
// try to use cache if we had a temporary error
|
// try to use cache if we had a temporary error
|
||||||
if code == http.StatusServiceUnavailable || code == http.StatusGatewayTimeout {
|
if code == http.StatusServiceUnavailable || code == http.StatusGatewayTimeout {
|
||||||
slog.Warn("proceeding with cached response, Netmaker API may be down")
|
slog.Warn("Netmaker API may be down, will retry later...", "code", code)
|
||||||
return getCachedResponse()
|
return nil, true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// at this point the error is irreversible, return it
|
// at this point the error is irreversible, return it
|
||||||
return nil, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAccountsHost() string {
|
func getAccountsHost() string {
|
||||||
|
|
Loading…
Add table
Reference in a new issue