Skip to content

Commit 48b8304

Browse files
committed
cli/authn: Add options to view OIDC config and properly show RSA public key
Signed-off-by: Aaron Wilson <aawilson@nvidia.com>
1 parent 6825681 commit 48b8304

5 files changed

Lines changed: 64 additions & 4 deletions

File tree

cmd/cli/cli/auth_hdlr.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package cli
77

88
import (
9+
"encoding/json"
910
"errors"
1011
"fmt"
1112
"os"
@@ -40,6 +41,7 @@ const (
4041
flagsAuthRevokeToken = "revoke_token"
4142
flagsAuthRoleShow = "role_show"
4243
flagsAuthConfShow = "conf_show"
44+
flagsAuthOIDCShow = "oidc_show"
4345
)
4446

4547
const authnUnreachable = `AuthN unreachable at %s. You may need to update AIS CLI configuration or environment variable %s`
@@ -53,7 +55,8 @@ var (
5355
flagsAuthRevokeToken: {tokenFileFlag},
5456
flagsAuthUserShow: {nonverboseFlag, verboseFlag},
5557
flagsAuthRoleShow: {nonverboseFlag, verboseFlag, clusterFilterFlag},
56-
flagsAuthConfShow: {jsonFlag},
58+
flagsAuthConfShow: {jsonFlag, noHeaderFlag},
59+
flagsAuthOIDCShow: {jsonFlag, noHeaderFlag},
5760
}
5861

5962
// define separately to allow for aliasing (see alias_hdlr.go)
@@ -88,6 +91,17 @@ var (
8891
Flags: sortFlags(authFlags[flagsAuthConfShow]),
8992
Action: wrapAuthN(showAuthConfigHandler),
9093
},
94+
{
95+
Name: cmdAuthOIDC,
96+
Usage: "Show AuthN OIDC configuration",
97+
Flags: sortFlags(authFlags[flagsAuthOIDCShow]),
98+
Action: wrapAuthN(showAuthOIDCHandler),
99+
},
100+
{
101+
Name: cmdAuthJWKS,
102+
Usage: "Show AuthN public JWKS",
103+
Action: wrapAuthN(showAuthJWKSHandler),
104+
},
91105
},
92106
}
93107

@@ -727,6 +741,37 @@ func showAuthConfigHandler(c *cli.Context) (err error) {
727741
}
728742
}
729743

744+
func showAuthOIDCHandler(c *cli.Context) (err error) {
745+
oidc, err := authn.GetOIDCConfig(authParams)
746+
if err != nil {
747+
return err
748+
}
749+
list := flattenJSON(oidc, "")
750+
usejs := flagIsSet(c, jsonFlag)
751+
switch {
752+
case usejs:
753+
return teb.Print(oidc, teb.PropValTmpl, teb.Jopts(usejs))
754+
case flagIsSet(c, noHeaderFlag):
755+
return teb.Print(list, teb.PropValTmplNoHdr)
756+
default:
757+
return teb.Print(list, teb.PropValTmpl)
758+
}
759+
}
760+
761+
func showAuthJWKSHandler(_ *cli.Context) (err error) {
762+
rawJSON, err := authn.GetJWKS(authParams)
763+
if err != nil {
764+
return err
765+
}
766+
767+
// Decode into a generic map for flattening / table output
768+
var jwks any
769+
if err := json.Unmarshal(*rawJSON, &jwks); err != nil {
770+
return err
771+
}
772+
return teb.Print(jwks, teb.PropValTmpl, teb.Jopts(true))
773+
}
774+
730775
func authNConfigFromArgs(c *cli.Context) (conf *authn.ConfigToUpdate, err error) {
731776
conf = &authn.ConfigToUpdate{Server: &authn.ServerConfToSet{}}
732777
items := c.Args()

cmd/cli/cli/const.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ const (
192192
cmdAuthCluster = cmdCluster
193193
cmdAuthToken = "token"
194194
cmdAuthConfig = cmdConfig
195+
cmdAuthOIDC = "oidc"
196+
cmdAuthJWKS = "jwks"
195197

196198
// K8s subcommans
197199
cmdK8s = "kubectl"

cmd/cli/cli/utils.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040

4141
const (
4242
keyAndValueSeparator = "="
43+
pemKeyIndicator = "-----BEGIN"
4344

4445
// Error messages
4546
dockerErrMsgFmt = "Failed to discover docker proxy URL: %v.\nUsing default %q.\n"
@@ -728,6 +729,14 @@ func flattenBackends(backends []string) (flat nvpairList) {
728729
func _toStr(v any) (s string) {
729730
m, ok := v.(map[string]any)
730731
if !ok {
732+
// handle string pointers
733+
if strPtr, ok := v.(*string); ok {
734+
if strPtr == nil {
735+
return ""
736+
}
737+
val := *strPtr
738+
return val
739+
}
731740
// feature flags: custom formatting
732741
if f, ok := v.(feat.Flags); ok {
733742
if f == 0 {
@@ -865,6 +874,10 @@ func authNConfPairs(conf *authn.Config, prefix string) (nvpairList, error) {
865874
return nil, false
866875
}
867876
v := _toStr(field.Value())
877+
// Format PEM keys with newline before content for better display
878+
if v != "" && strings.Contains(v, pemKeyIndicator) {
879+
v = "\n" + v
880+
}
868881
flat = append(flat, nvpair{Name: tag, Value: v})
869882
return nil, false
870883
}, opts)

cmd/cli/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/NVIDIA/aistore/cmd/cli
33
go 1.25
44

55
require (
6-
github.com/NVIDIA/aistore v1.4.2-0.20251211214833-bb44f2179a0d
6+
github.com/NVIDIA/aistore v1.4.2-0.20251217200016-682568197255
77
github.com/fatih/color v1.18.0
88
github.com/json-iterator/go v1.1.12
99
github.com/onsi/ginkgo/v2 v2.27.3

cmd/cli/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
22
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
33
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
4-
github.com/NVIDIA/aistore v1.4.2-0.20251211214833-bb44f2179a0d h1:zImn644dfrdWckQRrpBfNQXY7jNNNymC+AH66+d7de4=
5-
github.com/NVIDIA/aistore v1.4.2-0.20251211214833-bb44f2179a0d/go.mod h1:kJn4g8Ea4kDhPOSyJz/8/CJx85i4e1BES2RTZ9yEThA=
4+
github.com/NVIDIA/aistore v1.4.2-0.20251217200016-682568197255 h1:gZ1DO2ePmP2iJhqOsdFrh1qzzv3s0ruwRf48vlapgYU=
5+
github.com/NVIDIA/aistore v1.4.2-0.20251217200016-682568197255/go.mod h1:kJn4g8Ea4kDhPOSyJz/8/CJx85i4e1BES2RTZ9yEThA=
66
github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8=
77
github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q=
88
github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=

0 commit comments

Comments
 (0)