(ctx context.Context, req *adminv1.RevokeUserAuthTokenRequest)
| 308 | } |
| 309 | |
| 310 | func (s *Server) RevokeUserAuthToken(ctx context.Context, req *adminv1.RevokeUserAuthTokenRequest) (*adminv1.RevokeUserAuthTokenResponse, error) { |
| 311 | observability.AddRequestAttributes(ctx, |
| 312 | attribute.String("args.token_id", req.TokenId), |
| 313 | ) |
| 314 | |
| 315 | var tokenID string |
| 316 | if req.TokenId == "current" { // Special alias for the current token |
| 317 | if auth.GetClaims(ctx).OwnerType() != auth.OwnerTypeUser { |
| 318 | return nil, status.Error(codes.PermissionDenied, "not authenticated with a user token") |
| 319 | } |
| 320 | tokenID = auth.GetClaims(ctx).AuthTokenID() |
| 321 | } else { |
| 322 | token, err := s.findUserAuthTokenFuzzy(ctx, req.TokenId) |
| 323 | if err != nil { |
| 324 | return nil, err |
| 325 | } |
| 326 | |
| 327 | claims := auth.GetClaims(ctx) |
| 328 | forceAccess := claims.Superuser(ctx) && req.SuperuserForceAccess |
| 329 | if token.UserID != claims.OwnerID() && !forceAccess { |
| 330 | return nil, status.Error(codes.PermissionDenied, "not authorized to revoke auth tokens for other users") |
| 331 | } |
| 332 | |
| 333 | tokenID = token.ID |
| 334 | } |
| 335 | |
| 336 | err := s.admin.DB.DeleteUserAuthToken(ctx, tokenID) |
| 337 | if err != nil { |
| 338 | return nil, err |
| 339 | } |
| 340 | |
| 341 | return &adminv1.RevokeUserAuthTokenResponse{}, nil |
| 342 | } |
| 343 | |
| 344 | func (s *Server) RevokeAllUserAuthTokens(ctx context.Context, req *adminv1.RevokeAllUserAuthTokensRequest) (*adminv1.RevokeAllUserAuthTokensResponse, error) { |
| 345 | observability.AddRequestAttributes(ctx, |
nothing calls this directly
no test coverage detected