Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

APP-7001: Add UpdateOauthApp CLI command #4641

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

gloriacai01
Copy link
Member

@gloriacai01 gloriacai01 commented Dec 18, 2024

Ticket here

@viambot viambot added the safe to test This pull request is marked safe to test from a trusted zone label Dec 18, 2024
@viambot viambot added safe to test This pull request is marked safe to test from a trusted zone and removed safe to test This pull request is marked safe to test from a trusted zone labels Dec 18, 2024
@gloriacai01 gloriacai01 requested a review from a team as a code owner December 18, 2024 22:03
@viambot viambot added safe to test This pull request is marked safe to test from a trusted zone and removed safe to test This pull request is marked safe to test from a trusted zone labels Dec 18, 2024
@viambot viambot added safe to test This pull request is marked safe to test from a trusted zone and removed safe to test This pull request is marked safe to test from a trusted zone labels Dec 19, 2024
@viambot viambot added safe to test This pull request is marked safe to test from a trusted zone and removed safe to test This pull request is marked safe to test from a trusted zone labels Dec 19, 2024
@viambot viambot added safe to test This pull request is marked safe to test from a trusted zone and removed safe to test This pull request is marked safe to test from a trusted zone labels Dec 19, 2024
cli/app.go Outdated
Comment on lines 128 to 129
authApplicationFlagName = "application-name"
authApplicationFlagApplicationID = "application-id"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a comment above these that they will be deprecated once https://viam.atlassian.net/browse/APP-6993 is complete. IDK what the standard is for adding comments in a public repo of ours, will defer to someone on the SDK/Netcode team for a decision here

cli/app.go Outdated
Comment on lines 133 to 134
authApplicationFlagClientID = "client-id"
authApplicationFlagClientName = "client-name"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
authApplicationFlagClientID = "client-id"
authApplicationFlagClientName = "client-name"
authApplicationFlagOAuthApplicationClientID = "client-id"
authApplicationFlagOAuthApplicationClientName = "client-name"

cli/app.go Outdated
&cli.StringFlag{
Name: generalFlagOrgID,
Required: true,
Usage: "organization ID that is tied to the oauth application",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Usage: "organization ID that is tied to the oauth application",
Usage: "organization ID that is tied to the OAuth application",

ClientAuthentication string
Pkce string
LogoutURI string
UrlValidation string //nolint:revive,stylecheck
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@stuqdog is this ok? linter wants it to be URLValidation, but parseStructFromCtx doesn't seem to recognize that the passed in flag in the cli is associated with this field when its URLValidation, so I have the field named as UrlValidation

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ooh yeah, that's a bit of a gotcha. I think what you did is correct, but thanks for flagging it! I'll file a ticket to revisit our struct parsing logic to see how we can avoid that in the future.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -8,6 +8,7 @@ import (
"strings"

"github.com/urfave/cli/v2"
apppb "go.viam.com/api/app/v1"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Look into why we are adding this dependency now (I would think this would have existed already and adding it is a mistake).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Triple check to confirm the dependency on API is okay -- even though inherently this stuff is "dependent" on the API I feel like this is a red herring.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Starting to see that this may be okay - it is imported already in this package (only in a different file) - the real question becomes whether we want to hardcode the string values that we import here instead of importing them - to maybe check against breaking changes in our API ... ? Again - deferring to someone who owns this code path

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see an actual issue with this, but it is a bit jarring to see a proto being imported here

pkceEnum, ok := apppb.PKCE_value[pkcePrefix+strings.ToUpper(pkce)]
if !ok {
return nil, errors.Errorf("%s must be a valid PKCE, got %s. "+
"See `viam organizations auth-service oauth-app update --help` for supported options",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@@ -1001,3 +1001,31 @@ func TestShellFileCopy(t *testing.T) {
})
})
}

func TestUpdateOAuthAppAction(t *testing.T) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add cases which check that passing in bad values to each of these will result in a specific error message

Copy link
Member

@maxhorowitz maxhorowitz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Waiting on a second set of eyes for some of the qs / comments I've left on the PR. Content-wise, everything is okay to me. Some nits / renaming suggestions, a comment about adding test case coverage, and a question about importing go.viam.com/api/app/v1

@viambot viambot added safe to test This pull request is marked safe to test from a trusted zone and removed safe to test This pull request is marked safe to test from a trusted zone labels Dec 20, 2024
Copy link
Member

@purplenicole730 purplenicole730 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of converting the enums manually each time, it would be more readable to make a shadow type of each enum with a ToProto() function that you can use in the function.

&cli.StringFlag{
Name: oauthAppFlagClientAuthentication,
Usage: "updated client authentication policy for the OAuth application. can be one of " +
allEnumValues(clientAuthenticationPrefix, apppb.ClientAuthentication_value),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide an example of what this would look like in the description so we know what these values mean and look like. This applies to all the other flags that also have a similar setup.

@@ -8,6 +8,7 @@ import (
"strings"

"github.com/urfave/cli/v2"
apppb "go.viam.com/api/app/v1"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see an actual issue with this, but it is a bit jarring to see a proto being imported here

Comment on lines +2068 to +2084
const (
clientAuthenticationPrefix = "CLIENT_AUTHENTICATION_"
pkcePrefix = "PKCE_"
urlValidationPrefix = "URL_VALIDATION_"
enabledGrantPrefix = "ENABLED_GRANT_"
)

// allEnumValues returns the possible values we accept for a given proto enum.
func allEnumValues(prefixToTrim string, enumValueMap map[string]int32) string {
var formattedValues []string
for values := range enumValueMap {
formattedValue := strings.ToLower(strings.TrimPrefix(values, prefixToTrim))
formattedValues = append(formattedValues, formattedValue)
}
slices.Sort(formattedValues)
return "[" + strings.Join(formattedValues, ", ") + "]"
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this point, I'd just make shadow types to wrap around the proto enum types. You can look at the clients in rdk/app/ folder to see examples. (i.e. app.Visibility).

Comment on lines +2127 to +2132
clientAuthenticationEnum, ok := apppb.ClientAuthentication_value[clientAuthenticationPrefix+strings.ToUpper(clientAuthentication)]
if !ok {
return nil, errors.Errorf("--%s must be a valid ClientAuthentication, got %s. "+
"See `viam organizations auth-service oauth-app update --help` for supported options",
oauthAppFlagClientAuthentication, clientAuthentication)
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to what my above comment, I would just use a shadow type with toProto functions. This applies to all of the enums.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
safe to test This pull request is marked safe to test from a trusted zone
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants