Skip to content

Commit

Permalink
Change logic of revoke tokens call to revoke everything
Browse files Browse the repository at this point in the history
  • Loading branch information
JAORMX committed Sep 15, 2023
1 parent 19afa5d commit 2166962
Show file tree
Hide file tree
Showing 13 changed files with 1,869 additions and 1,883 deletions.
1 change: 1 addition & 0 deletions cmd/cli/app/auth/auth_revoke_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,5 +79,6 @@ var Auth_revokeproviderCmd = &cobra.Command{
func init() {
AuthCmd.AddCommand(Auth_revokeproviderCmd)
Auth_revokeproviderCmd.Flags().StringP("provider", "n", "", "Name for the provider to revoke tokens for")
Auth_revokeproviderCmd.Flags().Int32P("group-id", "g", 0, "ID of the group for repo registration")
Auth_revokeproviderCmd.Flags().BoolP("all", "a", false, "Revoke all tokens")
}
15 changes: 15 additions & 0 deletions database/mock/store.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions database/query/providers.sql
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,8 @@ SELECT * FROM providers WHERE id = $1 AND group_id = $2;
-- name: ListProvidersByGroupID :many
SELECT * FROM providers WHERE group_id = $1;

-- name: GlobalListProviders :many
SELECT * FROM providers;

-- name: DeleteProvider :exec
DELETE FROM providers WHERE id = $1 AND group_id = $2;
8 changes: 1 addition & 7 deletions docs/docs/protodocs/proto.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 25 additions & 23 deletions internal/controlplane/handlers_oauth.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,38 +297,40 @@ func (s *Server) GetProviderAccessToken(ctx context.Context, providerID uuid.UUI
}

// RevokeOauthTokens revokes the all oauth tokens for a provider
// This is in case of a security breach, where we need to revoke all tokens
func (s *Server) RevokeOauthTokens(ctx context.Context, in *pb.RevokeOauthTokensRequest) (*pb.RevokeOauthTokensResponse, error) {

Check warning on line 301 in internal/controlplane/handlers_oauth.go

View workflow job for this annotation

GitHub Actions / golangci-lint / Go Lint

unused-parameter: parameter 'in' seems to be unused, consider removing or renaming it as _ (revive)
provider, err := s.store.GetProviderByName(ctx, db.GetProviderByNameParams{
Name: in.Provider,
GroupID: in.GroupId,
})
providers, err := s.store.GlobalListProviders(ctx)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "provider not supported: %v", in.Provider)
}

// need to read all tokens from the provider and revoke them
tokens, err := s.store.GetAccessTokenByProvider(ctx, provider.ID)
if err != nil {
return nil, status.Errorf(codes.Internal, "error getting access tokens: %v", err)
return nil, status.Errorf(codes.InvalidArgument, "unable to list providers: %v", err)
}

revoked_tokens := 0
for _, token := range tokens {
objToken, err := s.cryptoEngine.DecryptOAuthToken(token.EncryptedToken)
if err != nil {
// just log and continue
log.Error().Msgf("error decrypting token: %v", err)
} else {
// remove token from db
_ = s.store.DeleteAccessToken(ctx, db.DeleteAccessTokenParams{ProviderID: provider.ID, GroupID: token.GroupID})

// remove from provider
err := auth.DeleteAccessToken(ctx, provider.Name, objToken.AccessToken)
for idx := range providers {
provider := providers[idx]
// need to read all tokens from the provider and revoke them
tokens, err := s.store.GetAccessTokenByProvider(ctx, provider.ID)
if err != nil {
return nil, status.Errorf(codes.Internal, "error getting access tokens: %v", err)
}

for _, token := range tokens {
objToken, err := s.cryptoEngine.DecryptOAuthToken(token.EncryptedToken)
if err != nil {
log.Error().Msgf("Error deleting access token: %v", err)
// just log and continue
log.Error().Msgf("error decrypting token: %v", err)
} else {
// remove token from db
_ = s.store.DeleteAccessToken(ctx, db.DeleteAccessTokenParams{ProviderID: provider.ID, GroupID: token.GroupID})

// remove from provider
err := auth.DeleteAccessToken(ctx, provider.Name, objToken.AccessToken)

if err != nil {
log.Error().Msgf("Error deleting access token: %v", err)
}
revoked_tokens++
}
revoked_tokens++
}
}
return &pb.RevokeOauthTokensResponse{RevokedTokens: int32(revoked_tokens)}, nil
Expand Down
5 changes: 1 addition & 4 deletions internal/controlplane/handlers_oauth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,10 +201,7 @@ func TestRevokeOauthTokens_gRPC(t *testing.T) {

server := newDefaultServer(t, mockStore)

res, err := server.RevokeOauthTokens(ctx, &pb.RevokeOauthTokensRequest{
Provider: ghclient.Github,
GroupId: 1,
})
res, err := server.RevokeOauthTokens(ctx, &pb.RevokeOauthTokensRequest{})

assert.NoError(t, err)
assert.NotNil(t, res)
Expand Down
36 changes: 36 additions & 0 deletions internal/db/providers.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/db/querier.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

81 changes: 36 additions & 45 deletions pkg/generated/openapi/mediator/v1/mediator.swagger.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 2166962

Please sign in to comment.