@@ -19,6 +19,7 @@ import (
1919type AuthConnectionService interface {
2020 New (ctx context.Context , body kernel.AuthConnectionNewParams , opts ... option.RequestOption ) (res * kernel.ManagedAuth , err error )
2121 Get (ctx context.Context , id string , opts ... option.RequestOption ) (res * kernel.ManagedAuth , err error )
22+ Update (ctx context.Context , id string , body kernel.AuthConnectionUpdateParams , opts ... option.RequestOption ) (res * kernel.ManagedAuth , err error )
2223 List (ctx context.Context , query kernel.AuthConnectionListParams , opts ... option.RequestOption ) (res * pagination.OffsetPagination [kernel.ManagedAuth ], err error )
2324 Delete (ctx context.Context , id string , opts ... option.RequestOption ) (err error )
2425 Login (ctx context.Context , id string , body kernel.AuthConnectionLoginParams , opts ... option.RequestOption ) (res * kernel.LoginResponse , err error )
@@ -53,6 +54,29 @@ type AuthConnectionGetInput struct {
5354 Output string
5455}
5556
57+ type AuthConnectionUpdateInput struct {
58+ ID string
59+ LoginURL string
60+ LoginURLSet bool
61+ AllowedDomains []string
62+ AllowedDomainsSet bool
63+ CredentialName string
64+ CredentialNameSet bool
65+ CredentialProvider string
66+ CredentialProviderSet bool
67+ CredentialPath string
68+ CredentialPathSet bool
69+ CredentialAuto BoolFlag
70+ ProxyID string
71+ ProxyIDSet bool
72+ ProxyName string
73+ ProxyNameSet bool
74+ SaveCredentials BoolFlag
75+ HealthCheckInterval int
76+ HealthCheckIntervalSet bool
77+ Output string
78+ }
79+
5680type AuthConnectionListInput struct {
5781 Domain string
5882 ProfileName string
@@ -77,7 +101,9 @@ type AuthConnectionSubmitInput struct {
77101 ID string
78102 FieldValues map [string ]string
79103 MfaOptionID string
104+ SignInOptionID string
80105 SSOButtonSelector string
106+ SSOProvider string
81107 Output string
82108}
83109
@@ -159,7 +185,11 @@ func (c AuthConnectionCmd) Create(ctx context.Context, in AuthConnectionCreateIn
159185 }
160186
161187 pterm .Success .Printf ("Created managed auth: %s\n " , auth .ID )
188+ printManagedAuthSummary (auth )
189+ return nil
190+ }
162191
192+ func printManagedAuthSummary (auth * kernel.ManagedAuth ) {
163193 tableData := pterm.TableData {
164194 {"Property" , "Value" },
165195 {"ID" , auth .ID },
@@ -177,8 +207,91 @@ func (c AuthConnectionCmd) Create(ctx context.Context, in AuthConnectionCreateIn
177207 if auth .Credential .Provider != "" {
178208 tableData = append (tableData , []string {"Credential Provider" , auth .Credential .Provider })
179209 }
180-
210+ if auth .ProxyID != "" {
211+ tableData = append (tableData , []string {"Proxy ID" , auth .ProxyID })
212+ }
181213 PrintTableNoPad (tableData , true )
214+ }
215+
216+ func (c AuthConnectionCmd ) Update (ctx context.Context , in AuthConnectionUpdateInput ) error {
217+ if in .Output != "" && in .Output != "json" {
218+ return fmt .Errorf ("unsupported --output value: use 'json'" )
219+ }
220+
221+ params := kernel.AuthConnectionUpdateParams {
222+ ManagedAuthUpdateRequest : kernel.ManagedAuthUpdateRequestParam {},
223+ }
224+ hasChanges := false
225+
226+ if in .HealthCheckIntervalSet {
227+ params .ManagedAuthUpdateRequest .HealthCheckInterval = kernel .Opt (int64 (in .HealthCheckInterval ))
228+ hasChanges = true
229+ }
230+ if in .LoginURLSet {
231+ params .ManagedAuthUpdateRequest .LoginURL = kernel .Opt (in .LoginURL )
232+ hasChanges = true
233+ }
234+ if in .SaveCredentials .Set {
235+ params .ManagedAuthUpdateRequest .SaveCredentials = kernel .Opt (in .SaveCredentials .Value )
236+ hasChanges = true
237+ }
238+ if in .AllowedDomainsSet {
239+ params .ManagedAuthUpdateRequest .AllowedDomains = in .AllowedDomains
240+ hasChanges = true
241+ }
242+
243+ credentialChanged := in .CredentialNameSet || in .CredentialProviderSet || in .CredentialPathSet || in .CredentialAuto .Set
244+ if credentialChanged {
245+ if strings .TrimSpace (in .CredentialName ) != "" && strings .TrimSpace (in .CredentialProvider ) != "" {
246+ return fmt .Errorf ("credential reference must use either --credential-name or --credential-provider" )
247+ }
248+ params .ManagedAuthUpdateRequest .Credential = kernel.ManagedAuthUpdateRequestCredentialParam {}
249+ if in .CredentialNameSet {
250+ params .ManagedAuthUpdateRequest .Credential .Name = kernel .Opt (in .CredentialName )
251+ }
252+ if in .CredentialProviderSet {
253+ params .ManagedAuthUpdateRequest .Credential .Provider = kernel .Opt (in .CredentialProvider )
254+ }
255+ if in .CredentialPathSet {
256+ params .ManagedAuthUpdateRequest .Credential .Path = kernel .Opt (in .CredentialPath )
257+ }
258+ if in .CredentialAuto .Set {
259+ params .ManagedAuthUpdateRequest .Credential .Auto = kernel .Opt (in .CredentialAuto .Value )
260+ }
261+ hasChanges = true
262+ }
263+
264+ proxyChanged := in .ProxyIDSet || in .ProxyNameSet
265+ if proxyChanged {
266+ params .ManagedAuthUpdateRequest .Proxy = kernel.ManagedAuthUpdateRequestProxyParam {}
267+ if in .ProxyIDSet {
268+ params .ManagedAuthUpdateRequest .Proxy .ID = kernel .Opt (in .ProxyID )
269+ }
270+ if in .ProxyNameSet {
271+ params .ManagedAuthUpdateRequest .Proxy .Name = kernel .Opt (in .ProxyName )
272+ }
273+ hasChanges = true
274+ }
275+
276+ if ! hasChanges {
277+ return fmt .Errorf ("must provide at least one field to update" )
278+ }
279+
280+ if in .Output != "json" {
281+ pterm .Info .Printf ("Updating managed auth %s...\n " , in .ID )
282+ }
283+
284+ auth , err := c .svc .Update (ctx , in .ID , params )
285+ if err != nil {
286+ return util.CleanedUpSdkError {Err : err }
287+ }
288+
289+ if in .Output == "json" {
290+ return util .PrintPrettyJSON (auth )
291+ }
292+
293+ pterm .Success .Printf ("Updated managed auth: %s\n " , auth .ID )
294+ printManagedAuthSummary (auth )
182295 return nil
183296}
184297
@@ -444,10 +557,21 @@ func (c AuthConnectionCmd) Submit(ctx context.Context, in AuthConnectionSubmitIn
444557 // Validate that we have some input to submit
445558 hasFields := len (in .FieldValues ) > 0
446559 hasMfaOption := in .MfaOptionID != ""
560+ hasSignInOption := in .SignInOptionID != ""
447561 hasSSOButton := in .SSOButtonSelector != ""
562+ hasSSOProvider := in .SSOProvider != ""
563+ submitModes := 0
564+ for _ , active := range []bool {hasFields , hasMfaOption , hasSignInOption , hasSSOButton , hasSSOProvider } {
565+ if active {
566+ submitModes ++
567+ }
568+ }
448569
449- if ! hasFields && ! hasMfaOption && ! hasSSOButton {
450- return fmt .Errorf ("must provide at least one of: --field, --mfa-option-id, or --sso-button-selector" )
570+ if submitModes == 0 {
571+ return fmt .Errorf ("must provide exactly one of: --field, --mfa-option-id, --sign-in-option-id, --sso-button-selector, or --sso-provider" )
572+ }
573+ if submitModes > 1 {
574+ return fmt .Errorf ("provide exactly one of: --field, --mfa-option-id, --sign-in-option-id, --sso-button-selector, or --sso-provider" )
451575 }
452576
453577 // Resolve MFA option: the user may pass the label (e.g. "Get a text"), the
@@ -489,9 +613,15 @@ func (c AuthConnectionCmd) Submit(ctx context.Context, in AuthConnectionSubmitIn
489613 if hasMfaOption {
490614 params .SubmitFieldsRequest .MfaOptionID = kernel .Opt (in .MfaOptionID )
491615 }
616+ if hasSignInOption {
617+ params .SubmitFieldsRequest .SignInOptionID = kernel .Opt (in .SignInOptionID )
618+ }
492619 if hasSSOButton {
493620 params .SubmitFieldsRequest .SSOButtonSelector = kernel .Opt (in .SSOButtonSelector )
494621 }
622+ if hasSSOProvider {
623+ params .SubmitFieldsRequest .SSOProvider = kernel .Opt (in .SSOProvider )
624+ }
495625
496626 if in .Output != "json" {
497627 pterm .Info .Println ("Submitting to managed auth..." )
@@ -594,6 +724,14 @@ var authConnectionsCreateCmd = &cobra.Command{
594724 RunE : runAuthConnectionsCreate ,
595725}
596726
727+ var authConnectionsUpdateCmd = & cobra.Command {
728+ Use : "update <id>" ,
729+ Short : "Update a managed auth connection" ,
730+ Long : "Update managed authentication settings like login URL, health checks, credential source, and proxy." ,
731+ Args : cobra .ExactArgs (1 ),
732+ RunE : runAuthConnectionsUpdate ,
733+ }
734+
597735var authConnectionsGetCmd = & cobra.Command {
598736 Use : "get <id>" ,
599737 Short : "Get a managed auth by ID" ,
@@ -666,10 +804,27 @@ func init() {
666804 authConnectionsCreateCmd .Flags ().Int ("health-check-interval" , 0 , "Interval in seconds between health checks (300-86400)" )
667805 _ = authConnectionsCreateCmd .MarkFlagRequired ("domain" )
668806 _ = authConnectionsCreateCmd .MarkFlagRequired ("profile-name" )
807+ authConnectionsCreateCmd .MarkFlagsMutuallyExclusive ("credential-name" , "credential-provider" )
669808
670809 // Get flags
671810 authConnectionsGetCmd .Flags ().StringP ("output" , "o" , "" , "Output format: json for raw API response" )
672811
812+ // Update flags
813+ authConnectionsUpdateCmd .Flags ().StringP ("output" , "o" , "" , "Output format: json for raw API response" )
814+ authConnectionsUpdateCmd .Flags ().String ("login-url" , "" , "Login page URL (set to empty string to clear)" )
815+ authConnectionsUpdateCmd .Flags ().StringSlice ("allowed-domain" , []string {}, "Additional allowed domains (replaces existing list)" )
816+ authConnectionsUpdateCmd .Flags ().String ("credential-name" , "" , "Kernel credential name to use" )
817+ authConnectionsUpdateCmd .Flags ().String ("credential-provider" , "" , "External credential provider name" )
818+ authConnectionsUpdateCmd .Flags ().String ("credential-path" , "" , "Provider-specific path (e.g., VaultName/ItemName)" )
819+ authConnectionsUpdateCmd .Flags ().Bool ("credential-auto" , false , "Lookup by domain from the specified provider" )
820+ authConnectionsUpdateCmd .Flags ().String ("proxy-id" , "" , "Proxy ID to use" )
821+ authConnectionsUpdateCmd .Flags ().String ("proxy-name" , "" , "Proxy name to use" )
822+ authConnectionsUpdateCmd .Flags ().Bool ("save-credentials" , false , "Enable saving credentials after successful login" )
823+ authConnectionsUpdateCmd .Flags ().Bool ("no-save-credentials" , false , "Disable saving credentials after successful login" )
824+ authConnectionsUpdateCmd .Flags ().Int ("health-check-interval" , 0 , "Interval in seconds between health checks" )
825+ authConnectionsUpdateCmd .MarkFlagsMutuallyExclusive ("credential-name" , "credential-provider" )
826+ authConnectionsUpdateCmd .MarkFlagsMutuallyExclusive ("save-credentials" , "no-save-credentials" )
827+
673828 // List flags
674829 authConnectionsListCmd .Flags ().StringP ("output" , "o" , "" , "Output format: json for raw API response" )
675830 authConnectionsListCmd .Flags ().String ("domain" , "" , "Filter by domain" )
@@ -689,13 +844,16 @@ func init() {
689844 authConnectionsSubmitCmd .Flags ().StringP ("output" , "o" , "" , "Output format: json for raw API response" )
690845 authConnectionsSubmitCmd .Flags ().StringArray ("field" , []string {}, "Field name=value pair (repeatable)" )
691846 authConnectionsSubmitCmd .Flags ().String ("mfa-option-id" , "" , "MFA option ID if user selected an MFA method" )
847+ authConnectionsSubmitCmd .Flags ().String ("sign-in-option-id" , "" , "Sign-in option ID if the flow returned non-MFA choices" )
692848 authConnectionsSubmitCmd .Flags ().String ("sso-button-selector" , "" , "XPath selector if user chose an SSO button" )
849+ authConnectionsSubmitCmd .Flags ().String ("sso-provider" , "" , "SSO provider if user chose an SSO button by provider (e.g. google, github)" )
693850
694851 // Follow flags
695852 authConnectionsFollowCmd .Flags ().StringP ("output" , "o" , "" , "Output format: json for raw API response" )
696853
697854 // Wire up commands
698855 authConnectionsCmd .AddCommand (authConnectionsCreateCmd )
856+ authConnectionsCmd .AddCommand (authConnectionsUpdateCmd )
699857 authConnectionsCmd .AddCommand (authConnectionsGetCmd )
700858 authConnectionsCmd .AddCommand (authConnectionsListCmd )
701859 authConnectionsCmd .AddCommand (authConnectionsDeleteCmd )
@@ -753,6 +911,55 @@ func runAuthConnectionsGet(cmd *cobra.Command, args []string) error {
753911 })
754912}
755913
914+ func runAuthConnectionsUpdate (cmd * cobra.Command , args []string ) error {
915+ client := getKernelClient (cmd )
916+ output , _ := cmd .Flags ().GetString ("output" )
917+ loginURL , _ := cmd .Flags ().GetString ("login-url" )
918+ allowedDomains , _ := cmd .Flags ().GetStringSlice ("allowed-domain" )
919+ credentialName , _ := cmd .Flags ().GetString ("credential-name" )
920+ credentialProvider , _ := cmd .Flags ().GetString ("credential-provider" )
921+ credentialPath , _ := cmd .Flags ().GetString ("credential-path" )
922+ credentialAuto , _ := cmd .Flags ().GetBool ("credential-auto" )
923+ proxyID , _ := cmd .Flags ().GetString ("proxy-id" )
924+ proxyName , _ := cmd .Flags ().GetString ("proxy-name" )
925+ saveCredentials , _ := cmd .Flags ().GetBool ("save-credentials" )
926+ noSaveCredentials , _ := cmd .Flags ().GetBool ("no-save-credentials" )
927+ healthCheckInterval , _ := cmd .Flags ().GetInt ("health-check-interval" )
928+
929+ saveCredentialsFlag := BoolFlag {}
930+ if cmd .Flags ().Changed ("save-credentials" ) {
931+ saveCredentialsFlag = BoolFlag {Set : true , Value : saveCredentials }
932+ }
933+ if cmd .Flags ().Changed ("no-save-credentials" ) {
934+ saveCredentialsFlag = BoolFlag {Set : true , Value : ! noSaveCredentials }
935+ }
936+
937+ svc := client .Auth .Connections
938+ c := AuthConnectionCmd {svc : & svc }
939+ return c .Update (cmd .Context (), AuthConnectionUpdateInput {
940+ ID : args [0 ],
941+ LoginURL : loginURL ,
942+ LoginURLSet : cmd .Flags ().Changed ("login-url" ),
943+ AllowedDomains : allowedDomains ,
944+ AllowedDomainsSet : cmd .Flags ().Changed ("allowed-domain" ),
945+ CredentialName : credentialName ,
946+ CredentialNameSet : cmd .Flags ().Changed ("credential-name" ),
947+ CredentialProvider : credentialProvider ,
948+ CredentialProviderSet : cmd .Flags ().Changed ("credential-provider" ),
949+ CredentialPath : credentialPath ,
950+ CredentialPathSet : cmd .Flags ().Changed ("credential-path" ),
951+ CredentialAuto : BoolFlag {Set : cmd .Flags ().Changed ("credential-auto" ), Value : credentialAuto },
952+ ProxyID : proxyID ,
953+ ProxyIDSet : cmd .Flags ().Changed ("proxy-id" ),
954+ ProxyName : proxyName ,
955+ ProxyNameSet : cmd .Flags ().Changed ("proxy-name" ),
956+ SaveCredentials : saveCredentialsFlag ,
957+ HealthCheckInterval : healthCheckInterval ,
958+ HealthCheckIntervalSet : cmd .Flags ().Changed ("health-check-interval" ),
959+ Output : output ,
960+ })
961+ }
962+
756963func runAuthConnectionsList (cmd * cobra.Command , args []string ) error {
757964 client := getKernelClient (cmd )
758965 output , _ := cmd .Flags ().GetString ("output" )
@@ -805,7 +1012,9 @@ func runAuthConnectionsSubmit(cmd *cobra.Command, args []string) error {
8051012 output , _ := cmd .Flags ().GetString ("output" )
8061013 fieldPairs , _ := cmd .Flags ().GetStringArray ("field" )
8071014 mfaOptionID , _ := cmd .Flags ().GetString ("mfa-option-id" )
1015+ signInOptionID , _ := cmd .Flags ().GetString ("sign-in-option-id" )
8081016 ssoButtonSelector , _ := cmd .Flags ().GetString ("sso-button-selector" )
1017+ ssoProvider , _ := cmd .Flags ().GetString ("sso-provider" )
8091018
8101019 // Parse field pairs into map
8111020 fieldValues := make (map [string ]string )
@@ -823,7 +1032,9 @@ func runAuthConnectionsSubmit(cmd *cobra.Command, args []string) error {
8231032 ID : args [0 ],
8241033 FieldValues : fieldValues ,
8251034 MfaOptionID : mfaOptionID ,
1035+ SignInOptionID : signInOptionID ,
8261036 SSOButtonSelector : ssoButtonSelector ,
1037+ SSOProvider : ssoProvider ,
8271038 Output : output ,
8281039 })
8291040}
0 commit comments