From ac2083bdf1cdddc4187a2065f9ec55fd1635e16a Mon Sep 17 00:00:00 2001 From: Rodrigo Maia Date: Thu, 25 May 2023 20:52:38 +0000 Subject: [PATCH 1/2] feat(licenses): show license_expires time as rfc3339 date --- enterprise/cli/licenses.go | 22 ++++++++++++++++++++++ enterprise/cli/licenses_test.go | 8 ++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/enterprise/cli/licenses.go b/enterprise/cli/licenses.go index 37ed74c69a131..b2c601a1f9c2d 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,10 @@ func (r *RootCmd) licensesList() *clibase.Cmd { licenses = make([]codersdk.License, 0) } + for _, license := range licenses { + convertLicenseExpireTime(license) + } + enc := json.NewEncoder(inv.Stdout) enc.SetIndent("", " ") return enc.Encode(licenses) @@ -187,3 +192,20 @@ func (r *RootCmd) licenseDelete() *clibase.Cmd { } return cmd } + +func convertLicenseExpireTime(license codersdk.License) codersdk.License { + if license.Claims["license_expires"] != nil { + value, ok := license.Claims["license_expires"].(json.Number) + if !ok { + return license + } + int64Value, err := value.Int64() + if err != nil { + return license + } + t := time.Unix(int64Value, 0) + rfc3339Format := t.Format(time.RFC3339) + license.Claims["license_expires"] = rfc3339Format + } + return license +} diff --git a/enterprise/cli/licenses_test.go b/enterprise/cli/licenses_test.go index dd07287161708..e9d0d2ee8403f 100644 --- a/enterprise/cli/licenses_test.go +++ b/enterprise/cli/licenses_test.go @@ -158,6 +158,8 @@ 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"]) + assert.Equal(t, "anyvalue", licenses[1].Claims["license_expires"]) // keep value if not a time }) } @@ -294,7 +296,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, @@ -305,7 +308,8 @@ func (s *fakeLicenseAPI) licenses(rw http.ResponseWriter, _ *http.Request) { ID: 5, UploadedAt: time.Now(), Claims: map[string]interface{}{ - "h2": "claim2", + "license_expires": "anyvalue", + "h2": "claim2", "features": map[string]int64{ "f3": 3, "f4": 4, From 31513ee89aaac14d7d2c2a113e7123f30dd55dec Mon Sep 17 00:00:00 2001 From: Rodrigo Maia Date: Fri, 26 May 2023 14:28:00 +0000 Subject: [PATCH 2/2] fix review comments --- enterprise/cli/licenses.go | 35 ++++++++++++++++++++++----------- enterprise/cli/licenses_test.go | 4 +--- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/enterprise/cli/licenses.go b/enterprise/cli/licenses.go index b2c601a1f9c2d..1ed12669ae9b0 100644 --- a/enterprise/cli/licenses.go +++ b/enterprise/cli/licenses.go @@ -155,8 +155,12 @@ func (r *RootCmd) licensesList() *clibase.Cmd { licenses = make([]codersdk.License, 0) } - for _, license := range licenses { - convertLicenseExpireTime(license) + for i, license := range licenses { + newClaims, err := convertLicenseExpireTime(license.Claims) + if err != nil { + return err + } + licenses[i].Claims = newClaims } enc := json.NewEncoder(inv.Stdout) @@ -193,19 +197,28 @@ func (r *RootCmd) licenseDelete() *clibase.Cmd { return cmd } -func convertLicenseExpireTime(license codersdk.License) codersdk.License { - if license.Claims["license_expires"] != nil { - value, ok := license.Claims["license_expires"].(json.Number) +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 license + return licenseClaims, xerrors.Errorf("could not convert license_expires to json.Number") } - int64Value, err := value.Int64() + + licenseExpires, err := licenseExpiresNumber.Int64() if err != nil { - return license + return licenseClaims, xerrors.Errorf("could not convert license_expires to int64: %w", err) } - t := time.Unix(int64Value, 0) + + t := time.Unix(licenseExpires, 0) rfc3339Format := t.Format(time.RFC3339) - license.Claims["license_expires"] = rfc3339Format + + claimsCopy := make(map[string]interface{}, len(licenseClaims)) + for k, v := range licenseClaims { + claimsCopy[k] = v + } + + claimsCopy["license_expires"] = rfc3339Format + return claimsCopy, nil } - return license + return licenseClaims, nil } diff --git a/enterprise/cli/licenses_test.go b/enterprise/cli/licenses_test.go index e9d0d2ee8403f..77d6dd15abd87 100644 --- a/enterprise/cli/licenses_test.go +++ b/enterprise/cli/licenses_test.go @@ -159,7 +159,6 @@ func TestLicensesListFake(t *testing.T) { 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"]) - assert.Equal(t, "anyvalue", licenses[1].Claims["license_expires"]) // keep value if not a time }) } @@ -308,8 +307,7 @@ func (s *fakeLicenseAPI) licenses(rw http.ResponseWriter, _ *http.Request) { ID: 5, UploadedAt: time.Now(), Claims: map[string]interface{}{ - "license_expires": "anyvalue", - "h2": "claim2", + "h2": "claim2", "features": map[string]int64{ "f3": 3, "f4": 4, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy