Documentation
¶
Overview ¶
Package iam is the entry point for github.com/axis-iam/vertex-sdk-go, a Go SDK that integrates with the IAM Authentication Center.
It exposes:
- SDKConfig — runtime configuration for the SDK
- SDK — orchestrator that wires JWT verification, permission resolution and optional startup-time permission registration
- Shortcut constructors for net/http middleware via the github.com/axis-iam/vertex-sdk-go/middleware sub-package
Framework-specific adapters live in their own submodules to avoid pulling unrelated router dependencies into callers:
- github.com/axis-iam/vertex-sdk-go/chi
- github.com/axis-iam/vertex-sdk-go/gin
- github.com/axis-iam/vertex-sdk-go/echo
Index ¶
- Constants
- Variables
- func FromContext(ctx context.Context) *authz.User
- func MustUser(ctx context.Context) (*authz.User, error)
- func PermissionDeclarationRevision(declaration PermissionManifestDeclaration) (string, error)
- type APIError
- type AccountOrganization
- type AccountPermissionSummary
- type AccountSecuritySummary
- type AccountUpdateProfileRequest
- type AuthOption
- type AuthorizationCreateOptions
- type AuthorizationPageMetadata
- type AuthorizationPageOptions
- type Client
- func (c *Client) AcceptOrganizationInvitation(ctx context.Context, invitationToken, accessToken string) (*PublicOrganizationInvitationAcceptResponse, error)
- func (c *Client) ChangePassword(ctx context.Context, accessToken string, input PasswordChangeRequest) error
- func (c *Client) CheckAccountPermission(ctx context.Context, accessToken, permission, organizationID string) (*PermissionCheckResponse, error)
- func (c *Client) Config() *SDKConfig
- func (c *Client) Endpoint() string
- func (c *Client) GetAccountPermissionSummary(ctx context.Context, accessToken, organizationID string) (*AccountPermissionSummary, error)
- func (c *Client) GetAccountProfile(ctx context.Context, accessToken string) (*UserProfile, error)
- func (c *Client) GetAccountSecuritySummary(ctx context.Context, accessToken string) (*AccountSecuritySummary, error)
- func (c *Client) GetCurrentAccountOrganization(ctx context.Context, accessToken string) (*AccountOrganization, error)
- func (c *Client) GetMe(ctx context.Context, accessToken string) (*UserProfile, error)
- func (c *Client) HTTP() *http.Client
- func (c *Client) HasAccountOrganizationMembership(ctx context.Context, accessToken, organizationID string) (bool, error)
- func (c *Client) JWKS(ctx context.Context, jwksURL string) ([]byte, error)
- func (c *Client) ListAccountOrganizations(ctx context.Context, accessToken string) ([]AccountOrganization, error)
- func (c *Client) ListAccountSessions(ctx context.Context, accessToken string) ([]SessionView, error)
- func (c *Client) ListPermissions(ctx context.Context, clientID string) (*ListPermissionsResponse, error)
- func (c *Client) LogoutAccount(ctx context.Context, accessToken, refreshToken string) error
- func (c *Client) PreviewOrganizationInvitation(ctx context.Context, invitationToken string) (*PublicOrganizationInvitationPreview, error)
- func (c *Client) RequestPasswordReset(ctx context.Context, email, redirectURI string) error
- func (c *Client) ResetPassword(ctx context.Context, token, newPassword string) error
- func (c *Client) ResolvePermissions(ctx context.Context, clientID string, roles []string) (*ResolvePermissionsResponse, error)
- func (c *Client) RevokeAccountSession(ctx context.Context, accessToken, sessionID string) error
- func (c *Client) RevokeOtherAccountSessions(ctx context.Context, accessToken string) error
- func (c *Client) SendEmailVerification(ctx context.Context, email string) (*EmailVerificationResponse, error)
- func (c *Client) SetHTTPClient(h *http.Client)
- func (c *Client) SwitchAccountOrganization(ctx context.Context, accessToken, organizationID string) (*OrganizationSwitchResponse, error)
- func (c *Client) UpdateAccountProfile(ctx context.Context, accessToken string, input AccountUpdateProfileRequest) (*UserProfile, error)
- func (c *Client) VerifyEmail(ctx context.Context, token string) (*EmailVerificationResponse, error)
- type CreateOrganizationInvitationRequest
- type CreateOrganizationRequest
- type CreatePermissionRequest
- type CreateRegistrationGrantRequest
- type CreateRegistrationGrantType
- type CreateRoleRequest
- type CreateUserRoleRequest
- type CreatedRegistrationGrant
- type EmailVerificationResponse
- type FailMode
- type ListPermissionsResponse
- type Organization
- type OrganizationCreateOptions
- type OrganizationIfMatchOptions
- type OrganizationInvitation
- type OrganizationInvitationDeliveryStatus
- type OrganizationInvitationListOptions
- type OrganizationInvitationPage
- type OrganizationInvitationStatus
- type OrganizationListOptions
- type OrganizationMember
- type OrganizationMemberListOptions
- type OrganizationMemberPage
- type OrganizationMemberRole
- type OrganizationPage
- type OrganizationPageMetadata
- type OrganizationSortDirection
- type OrganizationSwitchResponse
- type PasswordChangeRequest
- type Permission
- type PermissionCheckResponse
- type PermissionDefinitionDTO
- type PermissionManifest
- type PermissionManifestClient
- func (c *PermissionManifestClient) ClearPermissionManifestTokenCache()
- func (c *PermissionManifestClient) UpsertPermissionManifest(ctx context.Context, manifest PermissionManifest, idempotencyKey string) (*PermissionManifestResult, error)
- func (c *PermissionManifestClient) ValidatePermissionManifest(ctx context.Context, manifest PermissionManifest) (*PermissionManifestResult, error)
- type PermissionManifestClientConfig
- type PermissionManifestContinueEvent
- type PermissionManifestCounts
- type PermissionManifestDeclaration
- type PermissionManifestDrift
- type PermissionManifestError
- type PermissionManifestFailurePolicy
- type PermissionManifestItem
- type PermissionManifestMode
- type PermissionManifestObservation
- type PermissionManifestResult
- type PermissionManifestStartupMode
- type PermissionManifestStartupOptions
- type PermissionManifestStartupResult
- type PermissionPage
- type PortalOpenAPIClient
- func (c *PortalOpenAPIClient) CancelOrganizationInvitation(ctx context.Context, organizationID, invitationID string) error
- func (c *PortalOpenAPIClient) ClearTokenCache(scopes ...PortalOpenAPIScope)
- func (c *PortalOpenAPIClient) CreateOrganization(ctx context.Context, request CreateOrganizationRequest, ...) (*Organization, error)
- func (c *PortalOpenAPIClient) CreateOrganizationInvitation(ctx context.Context, organizationID string, ...) (*OrganizationInvitation, error)
- func (c *PortalOpenAPIClient) CreatePermission(ctx context.Context, req CreatePermissionRequest, ...) (*Permission, error)
- func (c *PortalOpenAPIClient) CreateRegistrationGrant(ctx context.Context, request CreateRegistrationGrantRequest) (*CreatedRegistrationGrant, error)
- func (c *PortalOpenAPIClient) CreateRole(ctx context.Context, req CreateRoleRequest, ...) (*Role, error)
- func (c *PortalOpenAPIClient) CreateUserRole(ctx context.Context, userID string, req CreateUserRoleRequest, ...) (*UserRoleAssignment, error)
- func (c *PortalOpenAPIClient) DeleteOrganization(ctx context.Context, organizationID string, ...) error
- func (c *PortalOpenAPIClient) DeletePermission(ctx context.Context, id, ifMatch string) error
- func (c *PortalOpenAPIClient) DeleteRole(ctx context.Context, id, ifMatch string) error
- func (c *PortalOpenAPIClient) DeleteUserRole(ctx context.Context, userID, assignmentID, ifMatch string) error
- func (c *PortalOpenAPIClient) GetMachineToken(ctx context.Context, scope PortalOpenAPIScope) (*PortalOpenAPIMachineToken, error)
- func (c *PortalOpenAPIClient) GetOrganization(ctx context.Context, organizationID string) (*Organization, error)
- func (c *PortalOpenAPIClient) GetOrganizationInvitation(ctx context.Context, organizationID, invitationID string) (*OrganizationInvitation, error)
- func (c *PortalOpenAPIClient) GetOrganizationMember(ctx context.Context, organizationID, membershipID string) (*OrganizationMember, error)
- func (c *PortalOpenAPIClient) GetPermission(ctx context.Context, id string) (*Permission, error)
- func (c *PortalOpenAPIClient) GetRegistrationGrant(ctx context.Context, grantID string) (*RegistrationGrant, error)
- func (c *PortalOpenAPIClient) GetRole(ctx context.Context, id string) (*Role, error)
- func (c *PortalOpenAPIClient) ListOrganizationInvitations(ctx context.Context, organizationID string, ...) (*OrganizationInvitationPage, error)
- func (c *PortalOpenAPIClient) ListOrganizationMembers(ctx context.Context, organizationID string, ...) (*OrganizationMemberPage, error)
- func (c *PortalOpenAPIClient) ListOrganizations(ctx context.Context, options OrganizationListOptions) (*OrganizationPage, error)
- func (c *PortalOpenAPIClient) ListPermissions(ctx context.Context, options AuthorizationPageOptions) (*PermissionPage, error)
- func (c *PortalOpenAPIClient) ListRegistrationGrantRedemptions(ctx context.Context, grantID string, page, size *int) (*RegistrationGrantRedemptionPage, error)
- func (c *PortalOpenAPIClient) ListRegistrationGrants(ctx context.Context, options RegistrationGrantListOptions) (*RegistrationGrantPage, error)
- func (c *PortalOpenAPIClient) ListRolePermissions(ctx context.Context, roleID string, options AuthorizationPageOptions) (*RolePermissionBindingPage, error)
- func (c *PortalOpenAPIClient) ListRoles(ctx context.Context, options AuthorizationPageOptions) (*RolePage, error)
- func (c *PortalOpenAPIClient) ListUserRoles(ctx context.Context, userID string, options AuthorizationPageOptions) (*UserRoleAssignmentPage, error)
- func (c *PortalOpenAPIClient) PauseRegistrationGrant(ctx context.Context, grantID string) (*RegistrationGrant, error)
- func (c *PortalOpenAPIClient) RemoveOrganizationMember(ctx context.Context, organizationID, membershipID string) error
- func (c *PortalOpenAPIClient) ReplaceRolePermissions(ctx context.Context, roleID string, permissionIDs []string, ifMatch string) (*RolePermissionSet, error)
- func (c *PortalOpenAPIClient) RequestJSON(ctx context.Context, method, path string, body any, out any) error
- func (c *PortalOpenAPIClient) ResendOrganizationInvitation(ctx context.Context, organizationID, invitationID string) (*OrganizationInvitation, error)
- func (c *PortalOpenAPIClient) ResumeRegistrationGrant(ctx context.Context, grantID string) (*RegistrationGrant, error)
- func (c *PortalOpenAPIClient) RevokeRegistrationGrant(ctx context.Context, grantID string, reason *string) (*RegistrationGrant, error)
- func (c *PortalOpenAPIClient) UpdateOrganization(ctx context.Context, organizationID string, request UpdateOrganizationRequest, ...) (*Organization, error)
- func (c *PortalOpenAPIClient) UpdateOrganizationMemberRole(ctx context.Context, organizationID, membershipID string, ...) (*OrganizationMember, error)
- func (c *PortalOpenAPIClient) UpdatePermission(ctx context.Context, id string, req UpdatePermissionRequest, ifMatch string) (*Permission, error)
- func (c *PortalOpenAPIClient) UpdateRole(ctx context.Context, id string, req UpdateRoleRequest, ifMatch string) (*Role, error)
- func (c *PortalOpenAPIClient) UpdateUserRole(ctx context.Context, userID, assignmentID string, req UpdateUserRoleRequest, ...) (*UserRoleAssignment, error)
- type PortalOpenAPIClientConfig
- type PortalOpenAPIError
- type PortalOpenAPIMachineToken
- type PortalOpenAPIScope
- type PortalOpenAPITokenError
- type PreparedPermissionManifest
- type PublicOrganizationInvitationAcceptResponse
- type PublicOrganizationInvitationPreview
- type RegistrationGrant
- type RegistrationGrantListOptions
- type RegistrationGrantPage
- type RegistrationGrantPageMetadata
- type RegistrationGrantRedemption
- type RegistrationGrantRedemptionPage
- type RegistrationGrantStatus
- type RegistrationGrantType
- type ResolveMode
- type ResolvePermissionsRequest
- type ResolvePermissionsResponse
- type Role
- type RolePage
- type RolePermissionBinding
- type RolePermissionBindingPage
- type RolePermissionSet
- type SDK
- func (s *SDK) AcceptOrganizationInvitation(ctx context.Context, invitationToken, accessToken string) (*PublicOrganizationInvitationAcceptResponse, error)
- func (s *SDK) Authenticate(opts ...AuthOption) func(http.Handler) http.Handler
- func (s *SDK) ChangePassword(ctx context.Context, accessToken string, input PasswordChangeRequest) error
- func (s *SDK) CheckAccountPermission(ctx context.Context, accessToken, permission, organizationID string) (*PermissionCheckResponse, error)
- func (s *SDK) Client() *Client
- func (s *SDK) GetAccountPermissionSummary(ctx context.Context, accessToken, organizationID string) (*AccountPermissionSummary, error)
- func (s *SDK) GetAccountSecuritySummary(ctx context.Context, accessToken string) (*AccountSecuritySummary, error)
- func (s *SDK) GetCurrentAccountOrganization(ctx context.Context, accessToken string) (*AccountOrganization, error)
- func (s *SDK) GetMe(ctx context.Context, accessToken string, opts ...UserProfileOption) (*UserProfile, error)
- func (s *SDK) HasAccountOrganizationMembership(ctx context.Context, accessToken, organizationID string) (bool, error)
- func (s *SDK) ListAccountOrganizations(ctx context.Context, accessToken string) ([]AccountOrganization, error)
- func (s *SDK) ListAccountSessions(ctx context.Context, accessToken string) ([]SessionView, error)
- func (s *SDK) LogoutAccount(ctx context.Context, accessToken, refreshToken string) error
- func (s *SDK) PreviewOrganizationInvitation(ctx context.Context, invitationToken string) (*PublicOrganizationInvitationPreview, error)
- func (s *SDK) RequestPasswordReset(ctx context.Context, email, redirectURI string) error
- func (s *SDK) RequireAllPerms(perms []authz.PermissionKey, opts ...middleware.Option) func(http.Handler) http.Handler
- func (s *SDK) RequireAnyPerm(perms []authz.PermissionKey, opts ...middleware.Option) func(http.Handler) http.Handler
- func (s *SDK) RequireNoImpersonation(opts ...middleware.Option) func(http.Handler) http.Handler
- func (s *SDK) RequirePerm(perm authz.PermissionKey, opts ...middleware.Option) func(http.Handler) http.Handler
- func (s *SDK) RequireStepUp(acr string, opts ...middleware.Option) func(http.Handler) http.Handler
- func (s *SDK) ResetPassword(ctx context.Context, token, newPassword string) error
- func (s *SDK) Resolver() authz.Resolver
- func (s *SDK) RevokeAccountSession(ctx context.Context, accessToken, sessionID string) error
- func (s *SDK) RevokeOtherAccountSessions(ctx context.Context, accessToken string) error
- func (s *SDK) SendEmailVerification(ctx context.Context, email string) (*EmailVerificationResponse, error)
- func (s *SDK) SwitchAccountOrganization(ctx context.Context, accessToken, organizationID string) (*OrganizationSwitchResponse, error)
- func (s *SDK) UpdateAccountProfile(ctx context.Context, accessToken string, input AccountUpdateProfileRequest) (*UserProfile, error)
- func (s *SDK) Verifier() *iamjwt.Verifier
- func (s *SDK) VerifyEmail(ctx context.Context, token string) (*EmailVerificationResponse, error)
- type SDKConfig
- type SessionView
- type UpdateOrganizationRequest
- type UpdatePermissionRequest
- type UpdateRoleRequest
- type UpdateUserRoleRequest
- type UserProfile
- type UserProfileOption
- type UserRoleAssignment
- type UserRoleAssignmentPage
- type UserRoleCondition
Constants ¶
const PermissionsSyncScope = "permissions:sync"
Variables ¶
var ( // ErrPortalOpenAPIConfig identifies invalid Portal Open API client configuration. ErrPortalOpenAPIConfig = errors.New("iam portal open api: config error") // ErrPortalOpenAPIToken identifies token acquisition or token response failures. ErrPortalOpenAPIToken = errors.New("iam portal open api: token error") // ErrPortalOpenAPIRequest identifies Portal resource request failures. ErrPortalOpenAPIRequest = errors.New("iam portal open api: request error") )
Functions ¶
func FromContext ¶
FromContext returns the authenticated IAM user carried by ctx, if any.
func PermissionDeclarationRevision ¶
func PermissionDeclarationRevision(declaration PermissionManifestDeclaration) (string, error)
Types ¶
type APIError ¶
APIError is returned for non-2xx responses from the IAM server.
func (*APIError) IsRetryable ¶
IsRetryable reports whether the error should trigger retries.
type AccountOrganization ¶
type AccountOrganization struct {
OrganizationID string `json:"organizationId"`
Name string `json:"name"`
Slug string `json:"slug,omitempty"`
Role string `json:"role"`
JoinedAt string `json:"joinedAt,omitempty"`
Current bool `json:"current"`
}
AccountOrganization is the current user's Application-scoped Organization membership.
type AccountPermissionSummary ¶
type AccountPermissionSummary struct {
ApplicationID string `json:"applicationId"`
OrganizationID string `json:"organizationId,omitempty"`
Roles []string `json:"roles"`
Permissions []string `json:"permissions"`
}
AccountPermissionSummary is the current user's IAM-resolved permission summary.
type AccountSecuritySummary ¶
type AccountSecuritySummary struct {
EmailVerified bool `json:"emailVerified"`
PasswordCredentialPresent bool `json:"passwordCredentialPresent"`
MFAEnrolled bool `json:"mfaEnrolled"`
TOTPEnrolled bool `json:"totpEnrolled"`
WebAuthnEnrolled bool `json:"webAuthnEnrolled"`
ActiveSessionCount int `json:"activeSessionCount"`
}
AccountSecuritySummary is the current user's secret-free security summary.
type AccountUpdateProfileRequest ¶
type AccountUpdateProfileRequest struct {
Username string `json:"username,omitempty"`
DisplayName string `json:"displayName,omitempty"`
AvatarURL string `json:"avatarUrl,omitempty"`
}
AccountUpdateProfileRequest is the safe scalar profile update request.
type AuthOption ¶
type AuthOption func(*middleware.AuthConfig)
AuthOption configures the Authenticate middleware.
func WithAuthResponder ¶
func WithAuthResponder(r middleware.ErrorResponder) AuthOption
WithAuthResponder substitutes the ErrorResponder used when authentication fails.
type AuthorizationCreateOptions ¶
type AuthorizationCreateOptions struct{ IdempotencyKey string }
AuthorizationCreateOptions carries an optional retry-safe Idempotency-Key.
type AuthorizationPageMetadata ¶
type AuthorizationPageMetadata struct {
Size int `json:"size"`
Number int `json:"number"`
TotalElements int64 `json:"totalElements"`
TotalPages int `json:"totalPages"`
}
AuthorizationPageMetadata is the nested Spring PagedModel metadata.
type AuthorizationPageOptions ¶
AuthorizationPageOptions selects a zero-based page with a maximum size of 100.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a low-level HTTP client against the IAM server's /open/v1 API. It is safe for concurrent use.
func NewClient ¶
NewClient constructs a Client from cfg. cfg.Validate() is called; callers should normally use New (in sdk.go) which also builds the verifier, resolver and registrar.
func (*Client) AcceptOrganizationInvitation ¶
func (c *Client) AcceptOrganizationInvitation(ctx context.Context, invitationToken, accessToken string) (*PublicOrganizationInvitationAcceptResponse, error)
AcceptOrganizationInvitation calls the public invitation accept endpoint. Pass an empty accessToken to receive IAM's login-required continuation when unauthenticated.
func (*Client) ChangePassword ¶
func (c *Client) ChangePassword(ctx context.Context, accessToken string, input PasswordChangeRequest) error
ChangePassword calls the authenticated password-change endpoint.
func (*Client) CheckAccountPermission ¶
func (c *Client) CheckAccountPermission(ctx context.Context, accessToken, permission, organizationID string) (*PermissionCheckResponse, error)
CheckAccountPermission checks one permission through IAM. Wildcard semantics are backend-owned.
func (*Client) Config ¶
Config returns a pointer to the underlying config. Callers must not mutate fields used by the SDK (Endpoint, ClientID, ...).
func (*Client) GetAccountPermissionSummary ¶
func (c *Client) GetAccountPermissionSummary(ctx context.Context, accessToken, organizationID string) (*AccountPermissionSummary, error)
GetAccountPermissionSummary resolves current-user permissions in the active or explicit Organization context.
func (*Client) GetAccountProfile ¶
GetAccountProfile calls GET /api/v1/auth/me/profile with the user's bearer token.
func (*Client) GetAccountSecuritySummary ¶
func (c *Client) GetAccountSecuritySummary(ctx context.Context, accessToken string) (*AccountSecuritySummary, error)
GetAccountSecuritySummary calls GET /api/v1/auth/me/security with the user's bearer token.
func (*Client) GetCurrentAccountOrganization ¶
func (c *Client) GetCurrentAccountOrganization(ctx context.Context, accessToken string) (*AccountOrganization, error)
GetCurrentAccountOrganization calls GET /api/v1/auth/me/organizations/current.
func (*Client) GetMe ¶
GetMe calls GET /api/v1/auth/me/profile with the user's bearer access token. It is uncached; use SDK.GetMe for the short-TTL profile cache. The returned Metadata is profile metadata, not authorization attributes.
func (*Client) HasAccountOrganizationMembership ¶
func (c *Client) HasAccountOrganizationMembership(ctx context.Context, accessToken, organizationID string) (bool, error)
HasAccountOrganizationMembership derives membership from the Organization list.
func (*Client) JWKS ¶
JWKS returns the raw JWKS JSON body served by the issuer's well-known endpoint. Used by the jwt sub-package.
func (*Client) ListAccountOrganizations ¶
func (c *Client) ListAccountOrganizations(ctx context.Context, accessToken string) ([]AccountOrganization, error)
ListAccountOrganizations calls GET /api/v1/auth/me/organizations.
func (*Client) ListAccountSessions ¶
func (c *Client) ListAccountSessions(ctx context.Context, accessToken string) ([]SessionView, error)
ListAccountSessions lists the current user's active sessions.
func (*Client) ListPermissions ¶
func (c *Client) ListPermissions(ctx context.Context, clientID string) (*ListPermissionsResponse, error)
ListPermissions calls GET /open/v1/apps/{cid}/permissions.
func (*Client) LogoutAccount ¶
LogoutAccount blacklists the current token/session and optionally revokes a refresh token.
func (*Client) PreviewOrganizationInvitation ¶
func (c *Client) PreviewOrganizationInvitation(ctx context.Context, invitationToken string) (*PublicOrganizationInvitationPreview, error)
PreviewOrganizationInvitation calls the public invitation preview endpoint without bearer auth.
func (*Client) RequestPasswordReset ¶
RequestPasswordReset starts the opaque public forgot-password flow.
func (*Client) ResetPassword ¶
ResetPassword completes the public password reset flow.
func (*Client) ResolvePermissions ¶
func (c *Client) ResolvePermissions(ctx context.Context, clientID string, roles []string) (*ResolvePermissionsResponse, error)
ResolvePermissions calls POST /open/v1/permissions:resolve.
func (*Client) RevokeAccountSession ¶
RevokeAccountSession revokes one session owned by the current user.
func (*Client) RevokeOtherAccountSessions ¶
RevokeOtherAccountSessions revokes all sessions except the current token's sid.
func (*Client) SendEmailVerification ¶
func (c *Client) SendEmailVerification(ctx context.Context, email string) (*EmailVerificationResponse, error)
SendEmailVerification starts the opaque public email verification send flow.
func (*Client) SetHTTPClient ¶
SetHTTPClient lets callers inject a custom http.Client. Intended for tests.
func (*Client) SwitchAccountOrganization ¶
func (c *Client) SwitchAccountOrganization(ctx context.Context, accessToken, organizationID string) (*OrganizationSwitchResponse, error)
SwitchAccountOrganization validates membership and returns the server continuation.
func (*Client) UpdateAccountProfile ¶
func (c *Client) UpdateAccountProfile(ctx context.Context, accessToken string, input AccountUpdateProfileRequest) (*UserProfile, error)
UpdateAccountProfile calls PATCH /api/v1/auth/me/profile with safe scalar profile fields.
func (*Client) VerifyEmail ¶
VerifyEmail verifies a public email-verification token.
type CreateOrganizationInvitationRequest ¶
type CreateOrganizationInvitationRequest struct {
Email string `json:"email"`
Role *OrganizationMemberRole `json:"role,omitempty"`
SendEmail *bool `json:"sendEmail,omitempty"`
}
CreateOrganizationInvitationRequest is the strict invitation create payload.
type CreateOrganizationRequest ¶
CreateOrganizationRequest is the strict Organization create payload.
type CreatePermissionRequest ¶
type CreatePermissionRequest struct {
Resource string `json:"resource"`
Action string `json:"action"`
Name string `json:"name"`
Description *string `json:"description,omitempty"`
}
CreatePermissionRequest is the strict canonical permission create payload.
type CreateRegistrationGrantRequest ¶
type CreateRegistrationGrantRequest struct {
Type CreateRegistrationGrantType `json:"type"`
DisplayName *string `json:"displayName,omitempty"`
AllowedEmail *string `json:"allowedEmail,omitempty"`
AllowedDomain *string `json:"allowedDomain,omitempty"`
ExpiresAt *string `json:"expiresAt,omitempty"`
MaxUses *int `json:"maxUses,omitempty"`
}
type CreateRegistrationGrantType ¶
type CreateRegistrationGrantType string
CreateRegistrationGrantRequest describes a manual EMAIL_LINK or ACCESS_CODE grant.
const ( CreateRegistrationGrantEmailLink CreateRegistrationGrantType = "EMAIL_LINK" CreateRegistrationGrantAccessCode CreateRegistrationGrantType = "ACCESS_CODE" )
type CreateRoleRequest ¶
type CreateRoleRequest struct {
Key string `json:"key"`
Name string `json:"name"`
Description *string `json:"description,omitempty"`
}
CreateRoleRequest is the strict role create payload.
type CreateUserRoleRequest ¶
type CreateUserRoleRequest struct {
RoleID string `json:"roleId"`
Condition *UserRoleCondition `json:"condition,omitempty"`
}
CreateUserRoleRequest is the typed POST assignment payload.
type CreatedRegistrationGrant ¶
type CreatedRegistrationGrant struct {
Grant RegistrationGrant `json:"grant"`
RegistrationGrantToken *string `json:"registrationGrantToken"`
RegistrationAccessCode *string `json:"registrationAccessCode"`
}
CreatedRegistrationGrant contains the one-time raw proof returned only by create.
type EmailVerificationResponse ¶
type EmailVerificationResponse struct {
Message string `json:"message"`
RetryAfterSeconds *int `json:"retryAfterSeconds"`
}
EmailVerificationResponse is returned by public email verification helpers.
type FailMode ¶
type FailMode int
FailMode controls how the SDK behaves when the permission resolver errors.
type ListPermissionsResponse ¶
type ListPermissionsResponse struct {
Permissions []PermissionDefinitionDTO `json:"permissions"`
}
ListPermissionsResponse is the response body for GET /open/v1/apps/{cid}/permissions.
type Organization ¶
type Organization struct {
ID string `json:"id"`
Name string `json:"name"`
Slug string `json:"slug"`
Version int64 `json:"version"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
ETag string `json:"-"`
}
Organization is an Application-bound Organization. ETag is populated for create, get, and update responses.
type OrganizationCreateOptions ¶
type OrganizationCreateOptions struct {
IdempotencyKey string
}
OrganizationCreateOptions carries an optional Idempotency-Key for exactly-once creates.
type OrganizationIfMatchOptions ¶
type OrganizationIfMatchOptions struct {
IfMatch string
}
OrganizationIfMatchOptions carries an optional quoted ETag/version precondition.
type OrganizationInvitation ¶
type OrganizationInvitation struct {
ID string `json:"id"`
Email string `json:"email"`
Role OrganizationMemberRole `json:"role"`
Status OrganizationInvitationStatus `json:"status"`
DeliveryStatus OrganizationInvitationDeliveryStatus `json:"deliveryStatus"`
ExpiresAt string `json:"expiresAt"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
OrganizationInvitation is a safe invitation detail. It never contains a redemption proof.
type OrganizationInvitationDeliveryStatus ¶
type OrganizationInvitationDeliveryStatus string
OrganizationInvitationDeliveryStatus is the invitation email delivery outcome.
const ( OrganizationInvitationDeliveryNotRequested OrganizationInvitationDeliveryStatus = "NOT_REQUESTED" OrganizationInvitationDeliverySent OrganizationInvitationDeliveryStatus = "SENT" OrganizationInvitationDeliveryFailed OrganizationInvitationDeliveryStatus = "FAILED" )
type OrganizationInvitationListOptions ¶
type OrganizationInvitationListOptions struct {
Status *OrganizationInvitationStatus
Page *int
Size *int
}
OrganizationInvitationListOptions filters invitation lifecycle state and pages results.
type OrganizationInvitationPage ¶
type OrganizationInvitationPage struct {
Content []OrganizationInvitation `json:"content"`
Page OrganizationPageMetadata `json:"page"`
}
OrganizationInvitationPage is a page of invitation details and delivery states.
type OrganizationInvitationStatus ¶
type OrganizationInvitationStatus string
OrganizationInvitationStatus is an Organization invitation lifecycle state.
const ( OrganizationInvitationPending OrganizationInvitationStatus = "PENDING" OrganizationInvitationAccepted OrganizationInvitationStatus = "ACCEPTED" OrganizationInvitationCancelled OrganizationInvitationStatus = "CANCELLED" OrganizationInvitationExpired OrganizationInvitationStatus = "EXPIRED" )
type OrganizationListOptions ¶
type OrganizationListOptions struct {
Search *string
Page *int
Size *int
Sort []string
Direction []OrganizationSortDirection
}
OrganizationListOptions filters, pages, and sorts Organization results.
type OrganizationMember ¶
type OrganizationMember struct {
MembershipID string `json:"membershipId"`
UserID string `json:"userId"`
Email string `json:"email"`
DisplayName string `json:"displayName"`
Role OrganizationMemberRole `json:"role"`
JoinedAt string `json:"joinedAt"`
UpdatedAt string `json:"updatedAt"`
Version int64 `json:"version"`
}
OrganizationMember is an Organization membership detail, including its optimistic-lock version.
type OrganizationMemberListOptions ¶
OrganizationMemberListOptions filters and pages Organization members.
type OrganizationMemberPage ¶
type OrganizationMemberPage struct {
Content []OrganizationMember `json:"content"`
Page OrganizationPageMetadata `json:"page"`
}
OrganizationMemberPage is a page of Organization membership details.
type OrganizationMemberRole ¶
type OrganizationMemberRole string
OrganizationMemberRole is the Organization role returned and accepted by the Open API.
const ( OrganizationMemberRoleOwner OrganizationMemberRole = "OWNER" OrganizationMemberRoleAdmin OrganizationMemberRole = "ADMIN" OrganizationMemberRoleMember OrganizationMemberRole = "MEMBER" )
type OrganizationPage ¶
type OrganizationPage struct {
Content []Organization `json:"content"`
Page OrganizationPageMetadata `json:"page"`
}
OrganizationPage is a page of Application-bound Organizations.
type OrganizationPageMetadata ¶
type OrganizationPageMetadata struct {
Size int `json:"size"`
Number int `json:"number"`
TotalElements int64 `json:"totalElements"`
TotalPages int `json:"totalPages"`
}
OrganizationPageMetadata is the nested Spring PagedModel metadata.
type OrganizationSortDirection ¶
type OrganizationSortDirection string
OrganizationSortDirection controls Organization list sorting.
const ( OrganizationSortAscending OrganizationSortDirection = "ASC" OrganizationSortDescending OrganizationSortDirection = "DESC" )
type OrganizationSwitchResponse ¶
type OrganizationSwitchResponse struct {
OrganizationID string `json:"organizationId"`
Continuation string `json:"continuation"`
TokenRefreshRequired bool `json:"tokenRefreshRequired"`
Message string `json:"message,omitempty"`
}
OrganizationSwitchResponse is returned after requesting a current Organization switch.
type PasswordChangeRequest ¶
type PasswordChangeRequest struct {
CurrentPassword string `json:"currentPassword"`
NewPassword string `json:"newPassword"`
}
PasswordChangeRequest is the authenticated password-change body.
type Permission ¶
type Permission struct {
ID string `json:"id"`
Resource string `json:"resource"`
Action string `json:"action"`
Key string `json:"key"`
Name string `json:"name"`
Description *string `json:"description"`
Source string `json:"source"`
Version int64 `json:"version"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
ETag string `json:"-"`
}
Permission is a canonical resource:action grant and its response ETag.
type PermissionCheckResponse ¶
type PermissionCheckResponse struct {
ApplicationID string `json:"applicationId"`
OrganizationID string `json:"organizationId,omitempty"`
Permission string `json:"permission"`
Allowed bool `json:"allowed"`
Roles []string `json:"roles"`
}
PermissionCheckResponse is returned by current-user permission checks.
type PermissionDefinitionDTO ¶
type PermissionDefinitionDTO struct {
Resource string `json:"resource"`
Action string `json:"action"`
Description string `json:"description,omitempty"`
}
PermissionDefinitionDTO mirrors the request/response shape used by the /open/v1/apps/{cid}/permissions endpoints. It is intentionally duplicated here (rather than imported from authz) to keep the client package free of circular dependencies.
type PermissionManifest ¶
type PermissionManifest struct {
ManifestID string `json:"manifestId"`
Revision string `json:"revision"`
Permissions []PermissionManifestDeclaration `json:"permissions"`
}
type PermissionManifestClient ¶
type PermissionManifestClient struct {
// contains filtered or unexported fields
}
func NewPermissionManifestClient ¶
func NewPermissionManifestClient(cfg PermissionManifestClientConfig) (*PermissionManifestClient, error)
func (*PermissionManifestClient) ClearPermissionManifestTokenCache ¶
func (c *PermissionManifestClient) ClearPermissionManifestTokenCache()
func (*PermissionManifestClient) UpsertPermissionManifest ¶
func (c *PermissionManifestClient) UpsertPermissionManifest(ctx context.Context, manifest PermissionManifest, idempotencyKey string) (*PermissionManifestResult, error)
func (*PermissionManifestClient) ValidatePermissionManifest ¶
func (c *PermissionManifestClient) ValidatePermissionManifest(ctx context.Context, manifest PermissionManifest) (*PermissionManifestResult, error)
type PermissionManifestDeclaration ¶
type PermissionManifestDeclaration struct {
Resource string `json:"resource"`
Action string `json:"action"`
Name string `json:"name"`
Description *string `json:"description"`
}
func (PermissionManifestDeclaration) Key ¶
func (d PermissionManifestDeclaration) Key() string
type PermissionManifestDrift ¶
type PermissionManifestError ¶
type PermissionManifestError struct {
Status int
Code string
Message string
CorrelationID string
RetryAfterSeconds int
Body string
}
func (*PermissionManifestError) Error ¶
func (e *PermissionManifestError) Error() string
type PermissionManifestFailurePolicy ¶
type PermissionManifestFailurePolicy int
const ( PermissionManifestFailurePolicyUnset PermissionManifestFailurePolicy = iota PermissionManifestFailFast PermissionManifestContinue )
type PermissionManifestItem ¶
type PermissionManifestMode ¶
type PermissionManifestMode string
const ( PermissionManifestValidate PermissionManifestMode = "validate" PermissionManifestUpsert PermissionManifestMode = "upsert" )
type PermissionManifestObservation ¶
type PermissionManifestObservation struct {
Mode PermissionManifestMode
Outcome string
Status int
Duration time.Duration
}
type PermissionManifestResult ¶
type PermissionManifestResult struct {
Mode PermissionManifestMode `json:"mode"`
ManifestID string `json:"manifestId"`
Revision string `json:"revision"`
Fingerprint string `json:"fingerprint"`
Applied bool `json:"applied"`
Results []PermissionManifestItem `json:"results"`
Drift []PermissionManifestDrift `json:"drift"`
Counts PermissionManifestCounts `json:"counts"`
}
type PermissionManifestStartupMode ¶
type PermissionManifestStartupMode int
const ( PermissionManifestDisabled PermissionManifestStartupMode = iota PermissionManifestCIValidate PermissionManifestDeploymentUpsert PermissionManifestDevelopmentStartup )
type PermissionManifestStartupOptions ¶
type PermissionManifestStartupOptions struct {
Mode PermissionManifestStartupMode
FailurePolicy PermissionManifestFailurePolicy
IdempotencyKey string
OnContinueError func(PermissionManifestContinueEvent)
}
type PermissionManifestStartupResult ¶
type PermissionManifestStartupResult struct {
NetworkAttempted bool
Continued bool
Result *PermissionManifestResult
}
func RunPermissionManifestStartup ¶
func RunPermissionManifestStartup(ctx context.Context, client *PermissionManifestClient, manifest PermissionManifest, options PermissionManifestStartupOptions) (PermissionManifestStartupResult, error)
type PermissionPage ¶
type PermissionPage struct {
Content []Permission `json:"content"`
Page AuthorizationPageMetadata `json:"page"`
}
PermissionPage is a deterministic page of permissions.
type PortalOpenAPIClient ¶
type PortalOpenAPIClient struct {
// contains filtered or unexported fields
}
PortalOpenAPIClient is a server-side M2M client for iam-portal /open/v1/**.
It obtains client_credentials machine tokens with explicit portal:openapi:read or portal:openapi:write scope, caches read/write tokens separately, and sends only Authorization: Bearer <machine_token> to Portal resource endpoints.
func NewPortalOpenAPIClient ¶
func NewPortalOpenAPIClient(cfg PortalOpenAPIClientConfig) (*PortalOpenAPIClient, error)
NewPortalOpenAPIClient constructs a server-side confidential Portal Open API client.
func (*PortalOpenAPIClient) CancelOrganizationInvitation ¶
func (c *PortalOpenAPIClient) CancelOrganizationInvitation(ctx context.Context, organizationID, invitationID string) error
CancelOrganizationInvitation uses only organization_invitations:write. Portal owns terminal-state/idempotency semantics.
func (*PortalOpenAPIClient) ClearTokenCache ¶
func (c *PortalOpenAPIClient) ClearTokenCache(scopes ...PortalOpenAPIScope)
ClearTokenCache clears cached read/write tokens, or only one scope when provided.
func (*PortalOpenAPIClient) CreateOrganization ¶
func (c *PortalOpenAPIClient) CreateOrganization(ctx context.Context, request CreateOrganizationRequest, options *OrganizationCreateOptions) (*Organization, error)
CreateOrganization uses only organizations:write and applies Idempotency-Key when supplied.
func (*PortalOpenAPIClient) CreateOrganizationInvitation ¶
func (c *PortalOpenAPIClient) CreateOrganizationInvitation(ctx context.Context, organizationID string, request CreateOrganizationInvitationRequest, options *OrganizationCreateOptions) (*OrganizationInvitation, error)
CreateOrganizationInvitation uses only organization_invitations:write and applies Idempotency-Key when supplied.
func (*PortalOpenAPIClient) CreatePermission ¶
func (c *PortalOpenAPIClient) CreatePermission(ctx context.Context, req CreatePermissionRequest, options *AuthorizationCreateOptions) (*Permission, error)
CreatePermission uses only permissions:write and validates canonical grant grammar.
func (*PortalOpenAPIClient) CreateRegistrationGrant ¶
func (c *PortalOpenAPIClient) CreateRegistrationGrant(ctx context.Context, request CreateRegistrationGrantRequest) (*CreatedRegistrationGrant, error)
CreateRegistrationGrant creates an EMAIL_LINK or ACCESS_CODE grant with exactly one matching proof.
func (*PortalOpenAPIClient) CreateRole ¶
func (c *PortalOpenAPIClient) CreateRole(ctx context.Context, req CreateRoleRequest, options *AuthorizationCreateOptions) (*Role, error)
CreateRole uses only roles:write and applies Idempotency-Key when supplied.
func (*PortalOpenAPIClient) CreateUserRole ¶
func (c *PortalOpenAPIClient) CreateUserRole(ctx context.Context, userID string, req CreateUserRoleRequest, options *AuthorizationCreateOptions) (*UserRoleAssignment, error)
CreateUserRole uses only user_roles:write and the typed POST assignment route.
func (*PortalOpenAPIClient) DeleteOrganization ¶
func (c *PortalOpenAPIClient) DeleteOrganization(ctx context.Context, organizationID string, options *OrganizationIfMatchOptions) error
DeleteOrganization uses only organizations:write and applies If-Match when supplied.
func (*PortalOpenAPIClient) DeletePermission ¶
func (c *PortalOpenAPIClient) DeletePermission(ctx context.Context, id, ifMatch string) error
DeletePermission uses only permissions:write and requires a strong If-Match ETag.
func (*PortalOpenAPIClient) DeleteRole ¶
func (c *PortalOpenAPIClient) DeleteRole(ctx context.Context, id, ifMatch string) error
DeleteRole uses only roles:write and requires a strong If-Match ETag.
func (*PortalOpenAPIClient) DeleteUserRole ¶
func (c *PortalOpenAPIClient) DeleteUserRole(ctx context.Context, userID, assignmentID, ifMatch string) error
DeleteUserRole uses only user_roles:write and requires If-Match.
func (*PortalOpenAPIClient) GetMachineToken ¶
func (c *PortalOpenAPIClient) GetMachineToken(ctx context.Context, scope PortalOpenAPIScope) (*PortalOpenAPIMachineToken, error)
GetMachineToken returns a cached or freshly requested machine token for an explicit scope.
func (*PortalOpenAPIClient) GetOrganization ¶
func (c *PortalOpenAPIClient) GetOrganization(ctx context.Context, organizationID string) (*Organization, error)
GetOrganization uses only organizations:read and exposes the returned ETag.
func (*PortalOpenAPIClient) GetOrganizationInvitation ¶
func (c *PortalOpenAPIClient) GetOrganizationInvitation(ctx context.Context, organizationID, invitationID string) (*OrganizationInvitation, error)
GetOrganizationInvitation uses only organization_invitations:read.
func (*PortalOpenAPIClient) GetOrganizationMember ¶
func (c *PortalOpenAPIClient) GetOrganizationMember(ctx context.Context, organizationID, membershipID string) (*OrganizationMember, error)
GetOrganizationMember uses only organization_members:read.
func (*PortalOpenAPIClient) GetPermission ¶
func (c *PortalOpenAPIClient) GetPermission(ctx context.Context, id string) (*Permission, error)
GetPermission uses only permissions:read and exposes the returned ETag.
func (*PortalOpenAPIClient) GetRegistrationGrant ¶
func (c *PortalOpenAPIClient) GetRegistrationGrant(ctx context.Context, grantID string) (*RegistrationGrant, error)
GetRegistrationGrant returns a safe grant detail using registration_grants:read.
func (*PortalOpenAPIClient) ListOrganizationInvitations ¶
func (c *PortalOpenAPIClient) ListOrganizationInvitations(ctx context.Context, organizationID string, options OrganizationInvitationListOptions) (*OrganizationInvitationPage, error)
ListOrganizationInvitations uses only organization_invitations:read.
func (*PortalOpenAPIClient) ListOrganizationMembers ¶
func (c *PortalOpenAPIClient) ListOrganizationMembers(ctx context.Context, organizationID string, options OrganizationMemberListOptions) (*OrganizationMemberPage, error)
ListOrganizationMembers uses only organization_members:read.
func (*PortalOpenAPIClient) ListOrganizations ¶
func (c *PortalOpenAPIClient) ListOrganizations(ctx context.Context, options OrganizationListOptions) (*OrganizationPage, error)
ListOrganizations uses only organizations:read.
func (*PortalOpenAPIClient) ListPermissions ¶
func (c *PortalOpenAPIClient) ListPermissions(ctx context.Context, options AuthorizationPageOptions) (*PermissionPage, error)
ListPermissions uses only permissions:read.
func (*PortalOpenAPIClient) ListRegistrationGrantRedemptions ¶
func (c *PortalOpenAPIClient) ListRegistrationGrantRedemptions(ctx context.Context, grantID string, page, size *int) (*RegistrationGrantRedemptionPage, error)
ListRegistrationGrantRedemptions lists masked history using its dedicated exact scope.
func (*PortalOpenAPIClient) ListRegistrationGrants ¶
func (c *PortalOpenAPIClient) ListRegistrationGrants(ctx context.Context, options RegistrationGrantListOptions) (*RegistrationGrantPage, error)
ListRegistrationGrants lists grants using only registration_grants:read.
func (*PortalOpenAPIClient) ListRolePermissions ¶
func (c *PortalOpenAPIClient) ListRolePermissions(ctx context.Context, roleID string, options AuthorizationPageOptions) (*RolePermissionBindingPage, error)
ListRolePermissions uses only role_permissions:read and exposes the role ETag.
func (*PortalOpenAPIClient) ListRoles ¶
func (c *PortalOpenAPIClient) ListRoles(ctx context.Context, options AuthorizationPageOptions) (*RolePage, error)
ListRoles uses only roles:read.
func (*PortalOpenAPIClient) ListUserRoles ¶
func (c *PortalOpenAPIClient) ListUserRoles(ctx context.Context, userID string, options AuthorizationPageOptions) (*UserRoleAssignmentPage, error)
ListUserRoles uses only user_roles:read.
func (*PortalOpenAPIClient) PauseRegistrationGrant ¶
func (c *PortalOpenAPIClient) PauseRegistrationGrant(ctx context.Context, grantID string) (*RegistrationGrant, error)
PauseRegistrationGrant pauses a grant using registration_grants:write.
func (*PortalOpenAPIClient) RemoveOrganizationMember ¶
func (c *PortalOpenAPIClient) RemoveOrganizationMember(ctx context.Context, organizationID, membershipID string) error
RemoveOrganizationMember uses only organization_members:write. Last-owner conflicts remain typed Portal errors.
func (*PortalOpenAPIClient) ReplaceRolePermissions ¶
func (c *PortalOpenAPIClient) ReplaceRolePermissions(ctx context.Context, roleID string, permissionIDs []string, ifMatch string) (*RolePermissionSet, error)
ReplaceRolePermissions uses only role_permissions:write and requires If-Match.
func (*PortalOpenAPIClient) RequestJSON ¶
func (c *PortalOpenAPIClient) RequestJSON(ctx context.Context, method, path string, body any, out any) error
RequestJSON calls a Portal /open/v1/** JSON endpoint with a bearer machine token.
GET uses portal:openapi:read. POST, PUT, PATCH, and DELETE use portal:openapi:write. The resource request never sends Basic auth, X-IAM-Client-Id, X-Application-Id, or X-App-Key.
func (*PortalOpenAPIClient) ResendOrganizationInvitation ¶
func (c *PortalOpenAPIClient) ResendOrganizationInvitation(ctx context.Context, organizationID, invitationID string) (*OrganizationInvitation, error)
ResendOrganizationInvitation uses only organization_invitations:write. Retry-After is preserved on PortalOpenAPIError.
func (*PortalOpenAPIClient) ResumeRegistrationGrant ¶
func (c *PortalOpenAPIClient) ResumeRegistrationGrant(ctx context.Context, grantID string) (*RegistrationGrant, error)
ResumeRegistrationGrant resumes a grant using registration_grants:write.
func (*PortalOpenAPIClient) RevokeRegistrationGrant ¶
func (c *PortalOpenAPIClient) RevokeRegistrationGrant(ctx context.Context, grantID string, reason *string) (*RegistrationGrant, error)
RevokeRegistrationGrant revokes a grant using registration_grants:write. Reason is optional.
func (*PortalOpenAPIClient) UpdateOrganization ¶
func (c *PortalOpenAPIClient) UpdateOrganization(ctx context.Context, organizationID string, request UpdateOrganizationRequest, options *OrganizationIfMatchOptions) (*Organization, error)
UpdateOrganization uses only organizations:write and applies If-Match when supplied.
func (*PortalOpenAPIClient) UpdateOrganizationMemberRole ¶
func (c *PortalOpenAPIClient) UpdateOrganizationMemberRole(ctx context.Context, organizationID, membershipID string, role OrganizationMemberRole, options *OrganizationIfMatchOptions) (*OrganizationMember, error)
UpdateOrganizationMemberRole uses only organization_members:write and applies If-Match when supplied.
func (*PortalOpenAPIClient) UpdatePermission ¶
func (c *PortalOpenAPIClient) UpdatePermission(ctx context.Context, id string, req UpdatePermissionRequest, ifMatch string) (*Permission, error)
UpdatePermission uses only permissions:write and requires a strong If-Match ETag.
func (*PortalOpenAPIClient) UpdateRole ¶
func (c *PortalOpenAPIClient) UpdateRole(ctx context.Context, id string, req UpdateRoleRequest, ifMatch string) (*Role, error)
UpdateRole uses only roles:write and requires a strong If-Match ETag.
func (*PortalOpenAPIClient) UpdateUserRole ¶
func (c *PortalOpenAPIClient) UpdateUserRole(ctx context.Context, userID, assignmentID string, req UpdateUserRoleRequest, ifMatch string) (*UserRoleAssignment, error)
UpdateUserRole uses only user_roles:write and requires If-Match.
type PortalOpenAPIClientConfig ¶
type PortalOpenAPIClientConfig struct {
// Issuer is the IAM issuer/auth server base URL. Tokens are requested from
// {Issuer}/oauth2/token.
Issuer string
// PortalEndpoint is the iam-portal base URL used for /open/v1/** resource requests.
PortalEndpoint string
// ClientID is the M2M confidential ApplicationClient.clientId.
ClientID string
// ClientSecret is the M2M confidential ApplicationClient secret. Never expose
// it to browser or native client code.
ClientSecret string
// Timeout is applied when HTTPClient is nil. Default 5s.
Timeout time.Duration
// TokenSkew is subtracted from expires_in before caching. Default 30s.
TokenSkew time.Duration
// HTTPClient optionally overrides the HTTP transport. If nil, a client with
// Timeout is created.
HTTPClient *http.Client
}
PortalOpenAPIClientConfig configures the server-side confidential client for iam-portal /open/v1/** requests.
type PortalOpenAPIError ¶
PortalOpenAPIError describes a failed Portal /open/v1/** resource request.
func (*PortalOpenAPIError) Error ¶
func (e *PortalOpenAPIError) Error() string
func (*PortalOpenAPIError) Unwrap ¶
func (e *PortalOpenAPIError) Unwrap() error
Unwrap lets callers use errors.Is(err, ErrPortalOpenAPIRequest).
type PortalOpenAPIMachineToken ¶
type PortalOpenAPIMachineToken struct {
AccessToken string
Scope PortalOpenAPIScope
ExpiresAt time.Time
}
PortalOpenAPIMachineToken is a cached machine token for one explicit scope.
type PortalOpenAPIScope ¶
type PortalOpenAPIScope string
PortalOpenAPIScope is one of the explicit M2M scopes supported by iam-portal.
const ( // PortalOpenAPIReadScope is the explicit client_credentials scope for read calls. PortalOpenAPIReadScope PortalOpenAPIScope = "portal:openapi:read" // PortalOpenAPIWriteScope is the explicit client_credentials scope for write calls. PortalOpenAPIWriteScope PortalOpenAPIScope = "portal:openapi:write" // RegistrationGrantsReadScope is required for registration-grant list and detail requests. RegistrationGrantsReadScope PortalOpenAPIScope = "registration_grants:read" // RegistrationGrantsWriteScope is required for registration-grant create and lifecycle requests. RegistrationGrantsWriteScope PortalOpenAPIScope = "registration_grants:write" // RegistrationGrantsRedemptionsReadScope is required for redemption-history requests. RegistrationGrantsRedemptionsReadScope PortalOpenAPIScope = "registration_grants:redemptions:read" // OrganizationsReadScope is required for Organization list and detail requests. OrganizationsReadScope PortalOpenAPIScope = "organizations:read" // OrganizationsWriteScope is required for Organization create, update, and delete requests. OrganizationsWriteScope PortalOpenAPIScope = "organizations:write" // OrganizationInvitationsReadScope is required for Organization invitation list and detail requests. OrganizationInvitationsReadScope PortalOpenAPIScope = "organization_invitations:read" // OrganizationInvitationsWriteScope is required for Organization invitation lifecycle requests. OrganizationInvitationsWriteScope PortalOpenAPIScope = "organization_invitations:write" // OrganizationMembersReadScope is required for Organization member list and detail requests. OrganizationMembersReadScope PortalOpenAPIScope = "organization_members:read" // OrganizationMembersWriteScope is required for Organization member role and removal requests. OrganizationMembersWriteScope PortalOpenAPIScope = "organization_members:write" // RolesReadScope is required for role list and detail requests. RolesReadScope PortalOpenAPIScope = "roles:read" // RolesWriteScope is required for role lifecycle requests. RolesWriteScope PortalOpenAPIScope = "roles:write" // PermissionsReadScope is required for permission list and detail requests. PermissionsReadScope PortalOpenAPIScope = "permissions:read" // PermissionsWriteScope is required for permission lifecycle requests. PermissionsWriteScope PortalOpenAPIScope = "permissions:write" // RolePermissionsReadScope is required for role binding list requests. RolePermissionsReadScope PortalOpenAPIScope = "role_permissions:read" // RolePermissionsWriteScope is required for role binding replacement. RolePermissionsWriteScope PortalOpenAPIScope = "role_permissions:write" // UserRolesReadScope is required for user assignment list requests. UserRolesReadScope PortalOpenAPIScope = "user_roles:read" // UserRolesWriteScope is required for user assignment lifecycle requests. UserRolesWriteScope PortalOpenAPIScope = "user_roles:write" )
type PortalOpenAPITokenError ¶
PortalOpenAPITokenError describes a failed /oauth2/token request or invalid token response.
func (*PortalOpenAPITokenError) Error ¶
func (e *PortalOpenAPITokenError) Error() string
func (*PortalOpenAPITokenError) Unwrap ¶
func (e *PortalOpenAPITokenError) Unwrap() error
Unwrap lets callers use errors.Is(err, ErrPortalOpenAPIToken).
type PreparedPermissionManifest ¶
type PreparedPermissionManifest struct {
Mode PermissionManifestMode `json:"mode"`
ManifestID string `json:"manifestId"`
Revision string `json:"revision"`
Fingerprint string `json:"fingerprint"`
Permissions []PermissionManifestDeclaration `json:"permissions"`
}
func PreparePermissionManifest ¶
func PreparePermissionManifest(manifest PermissionManifest, mode PermissionManifestMode) (PreparedPermissionManifest, error)
type PublicOrganizationInvitationAcceptResponse ¶
type PublicOrganizationInvitationAcceptResponse struct {
Status string `json:"status"`
Continuation string `json:"continuation,omitempty"`
ApplicationID string `json:"applicationId"`
OrganizationID string `json:"organizationId"`
OrganizationName string `json:"organizationName"`
Role string `json:"role"`
AcceptedAt string `json:"acceptedAt,omitempty"`
}
PublicOrganizationInvitationAcceptResponse is the invitation accept result.
type PublicOrganizationInvitationPreview ¶
type PublicOrganizationInvitationPreview struct {
ApplicationID string `json:"applicationId"`
ApplicationName string `json:"applicationName"`
OrganizationID string `json:"organizationId"`
OrganizationName string `json:"organizationName"`
InviteeEmail string `json:"inviteeEmail"`
Role string `json:"role"`
Status string `json:"status"`
ExpiresAt string `json:"expiresAt"`
}
PublicOrganizationInvitationPreview is the safe public invitation preview.
type RegistrationGrant ¶
type RegistrationGrant struct {
ID string `json:"id"`
Type RegistrationGrantType `json:"type"`
Status RegistrationGrantStatus `json:"status"`
DisplayName *string `json:"displayName"`
AllowedEmail *string `json:"allowedEmail"`
AllowedDomain *string `json:"allowedDomain"`
ExpiresAt *string `json:"expiresAt"`
MaxUses *int `json:"maxUses"`
UsedCount int `json:"usedCount"`
SourceType string `json:"sourceType"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
RevokedAt *string `json:"revokedAt"`
RevokeReason *string `json:"revokeReason"`
}
RegistrationGrant is a safe grant detail. It never contains a raw proof.
type RegistrationGrantListOptions ¶
type RegistrationGrantListOptions struct {
Type *RegistrationGrantType
Status *RegistrationGrantStatus
Search *string
Page *int
Size *int
}
RegistrationGrantListOptions filters the grant list using the API's page parameters.
type RegistrationGrantPage ¶
type RegistrationGrantPage struct {
Content []RegistrationGrant `json:"content"`
Page RegistrationGrantPageMetadata `json:"page"`
}
RegistrationGrantPage is a page of safe registration grants.
type RegistrationGrantPageMetadata ¶
type RegistrationGrantPageMetadata struct {
Size int `json:"size"`
Number int `json:"number"`
TotalElements int64 `json:"totalElements"`
TotalPages int `json:"totalPages"`
}
RegistrationGrantPageMetadata is the nested Spring PagedModel metadata.
type RegistrationGrantRedemption ¶
type RegistrationGrantRedemption struct {
ID string `json:"id"`
Result string `json:"result"`
Email *string `json:"email"`
AuthMethod *string `json:"authMethod"`
IDPID *string `json:"idpId"`
ClientID *string `json:"clientId"`
RedeemedAt string `json:"redeemedAt"`
FailureReason *string `json:"failureReason"`
}
RegistrationGrantRedemption is a safe masked redemption-history entry.
type RegistrationGrantRedemptionPage ¶
type RegistrationGrantRedemptionPage struct {
Content []RegistrationGrantRedemption `json:"content"`
Page RegistrationGrantPageMetadata `json:"page"`
}
RegistrationGrantRedemptionPage is a page of safe masked redemption history.
type RegistrationGrantStatus ¶
type RegistrationGrantStatus string
RegistrationGrantStatus is a safe lifecycle status returned by iam-portal.
const ( RegistrationGrantActive RegistrationGrantStatus = "ACTIVE" RegistrationGrantPaused RegistrationGrantStatus = "PAUSED" RegistrationGrantRedeemed RegistrationGrantStatus = "REDEEMED" RegistrationGrantExpired RegistrationGrantStatus = "EXPIRED" RegistrationGrantRevoked RegistrationGrantStatus = "REVOKED" )
type RegistrationGrantType ¶
type RegistrationGrantType string
RegistrationGrantType is one safe registration-grant type returned by the API.
const ( RegistrationGrantEmailLink RegistrationGrantType = "EMAIL_LINK" RegistrationGrantAccessCode RegistrationGrantType = "ACCESS_CODE" RegistrationGrantOrgInvitation RegistrationGrantType = "ORG_INVITATION" )
type ResolveMode ¶
type ResolveMode int
ResolveMode controls how the SDK loads role→permission mappings.
const ( // ResolveOnDemand resolves permissions on the first request for a role // set and caches the result. This is the default. ResolveOnDemand ResolveMode = iota // ResolveFullSync pre-loads every role→permission mapping at startup. ResolveFullSync )
type ResolvePermissionsRequest ¶
type ResolvePermissionsRequest struct {
ClientID string `json:"clientId"`
Roles []string `json:"roles"`
}
ResolvePermissionsRequest is the request body for /open/v1/permissions:resolve.
type ResolvePermissionsResponse ¶
type ResolvePermissionsResponse struct {
Permissions []string `json:"permissions"`
}
ResolvePermissionsResponse is the response body for /open/v1/permissions:resolve.
type Role ¶
type Role struct {
ID string `json:"id"`
Key string `json:"key"`
Name string `json:"name"`
Description *string `json:"description"`
System bool `json:"system"`
Version int64 `json:"version"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
ETag string `json:"-"`
}
Role is an Application-scoped role and its strong response ETag.
type RolePage ¶
type RolePage struct {
Content []Role `json:"content"`
Page AuthorizationPageMetadata `json:"page"`
}
RolePage is a deterministic page of roles.
type RolePermissionBinding ¶
type RolePermissionBinding struct {
RoleID string `json:"roleId"`
PermissionID string `json:"permissionId"`
CreatedAt string `json:"createdAt"`
}
RolePermissionBinding describes one persisted role-permission mapping.
type RolePermissionBindingPage ¶
type RolePermissionBindingPage struct {
Content []RolePermissionBinding `json:"content"`
Page AuthorizationPageMetadata `json:"page"`
ETag string `json:"-"`
}
RolePermissionBindingPage is a page of mappings plus the role ETag.
type RolePermissionSet ¶
type RolePermissionSet struct {
RoleID string `json:"roleId"`
PermissionIDs []string `json:"permissionIds"`
Version int64 `json:"version"`
ETag string `json:"-"`
}
RolePermissionSet is the replacement result and new role version/ETag.
type SDK ¶
type SDK struct {
// contains filtered or unexported fields
}
SDK is the high-level composite used by applications. It bundles a *Client, a JWT verifier, and a permission resolver.
Applications typically construct an SDK once at startup, install its Authenticate middleware on the router and use RequirePerm on individual routes.
func New ¶
New constructs an SDK from cfg. It:
- validates cfg
- creates an IAM client
- performs OIDC discovery to obtain jwks_uri
- builds the JWT verifier and HTTP-backed permission resolver
func (*SDK) AcceptOrganizationInvitation ¶
func (s *SDK) AcceptOrganizationInvitation(ctx context.Context, invitationToken, accessToken string) (*PublicOrganizationInvitationAcceptResponse, error)
AcceptOrganizationInvitation accepts or continues a public Organization invitation flow.
func (*SDK) Authenticate ¶
Authenticate returns a net/http middleware that validates the bearer JWT and injects an authz.User into the request context.
func (*SDK) ChangePassword ¶
func (s *SDK) ChangePassword(ctx context.Context, accessToken string, input PasswordChangeRequest) error
ChangePassword changes the current user's password with bearer auth.
func (*SDK) CheckAccountPermission ¶
func (s *SDK) CheckAccountPermission(ctx context.Context, accessToken, permission, organizationID string) (*PermissionCheckResponse, error)
CheckAccountPermission checks one permission through IAM.
func (*SDK) GetAccountPermissionSummary ¶
func (s *SDK) GetAccountPermissionSummary(ctx context.Context, accessToken, organizationID string) (*AccountPermissionSummary, error)
GetAccountPermissionSummary resolves current-user permissions in IAM.
func (*SDK) GetAccountSecuritySummary ¶
func (s *SDK) GetAccountSecuritySummary(ctx context.Context, accessToken string) (*AccountSecuritySummary, error)
GetAccountSecuritySummary returns a secret-free current-user security summary.
func (*SDK) GetCurrentAccountOrganization ¶
func (s *SDK) GetCurrentAccountOrganization(ctx context.Context, accessToken string) (*AccountOrganization, error)
GetCurrentAccountOrganization returns the selected Organization context, if any.
func (*SDK) GetMe ¶
func (s *SDK) GetMe(ctx context.Context, accessToken string, opts ...UserProfileOption) (*UserProfile, error)
GetMe returns the current user's latest profile from GET /api/v1/auth/me. It uses a short local cache keyed by request user id when available, or by a SHA-256 digest of the bearer token otherwise. Authorization checks should use FromContext and resolved permissions instead of this profile response. Profile metadata is not App User authorization attributes.
func (*SDK) HasAccountOrganizationMembership ¶
func (s *SDK) HasAccountOrganizationMembership(ctx context.Context, accessToken, organizationID string) (bool, error)
HasAccountOrganizationMembership derives membership from the Organization list.
func (*SDK) ListAccountOrganizations ¶
func (s *SDK) ListAccountOrganizations(ctx context.Context, accessToken string) ([]AccountOrganization, error)
ListAccountOrganizations lists the current user's Application-scoped Organizations.
func (*SDK) ListAccountSessions ¶
ListAccountSessions lists the current user's active sessions.
func (*SDK) LogoutAccount ¶
LogoutAccount logs out the current token/session and optionally revokes a refresh token.
func (*SDK) PreviewOrganizationInvitation ¶
func (s *SDK) PreviewOrganizationInvitation(ctx context.Context, invitationToken string) (*PublicOrganizationInvitationPreview, error)
PreviewOrganizationInvitation returns safe public invitation metadata without bearer auth.
func (*SDK) RequestPasswordReset ¶
RequestPasswordReset starts the opaque public forgot-password flow.
func (*SDK) RequireAllPerms ¶
func (s *SDK) RequireAllPerms(perms []authz.PermissionKey, opts ...middleware.Option) func(http.Handler) http.Handler
RequireAllPerms is shorthand for middleware.RequireAllPerms using this SDK.
func (*SDK) RequireAnyPerm ¶
func (s *SDK) RequireAnyPerm(perms []authz.PermissionKey, opts ...middleware.Option) func(http.Handler) http.Handler
RequireAnyPerm is shorthand for middleware.RequireAnyPerm using this SDK.
func (*SDK) RequireNoImpersonation ¶
RequireNoImpersonation is shorthand for middleware.RequireNoImpersonation using this SDK.
func (*SDK) RequirePerm ¶
func (s *SDK) RequirePerm(perm authz.PermissionKey, opts ...middleware.Option) func(http.Handler) http.Handler
RequirePerm is shorthand for middleware.RequirePerm using this SDK.
func (*SDK) RequireStepUp ¶
RequireStepUp is shorthand for middleware.RequireStepUp using this SDK.
func (*SDK) ResetPassword ¶
ResetPassword completes the public password reset flow.
func (*SDK) RevokeAccountSession ¶
RevokeAccountSession revokes one session owned by the current user.
func (*SDK) RevokeOtherAccountSessions ¶
RevokeOtherAccountSessions revokes all sessions except the current token's sid.
func (*SDK) SendEmailVerification ¶
func (s *SDK) SendEmailVerification(ctx context.Context, email string) (*EmailVerificationResponse, error)
SendEmailVerification starts the opaque public email verification send flow.
func (*SDK) SwitchAccountOrganization ¶
func (s *SDK) SwitchAccountOrganization(ctx context.Context, accessToken, organizationID string) (*OrganizationSwitchResponse, error)
SwitchAccountOrganization validates membership and returns a refresh/reauth continuation.
func (*SDK) UpdateAccountProfile ¶
func (s *SDK) UpdateAccountProfile(ctx context.Context, accessToken string, input AccountUpdateProfileRequest) (*UserProfile, error)
UpdateAccountProfile updates safe scalar profile fields for the current user.
func (*SDK) VerifyEmail ¶
VerifyEmail verifies a public email-verification token.
type SDKConfig ¶
type SDKConfig struct {
// Endpoint is the base URL of the IAM server, e.g. https://iam.example.com.
Endpoint string
// ClientID is ApplicationClient.clientId for the WEB/M2M confidential client
// used by this server-side SDK.
ClientID string
// ClientSecret authenticates the WEB/M2M confidential ApplicationClient.
ClientSecret string
// Audience expected in JWTs. Defaults to ClientID.
Audience string
// Issuer expected in JWTs. Defaults to Endpoint.
Issuer string
// JWKSRefresh is the interval at which the JWKS is refreshed. Default 1h.
JWKSRefresh time.Duration
// PermissionCacheTTL is the TTL of the role→permissions cache. Default 5m.
PermissionCacheTTL time.Duration
// PermissionCacheMax is the maximum number of cache entries. Default 10000.
PermissionCacheMax int64
// UserProfileCacheTTL is the TTL for explicit /api/v1/auth/me profile lookups. Default 1m.
UserProfileCacheTTL time.Duration
// UserProfileCacheMax is the maximum number of user profile cache entries. Default 10000.
UserProfileCacheMax int64
// DisableUserProfileCache disables caching for SDK.GetMe. Client.GetMe is always uncached.
DisableUserProfileCache bool
ResolveMode ResolveMode
FailMode FailMode
HTTPTimeout time.Duration // default 5s
MaxRetries int // default 3
}
SDKConfig is the runtime configuration accepted by New.
type SessionView ¶
type SessionView struct {
SessionID string `json:"sessionId"`
IPAddress string `json:"ipAddress,omitempty"`
UserAgent string `json:"userAgent,omitempty"`
DeviceID string `json:"deviceId,omitempty"`
CreatedAt string `json:"createdAt"`
LastSeenAt string `json:"lastSeenAt"`
Current bool `json:"current"`
}
SessionView is the current user's session/device view.
type UpdateOrganizationRequest ¶
type UpdateOrganizationRequest struct {
Name *string `json:"name,omitempty"`
Slug *string `json:"slug,omitempty"`
}
UpdateOrganizationRequest is the strict PATCH payload. Nil fields are omitted.
type UpdatePermissionRequest ¶
type UpdatePermissionRequest struct {
Name *string `json:"name,omitempty"`
Description *string `json:"description,omitempty"`
}
UpdatePermissionRequest is the strict permission PATCH payload.
type UpdateRoleRequest ¶
type UpdateRoleRequest struct {
Key *string `json:"key,omitempty"`
Name *string `json:"name,omitempty"`
Description *string `json:"description,omitempty"`
}
UpdateRoleRequest is the strict role PATCH payload.
type UpdateUserRoleRequest ¶
type UpdateUserRoleRequest struct {
Condition *UserRoleCondition `json:"condition"`
}
UpdateUserRoleRequest replaces an assignment condition.
type UserProfile ¶
type UserProfile struct {
ID string `json:"id,omitempty"` // legacy /api/v1/auth/me field
UserID string `json:"userId"`
ApplicationID string `json:"applicationId,omitempty"`
GlobalIdentityID string `json:"globalIdentityId,omitempty"`
Email string `json:"email"`
EmailVerified bool `json:"emailVerified"`
Username string `json:"username"`
DisplayName string `json:"displayName,omitempty"`
AvatarURL string `json:"avatarUrl,omitempty"`
Status string `json:"status"`
CreatedAt string `json:"createdAt,omitempty"`
UpdatedAt string `json:"updatedAt,omitempty"`
CurrentOrganization *AccountOrganization `json:"currentOrganization,omitempty"`
Roles []string `json:"roles,omitempty"` // legacy /api/v1/auth/me field
// Metadata is /api/v1/auth/me profile metadata, not app-scoped authorization attributes.
Metadata map[string]any `json:"metadata,omitempty"`
}
UserProfile is the response returned by GET /api/v1/auth/me/profile.
Metadata is profile metadata for display/profile reads. It is not App User authorization attributes and must not be used as an authorization source.
type UserProfileOption ¶
type UserProfileOption func(*userProfileOptions)
UserProfileOption configures SDK.GetMe profile lookup behavior.
func BypassProfileCache ¶
func BypassProfileCache() UserProfileOption
BypassProfileCache forces SDK.GetMe to call IAM even if a cached profile exists. The fresh result replaces the cached entry.
type UserRoleAssignment ¶
type UserRoleAssignment struct {
ID string `json:"id"`
UserID string `json:"userId"`
RoleID string `json:"roleId"`
OrganizationID *string `json:"organizationId"`
ConditionExpression *string `json:"conditionExpression"`
ConditionDescription *string `json:"conditionDescription"`
Version int64 `json:"version"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
ETag string `json:"-"`
}
UserRoleAssignment is an Application-scoped assignment with optimistic-lock state.
type UserRoleAssignmentPage ¶
type UserRoleAssignmentPage struct {
Content []UserRoleAssignment `json:"content"`
Page AuthorizationPageMetadata `json:"page"`
}
UserRoleAssignmentPage is a deterministic page of assignments.
type UserRoleCondition ¶
type UserRoleCondition struct {
Expression *string `json:"expression"`
Description *string `json:"description"`
}
UserRoleCondition carries the optional assignment expression and description.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package authz contains the permission model primitives used by the SDK: PermissionKey, PermissionDefinition, the Resolver interface that maps roles → permissions, and the context-aware HasPermission helper.
|
Package authz contains the permission model primitives used by the SDK: PermissionKey, PermissionDefinition, the Resolver interface that maps roles → permissions, and the context-aware HasPermission helper. |
|
chi
module
|
|
|
cmd
|
|
|
iam-codegen
command
iam-codegen generates constants locally and validates/upserts structured manifests explicitly.
|
iam-codegen generates constants locally and validates/upserts structured manifests explicitly. |
|
iam-codegen/generator
Package generator renders Go source files for declared IAM permission definitions and parses existing permission.go sources.
|
Package generator renders Go source files for declared IAM permission definitions and parses existing permission.go sources. |
|
echo
module
|
|
|
examples
|
|
|
shared-permissions
Code generated by iam-codegen from iam-permission-manifest.json.
|
Code generated by iam-codegen from iam-permission-manifest.json. |
|
gin
module
|
|
|
Package iamtest provides testing helpers for applications built on the IAM SDK: an httptest-backed mock IAM server, a MockResolver, and a context helper to inject roles/permissions into unit tests.
|
Package iamtest provides testing helpers for applications built on the IAM SDK: an httptest-backed mock IAM server, a MockResolver, and a context helper to inject roles/permissions into unit tests. |
|
Package iamjwt provides JWT verification against an IAM JWKS endpoint.
|
Package iamjwt provides JWT verification against an IAM JWKS endpoint. |
|
Package middleware provides framework-agnostic net/http middleware that wires the IAM SDK into any Go router.
|
Package middleware provides framework-agnostic net/http middleware that wires the IAM SDK into any Go router. |