diff --git a/enterprise/cli/licenses.go b/enterprise/cli/licenses.go index 37ed74c69a131..1ed12669ae9b0 100644 --- a/enterprise/cli/licenses.go +++ b/enterprise/cli/licenses.go @@ -8,6 +8,7 @@ import ( "regexp" "strconv" "strings" + "time" "golang.org/x/xerrors" @@ -154,6 +155,14 @@ func (r *RootCmd) licensesList() *clibase.Cmd { licenses = make([]codersdk.License, 0) } + for i, license := range licenses { + newClaims, err := convertLicenseExpireTime(license.Claims) + if err != nil { + return err + } + licenses[i].Claims = newClaims + } + enc := json.NewEncoder(inv.Stdout) enc.SetIndent("", " ") return enc.Encode(licenses) @@ -187,3 +196,29 @@ func (r *RootCmd) licenseDelete() *clibase.Cmd { } return cmd } + +func convertLicenseExpireTime(licenseClaims map[string]interface{}) (map[string]interface{}, error) { + if licenseClaims["license_expires"] != nil { + licenseExpiresNumber, ok := licenseClaims["license_expires"].(json.Number) + if !ok { + return licenseClaims, xerrors.Errorf("could not convert license_expires to json.Number") + } + + licenseExpires, err := licenseExpiresNumber.Int64() + if err != nil { + return licenseClaims, xerrors.Errorf("could not convert license_expires to int64: %w", err) + } + + t := time.Unix(licenseExpires, 0) + rfc3339Format := t.Format(time.RFC3339) + + claimsCopy := make(map[string]interface{}, len(licenseClaims)) + for k, v := range licenseClaims { + claimsCopy[k] = v + } + + claimsCopy["license_expires"] = rfc3339Format + return claimsCopy, nil + } + return licenseClaims, nil +} diff --git a/enterprise/cli/licenses_test.go b/enterprise/cli/licenses_test.go index dd07287161708..77d6dd15abd87 100644 --- a/enterprise/cli/licenses_test.go +++ b/enterprise/cli/licenses_test.go @@ -158,6 +158,7 @@ func TestLicensesListFake(t *testing.T) { assert.Equal(t, "claim1", licenses[0].Claims["h1"]) assert.Equal(t, int32(5), licenses[1].ID) assert.Equal(t, "claim2", licenses[1].Claims["h2"]) + assert.Equal(t, "2024-04-06T16:53:35Z", licenses[0].Claims["license_expires"]) }) } @@ -294,7 +295,8 @@ func (s *fakeLicenseAPI) licenses(rw http.ResponseWriter, _ *http.Request) { ID: 1, UploadedAt: time.Now(), Claims: map[string]interface{}{ - "h1": "claim1", + "license_expires": 1712422415, + "h1": "claim1", "features": map[string]int64{ "f1": 1, "f2": 2,
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: