From 1fde66f1aeb79eec552596e3ba5cc8cca71eadc8 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Thu, 23 Jul 2026 10:51:57 +0530 Subject: [PATCH 1/2] feat: close remaining API parity gaps, fix transport-layer bugs found against rc.7 Verified this SDK against a real quay.io/authorizer/authorizer:2.4.0-rc.7 instance across graphql/rest/grpc, closed the remaining API coverage gaps, and fixed several bugs found along the way. New coverage: - SAML IdP admin (create/update/delete/get/list service provider, rotate IdP cert, retire key, list keys, import SP metadata) - Org domains (request/verify/add-verified/delete/list) for home-realm discovery - WebAuthn/passkey and remaining MFA-setup public methods - ListUsersRequest: the proto's UsersRequest has a query substring-filter field with no prior Python equivalent; admin.users() only accepted the plain PaginatedRequest Bug fixes: - ADMIN_USERS GraphQL query declared $data: PaginatedRequest instead of ListUsersRequest (same defect independently present in the Go SDK), breaking admin user listing over graphql specifically. Caught by the live integration suite against rc.7, not a pre-existing test. - Client dataclass and its GraphQL fragment were both missing client_id (same defect independently present in Go and JS) -- from_dict's field filtering silently dropped it even when the server sent it. - Two unannotated `list[Any]` mypy errors in webauthn_credentials (client.py, async_client.py). - Finished wiring __all__ in __init__.py for types that were already imported (SAML IdP, org domains, WebAuthn, MFA-setup) but not yet exported. Regenerated vendored grpc stubs (src/authorizer/_grpc) to match the current server proto. Verified: ruff, mypy, and 112 unit tests clean; 63/63 live integration tests passing across graphql/rest/grpc against the real rc.7 image; and a gRPC-native service-to-service auth check (client_credentials token minted over REST, presented as raw gRPC metadata to CheckPermissions, authenticates correctly; negative control with no token correctly rejected). Unlike Go's SDK, this one recomputes x-authorizer-url fresh from config on every call (_core.build_headers / _grpc_transport. grpc_metadata) rather than caching it at construction time, so it was never exposed to the equivalent failure mode -- confirmed live, not just assumed from the architecture. --- src/authorizer/__init__.py | 82 +- src/authorizer/_core.py | 8 +- src/authorizer/_dispatch.py | 166 +++- .../_grpc/authorizer/v1/admin_pb2.py | 446 ++++++--- .../_grpc/authorizer/v1/admin_pb2_grpc.py | 913 ++++++++++++++++++ .../_grpc/authorizer/v1/annotations_pb2.py | 4 +- .../_grpc/authorizer/v1/authorizer_pb2.py | 176 ++-- .../authorizer/v1/authorizer_pb2_grpc.py | 195 ++++ .../_grpc/authorizer/v1/common_pb2.py | 4 +- .../_grpc/authorizer/v1/errors_pb2.py | 4 +- .../_grpc/authorizer/v1/pagination_pb2.py | 4 +- .../_grpc/authorizer/v1/types_pb2.py | 34 +- src/authorizer/_proto.py | 12 + src/authorizer/_queries.py | 132 ++- src/authorizer/admin_client.py | 111 ++- src/authorizer/async_admin_client.py | 121 ++- src/authorizer/async_client.py | 108 +++ src/authorizer/client.py | 100 ++ src/authorizer/types.py | 395 ++++++++ tests/test_admin_client.py | 9 +- tests/test_admin_parity.py | 37 +- tests/test_parity.py | 11 + 22 files changed, 2808 insertions(+), 264 deletions(-) diff --git a/src/authorizer/__init__.py b/src/authorizer/__init__.py index 554bca5..276a8cf 100644 --- a/src/authorizer/__init__.py +++ b/src/authorizer/__init__.py @@ -18,6 +18,7 @@ AddEmailTemplateRequest, AddOrgMemberRequest, AddTrustedIssuerRequest, + AddVerifiedOrgDomainRequest, AddWebhookRequest, AdminLoginRequest, AdminMeta, @@ -35,9 +36,11 @@ CreateOrganizationRequest, CreateOrgOIDCConnectionRequest, CreateOrgSAMLConnectionRequest, + CreateSAMLServiceProviderRequest, CreateScimEndpointRequest, CreateScimEndpointResponse, DeleteEmailTemplateRequest, + DeleteOrgDomainRequest, DeleteUserRequest, EmailTemplate, EmailTemplatesResponse, @@ -60,16 +63,22 @@ GetTokenRequest, GetTokenResponse, GetUserRequest, + ImportSAMLSPMetadataRequest, InviteMembersRequest, InviteMembersResponse, ListAuditLogRequest, ListClientsRequest, ListOrganizationsRequest, + ListOrgDomainsRequest, ListOrgMembersRequest, ListPermissionsRequest, ListPermissionsResponse, + ListSAMLIDPKeysRequest, + ListSAMLServiceProvidersRequest, ListTrustedIssuersRequest, + ListUsersRequest, ListWebhookLogRequest, + LockMfaRequest, LoginRequest, MagicLinkLoginRequest, MetaData, @@ -77,12 +86,16 @@ Organization, OrganizationRequest, OrganizationsResponse, + OrgDomain, + OrgDomainChallenge, + OrgDomainsResponse, OrgMember, OrgMembersResponse, OrgOIDCConnection, OrgOIDCConnectionRequest, OrgSAMLConnection, OrgSAMLConnectionRequest, + OtpMfaSetupRequest, PaginatedRequest, Pagination, PaginationRequest, @@ -90,15 +103,24 @@ PermissionCheckInput, PermissionCheckResult, RemoveOrgMemberRequest, + RequestOrgDomainRequest, ResendOTPRequest, ResendVerifyEmailRequest, ResetPasswordRequest, ResponseTypes, + RetireSAMLIDPKeyRequest, RevokeTokenRequest, + RotateSAMLIDPCertRequest, + SAMLIDPKey, + SAMLServiceProvider, + SAMLServiceProviderRequest, + SAMLServiceProvidersResponse, + SAMLSPMetadataParseResult, ScimEndpoint, ScimEndpointRequest, SessionQueryRequest, SignUpRequest, + SkipMfaSetupRequest, TestEndpointRequest, TestEndpointResponse, TokenType, @@ -112,10 +134,14 @@ UpdateOrgOIDCConnectionRequest, UpdateOrgSAMLConnectionRequest, UpdateProfileRequest, + UpdateSAMLServiceProviderRequest, UpdateTrustedIssuerRequest, UpdateUserRequest, UpdateWebhookRequest, User, + UserOrganization, + UserOrganizationsRequest, + UserOrganizationsResponse, UsersResponse, ValidateJWTTokenRequest, ValidateJWTTokenResponse, @@ -124,7 +150,16 @@ VerificationRequest, VerificationRequestsResponse, VerifyEmailRequest, + VerifyOrgDomainRequest, VerifyOTPRequest, + WebauthnCredentialInfo, + WebauthnDeleteCredentialRequest, + WebauthnLoginOptionsRequest, + WebauthnLoginOptionsResponse, + WebauthnLoginVerifyRequest, + WebauthnRegistrationOptionsRequest, + WebauthnRegistrationOptionsResponse, + WebauthnRegistrationVerifyRequest, Webhook, WebhookLog, WebhookLogsResponse, @@ -135,21 +170,22 @@ __version__ = "0.1.0" __all__ = [ - "AuthorizerClient", - "AsyncAuthorizerClient", - "AuthorizerAdminClient", - "AsyncAuthorizerAdminClient", - "AuthorizerError", - "AuthorizerConnectionError", "AddEmailTemplateRequest", "AddOrgMemberRequest", "AddTrustedIssuerRequest", + "AddVerifiedOrgDomainRequest", "AddWebhookRequest", "AdminLoginRequest", "AdminMeta", "AdminSignupRequest", + "AsyncAuthorizerAdminClient", + "AsyncAuthorizerClient", "AuditLog", "AuditLogsResponse", + "AuthorizerAdminClient", + "AuthorizerClient", + "AuthorizerConnectionError", + "AuthorizerError", "AuthToken", "CheckPermissionsRequest", "CheckPermissionsResponse", @@ -162,9 +198,11 @@ "CreateOrganizationRequest", "CreateOrgOIDCConnectionRequest", "CreateOrgSAMLConnectionRequest", + "CreateSAMLServiceProviderRequest", "CreateScimEndpointRequest", "CreateScimEndpointResponse", "DeleteEmailTemplateRequest", + "DeleteOrgDomainRequest", "DeleteUserRequest", "EmailTemplate", "EmailTemplatesResponse", @@ -191,16 +229,22 @@ "GRANT_TYPE_CLIENT_CREDENTIALS", "GRANT_TYPE_REFRESH_TOKEN", "GRANT_TYPE_TOKEN_EXCHANGE", + "ImportSAMLSPMetadataRequest", "InviteMembersRequest", "InviteMembersResponse", "ListAuditLogRequest", "ListClientsRequest", "ListOrganizationsRequest", + "ListOrgDomainsRequest", "ListOrgMembersRequest", "ListPermissionsRequest", "ListPermissionsResponse", + "ListSAMLIDPKeysRequest", + "ListSAMLServiceProvidersRequest", "ListTrustedIssuersRequest", + "ListUsersRequest", "ListWebhookLogRequest", + "LockMfaRequest", "LoginRequest", "MagicLinkLoginRequest", "MetaData", @@ -208,12 +252,16 @@ "Organization", "OrganizationRequest", "OrganizationsResponse", + "OrgDomain", + "OrgDomainChallenge", + "OrgDomainsResponse", "OrgMember", "OrgMembersResponse", "OrgOIDCConnection", "OrgOIDCConnectionRequest", "OrgSAMLConnection", "OrgSAMLConnectionRequest", + "OtpMfaSetupRequest", "PaginatedRequest", "Pagination", "PaginationRequest", @@ -221,15 +269,24 @@ "PermissionCheckInput", "PermissionCheckResult", "RemoveOrgMemberRequest", + "RequestOrgDomainRequest", "ResendOTPRequest", "ResendVerifyEmailRequest", "ResetPasswordRequest", "ResponseTypes", + "RetireSAMLIDPKeyRequest", "RevokeTokenRequest", + "RotateSAMLIDPCertRequest", + "SAMLIDPKey", + "SAMLServiceProvider", + "SAMLServiceProviderRequest", + "SAMLServiceProvidersResponse", + "SAMLSPMetadataParseResult", "ScimEndpoint", "ScimEndpointRequest", "SessionQueryRequest", "SignUpRequest", + "SkipMfaSetupRequest", "TestEndpointRequest", "TestEndpointResponse", "TOKEN_TYPE_ACCESS_TOKEN", @@ -245,10 +302,14 @@ "UpdateOrgOIDCConnectionRequest", "UpdateOrgSAMLConnectionRequest", "UpdateProfileRequest", + "UpdateSAMLServiceProviderRequest", "UpdateTrustedIssuerRequest", "UpdateUserRequest", "UpdateWebhookRequest", "User", + "UserOrganization", + "UserOrganizationsRequest", + "UserOrganizationsResponse", "UsersResponse", "ValidateJWTTokenRequest", "ValidateJWTTokenResponse", @@ -257,7 +318,16 @@ "VerificationRequest", "VerificationRequestsResponse", "VerifyEmailRequest", + "VerifyOrgDomainRequest", "VerifyOTPRequest", + "WebauthnCredentialInfo", + "WebauthnDeleteCredentialRequest", + "WebauthnLoginOptionsRequest", + "WebauthnLoginOptionsResponse", + "WebauthnLoginVerifyRequest", + "WebauthnRegistrationOptionsRequest", + "WebauthnRegistrationOptionsResponse", + "WebauthnRegistrationVerifyRequest", "Webhook", "WebhookLog", "WebhookLogsResponse", diff --git a/src/authorizer/_core.py b/src/authorizer/_core.py index 18c2f42..ea100f0 100644 --- a/src/authorizer/_core.py +++ b/src/authorizer/_core.py @@ -148,7 +148,13 @@ def prepare_http( config.authorizer_url, spec.rest_method, spec.rest_path, body, full_headers ) return req, "rest", spec.rest_unwrap - variables = {"data": data} if data is not None else None + # gql_flat_vars: a handful of GraphQL fields (webauthn_* ceremonies) take + # top-level scalar args instead of a single ``params: X`` input object, so + # the query variables ARE the data dict, not {"data": data}. + if spec.gql_flat_vars: + variables = data or None + else: + variables = {"data": data} if data is not None else None req = build_graphql_request(config.authorizer_url, spec.gql_query, variables, full_headers) return req, "graphql", spec.gql_field diff --git a/src/authorizer/_dispatch.py b/src/authorizer/_dispatch.py index 3025fc9..d022c81 100644 --- a/src/authorizer/_dispatch.py +++ b/src/authorizer/_dispatch.py @@ -28,6 +28,10 @@ class MethodSpec: grpc_method: str | None = None grpc_request: str | None = None grpc_response_unwrap: str | None = None + # gql_flat_vars: True for the handful of GraphQL fields (webauthn_* + # ceremonies) that take top-level scalar args instead of a single + # ``params: X`` input object — see _core.prepare_http. + gql_flat_vars: bool = False ALL = ("graphql", "rest", "grpc") @@ -121,6 +125,42 @@ class MethodSpec: ALL, q.LIST_PERMISSIONS, "list_permissions", "POST", "/v1/list_permissions", None, "ListPermissions", "ListPermissionsRequest", None, ), + "skip_mfa_setup": MethodSpec( + ALL, q.SKIP_MFA_SETUP, "skip_mfa_setup", "POST", "/v1/skip_mfa_setup", None, + "SkipMfaSetup", "SkipMfaSetupRequest", None, + ), + "lock_mfa": MethodSpec( + ALL, q.LOCK_MFA, "lock_mfa", "POST", "/v1/lock_mfa", None, + "LockMfa", "LockMfaRequest", None, + ), + "email_otp_mfa_setup": MethodSpec( + ALL, q.EMAIL_OTP_MFA_SETUP, "email_otp_mfa_setup", + "POST", "/v1/email_otp_mfa_setup", None, + "EmailOtpMfaSetup", "EmailOtpMfaSetupRequest", None, + ), + "sms_otp_mfa_setup": MethodSpec( + ALL, q.SMS_OTP_MFA_SETUP, "sms_otp_mfa_setup", "POST", "/v1/sms_otp_mfa_setup", None, + "SmsOtpMfaSetup", "SmsOtpMfaSetupRequest", None, + ), + # WebAuthn/passkeys + TOTP setup: graphql-only on the server (no proto RPC). + "totp_mfa_setup": MethodSpec(GQL_ONLY, q.TOTP_MFA_SETUP, "totp_mfa_setup"), + "webauthn_registration_options": MethodSpec( + GQL_ONLY, q.WEBAUTHN_REGISTRATION_OPTIONS, "webauthn_registration_options", + gql_flat_vars=True, + ), + "webauthn_registration_verify": MethodSpec( + GQL_ONLY, q.WEBAUTHN_REGISTRATION_VERIFY, "webauthn_registration_verify" + ), + "webauthn_login_options": MethodSpec( + GQL_ONLY, q.WEBAUTHN_LOGIN_OPTIONS, "webauthn_login_options", gql_flat_vars=True + ), + "webauthn_login_verify": MethodSpec( + GQL_ONLY, q.WEBAUTHN_LOGIN_VERIFY, "webauthn_login_verify" + ), + "webauthn_delete_credential": MethodSpec( + GQL_ONLY, q.WEBAUTHN_DELETE_CREDENTIAL, "webauthn_delete_credential", gql_flat_vars=True + ), + "webauthn_credentials": MethodSpec(GQL_ONLY, q.WEBAUTHN_CREDENTIALS, "webauthn_credentials"), } @@ -267,27 +307,121 @@ class MethodSpec: "admin_signup": MethodSpec(GQL_ONLY, q.ADMIN_SIGNUP, "_admin_signup"), "update_env": MethodSpec(GQL_ONLY, q.ADMIN_UPDATE_ENV, "_update_env"), "generate_jwt_keys": MethodSpec(GQL_ONLY, q.ADMIN_GENERATE_JWT_KEYS, "_generate_jwt_keys"), - # Machine-agent-identity ops. Orgs/SSO/SCIM are graphql-only on the server. - # Clients + trusted issuers DO have proto RPCs server-side, but the vendored - # stubs (src/authorizer/_grpc) predate them — rest/grpc stay off until the - # stubs are re-vendored, so all of these are graphql-only for now. - "create_client": MethodSpec(GQL_ONLY, q.ADMIN_CREATE_CLIENT, "_create_client"), - "update_client": MethodSpec(GQL_ONLY, q.ADMIN_UPDATE_CLIENT, "_update_client"), - "delete_client": MethodSpec(GQL_ONLY, q.ADMIN_DELETE_CLIENT, "_delete_client"), + # Machine-agent-identity ops. Orgs/SSO/SCIM/user_organizations/org_domains + # are graphql-only on the server. Clients + trusted issuers DO have proto + # RPCs server-side and the vendored stubs now carry them (re-vendored from + # proto/buf.gen.clients.yaml at server HEAD ca628cee) -- ALL 3 protocols. + # CreateClientResponse/RotateClientSecretRequest->CreateClientResponse carry + # TWO top-level fields (client, client_secret) -- unwrap=None, whole message. + "create_client": MethodSpec( + ALL, q.ADMIN_CREATE_CLIENT, "_create_client", "POST", "/v1/admin/create_client", None, + "CreateClient", "CreateClientRequest", None, + ), + "update_client": MethodSpec( + ALL, q.ADMIN_UPDATE_CLIENT, "_update_client", "POST", "/v1/admin/update_client", "client", + "UpdateClient", "UpdateClientRequest", "client", + ), + "delete_client": MethodSpec( + ALL, q.ADMIN_DELETE_CLIENT, "_delete_client", "POST", "/v1/admin/delete_client", None, + "DeleteClient", "DeleteClientRequest", None, + ), "rotate_client_secret": MethodSpec( - GQL_ONLY, q.ADMIN_ROTATE_CLIENT_SECRET, "_rotate_client_secret" + ALL, q.ADMIN_ROTATE_CLIENT_SECRET, "_rotate_client_secret", + "POST", "/v1/admin/rotate_client_secret", None, + "RotateClientSecret", "RotateClientSecretRequest", None, + ), + "get_client": MethodSpec( + ALL, q.ADMIN_GET_CLIENT, "_client", "POST", "/v1/admin/client", "client", + "GetClient", "GetClientRequest", "client", + ), + "clients": MethodSpec( + ALL, q.ADMIN_CLIENTS, "_clients", "POST", "/v1/admin/clients", None, + "Clients", "ClientsRequest", None, + ), + "add_trusted_issuer": MethodSpec( + ALL, q.ADMIN_ADD_TRUSTED_ISSUER, "_add_trusted_issuer", + "POST", "/v1/admin/add_trusted_issuer", "trusted_issuer", + "AddTrustedIssuer", "AddTrustedIssuerRequest", "trusted_issuer", ), - "get_client": MethodSpec(GQL_ONLY, q.ADMIN_GET_CLIENT, "_client"), - "clients": MethodSpec(GQL_ONLY, q.ADMIN_CLIENTS, "_clients"), - "add_trusted_issuer": MethodSpec(GQL_ONLY, q.ADMIN_ADD_TRUSTED_ISSUER, "_add_trusted_issuer"), "update_trusted_issuer": MethodSpec( - GQL_ONLY, q.ADMIN_UPDATE_TRUSTED_ISSUER, "_update_trusted_issuer" + ALL, q.ADMIN_UPDATE_TRUSTED_ISSUER, "_update_trusted_issuer", + "POST", "/v1/admin/update_trusted_issuer", "trusted_issuer", + "UpdateTrustedIssuer", "UpdateTrustedIssuerRequest", "trusted_issuer", ), "delete_trusted_issuer": MethodSpec( - GQL_ONLY, q.ADMIN_DELETE_TRUSTED_ISSUER, "_delete_trusted_issuer" - ), - "get_trusted_issuer": MethodSpec(GQL_ONLY, q.ADMIN_GET_TRUSTED_ISSUER, "_trusted_issuer"), - "trusted_issuers": MethodSpec(GQL_ONLY, q.ADMIN_TRUSTED_ISSUERS, "_trusted_issuers"), + ALL, q.ADMIN_DELETE_TRUSTED_ISSUER, "_delete_trusted_issuer", + "POST", "/v1/admin/delete_trusted_issuer", None, + "DeleteTrustedIssuer", "DeleteTrustedIssuerRequest", None, + ), + "get_trusted_issuer": MethodSpec( + ALL, q.ADMIN_GET_TRUSTED_ISSUER, "_trusted_issuer", + "POST", "/v1/admin/trusted_issuer", "trusted_issuer", + "GetTrustedIssuer", "GetTrustedIssuerRequest", "trusted_issuer", + ), + "trusted_issuers": MethodSpec( + ALL, q.ADMIN_TRUSTED_ISSUERS, "_trusted_issuers", + "POST", "/v1/admin/trusted_issuers", None, + "TrustedIssuers", "TrustedIssuersRequest", None, + ), + # SAML IdP (Authorizer as Identity Provider for downstream SPs). + "create_saml_service_provider": MethodSpec( + ALL, q.ADMIN_CREATE_SAML_SERVICE_PROVIDER, "_create_saml_service_provider", + "POST", "/v1/admin/create_saml_service_provider", "saml_service_provider", + "CreateSamlServiceProvider", "CreateSamlServiceProviderRequest", "saml_service_provider", + ), + "update_saml_service_provider": MethodSpec( + ALL, q.ADMIN_UPDATE_SAML_SERVICE_PROVIDER, "_update_saml_service_provider", + "POST", "/v1/admin/update_saml_service_provider", "saml_service_provider", + "UpdateSamlServiceProvider", "UpdateSamlServiceProviderRequest", "saml_service_provider", + ), + "delete_saml_service_provider": MethodSpec( + ALL, q.ADMIN_DELETE_SAML_SERVICE_PROVIDER, "_delete_saml_service_provider", + "POST", "/v1/admin/delete_saml_service_provider", None, + "DeleteSamlServiceProvider", "DeleteSamlServiceProviderRequest", None, + ), + "get_saml_service_provider": MethodSpec( + ALL, q.ADMIN_GET_SAML_SERVICE_PROVIDER, "_saml_service_provider", + "POST", "/v1/admin/saml_service_provider", "saml_service_provider", + "GetSamlServiceProvider", "GetSamlServiceProviderRequest", "saml_service_provider", + ), + "list_saml_service_providers": MethodSpec( + ALL, q.ADMIN_LIST_SAML_SERVICE_PROVIDERS, "_list_saml_service_providers", + "POST", "/v1/admin/saml_service_providers", None, + "ListSamlServiceProviders", "ListSamlServiceProvidersRequest", None, + ), + "rotate_saml_idp_cert": MethodSpec( + ALL, q.ADMIN_ROTATE_SAML_IDP_CERT, "_rotate_saml_idp_cert", + "POST", "/v1/admin/rotate_saml_idp_cert", "saml_idp_key", + "RotateSamlIdpCert", "RotateSamlIdpCertRequest", "saml_idp_key", + ), + "retire_saml_idp_key": MethodSpec( + ALL, q.ADMIN_RETIRE_SAML_IDP_KEY, "_retire_saml_idp_key", + "POST", "/v1/admin/retire_saml_idp_key", None, + "RetireSamlIdpKey", "RetireSamlIdpKeyRequest", None, + ), + "list_saml_idp_keys": MethodSpec( + ALL, q.ADMIN_LIST_SAML_IDP_KEYS, "_list_saml_idp_keys", + "POST", "/v1/admin/saml_idp_keys", None, + "ListSamlIdpKeys", "ListSamlIdpKeysRequest", None, + ), + "import_saml_sp_metadata": MethodSpec( + ALL, q.ADMIN_IMPORT_SAML_SP_METADATA, "_import_saml_sp_metadata", + "POST", "/v1/admin/import_saml_sp_metadata", "result", + "ImportSamlSpMetadata", "ImportSamlSpMetadataRequest", "result", + ), + # user_organizations / org domains: graphql-only on the server (no proto RPC). + "user_organizations": MethodSpec( + GQL_ONLY, q.ADMIN_USER_ORGANIZATIONS, "_user_organizations" + ), + "request_org_domain": MethodSpec( + GQL_ONLY, q.ADMIN_REQUEST_ORG_DOMAIN, "_request_org_domain" + ), + "verify_org_domain": MethodSpec(GQL_ONLY, q.ADMIN_VERIFY_ORG_DOMAIN, "_verify_org_domain"), + "add_verified_org_domain": MethodSpec( + GQL_ONLY, q.ADMIN_ADD_VERIFIED_ORG_DOMAIN, "_add_verified_org_domain" + ), + "delete_org_domain": MethodSpec(GQL_ONLY, q.ADMIN_DELETE_ORG_DOMAIN, "_delete_org_domain"), + "org_domains": MethodSpec(GQL_ONLY, q.ADMIN_ORG_DOMAINS, "_org_domains"), "create_organization": MethodSpec( GQL_ONLY, q.ADMIN_CREATE_ORGANIZATION, "_create_organization" ), diff --git a/src/authorizer/_grpc/authorizer/v1/admin_pb2.py b/src/authorizer/_grpc/authorizer/v1/admin_pb2.py index a5627d0..3a63e1b 100644 --- a/src/authorizer/_grpc/authorizer/v1/admin_pb2.py +++ b/src/authorizer/_grpc/authorizer/v1/admin_pb2.py @@ -30,14 +30,14 @@ from authorizer._grpc.google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x61uthorizer/v1/admin.proto\x12\rauthorizer.v1\x1a\x1f\x61uthorizer/v1/annotations.proto\x1a\x1a\x61uthorizer/v1/common.proto\x1a\x1e\x61uthorizer/v1/pagination.proto\x1a\x19\x61uthorizer/v1/types.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\"?\n\x11\x41\x64minLoginRequest\x12*\n\x0c\x61\x64min_secret\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x61\x64minSecret\".\n\x12\x41\x64minLoginResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x14\n\x12\x41\x64minLogoutRequest\"/\n\x13\x41\x64minLogoutResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x15\n\x13\x41\x64minSessionRequest\"0\n\x14\x41\x64minSessionResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x12\n\x10\x41\x64minMetaRequest\"L\n\x11\x41\x64minMetaResponse\x12\x37\n\nadmin_meta\x18\x01 \x01(\x0b\x32\x18.authorizer.v1.AdminMetaR\tadminMeta\"o\n\tAdminMeta\x12\x14\n\x05roles\x18\x01 \x03(\tR\x05roles\x12#\n\rdefault_roles\x18\x02 \x03(\tR\x0c\x64\x65\x66\x61ultRoles\x12\'\n\x0fprotected_roles\x18\x03 \x03(\tR\x0eprotectedRoles\"P\n\x0cUsersRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"u\n\rUsersResponse\x12)\n\x05users\x18\x01 \x03(\x0b\x32\x13.authorizer.v1.UserR\x05users\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"3\n\x0bUserRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\"7\n\x0cUserResponse\x12\'\n\x04user\x18\x01 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"\x9c\x06\n\x11UpdateUserRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x19\n\x05\x65mail\x18\x02 \x01(\tH\x00R\x05\x65mail\x88\x01\x01\x12*\n\x0e\x65mail_verified\x18\x03 \x01(\x08H\x01R\remailVerified\x88\x01\x01\x12\"\n\ngiven_name\x18\x04 \x01(\tH\x02R\tgivenName\x88\x01\x01\x12$\n\x0b\x66\x61mily_name\x18\x05 \x01(\tH\x03R\nfamilyName\x88\x01\x01\x12$\n\x0bmiddle_name\x18\x06 \x01(\tH\x04R\nmiddleName\x88\x01\x01\x12\x1f\n\x08nickname\x18\x07 \x01(\tH\x05R\x08nickname\x88\x01\x01\x12\x1b\n\x06gender\x18\x08 \x01(\tH\x06R\x06gender\x88\x01\x01\x12!\n\tbirthdate\x18\t \x01(\tH\x07R\tbirthdate\x88\x01\x01\x12&\n\x0cphone_number\x18\n \x01(\tH\x08R\x0bphoneNumber\x88\x01\x01\x12\x37\n\x15phone_number_verified\x18\x0b \x01(\x08H\tR\x13phoneNumberVerified\x88\x01\x01\x12\x1d\n\x07picture\x18\x0c \x01(\tH\nR\x07picture\x88\x01\x01\x12\x14\n\x05roles\x18\r \x03(\tR\x05roles\x12\x43\n\x1cis_multi_factor_auth_enabled\x18\x0e \x01(\x08H\x0bR\x18isMultiFactorAuthEnabled\x88\x01\x01\x12\x31\n\x08\x61pp_data\x18\x0f \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppDataB\x08\n\x06_emailB\x11\n\x0f_email_verifiedB\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x0e\n\x0c_middle_nameB\x0b\n\t_nicknameB\t\n\x07_genderB\x0c\n\n_birthdateB\x0f\n\r_phone_numberB\x18\n\x16_phone_number_verifiedB\n\n\x08_pictureB\x1f\n\x1d_is_multi_factor_auth_enabled\"=\n\x12UpdateUserResponse\x12\'\n\x04user\x18\x01 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"2\n\x11\x44\x65leteUserRequest\x12\x1d\n\x05\x65mail\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05\x65mail\".\n\x12\x44\x65leteUserResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"_\n\x1bVerificationRequestsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\xb2\x01\n\x1cVerificationRequestsResponse\x12W\n\x15verification_requests\x18\x01 \x03(\x0b\x32\".authorizer.v1.VerificationRequestR\x14verificationRequests\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x82\x02\n\x13VerificationRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x14\n\x05\x65mail\x18\x04 \x01(\tR\x05\x65mail\x12\x18\n\x07\x65xpires\x18\x05 \x01(\x03R\x07\x65xpires\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\x12\x14\n\x05nonce\x18\x08 \x01(\tR\x05nonce\x12!\n\x0credirect_uri\x18\t \x01(\tR\x0bredirectUri\"7\n\x13RevokeAccessRequest\x12 \n\x07user_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"0\n\x14RevokeAccessResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"7\n\x13\x45nableAccessRequest\x12 \n\x07user_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"0\n\x14\x45nableAccessResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"g\n\x14InviteMembersRequest\x12\x16\n\x06\x65mails\x18\x01 \x03(\tR\x06\x65mails\x12&\n\x0credirect_uri\x18\x02 \x01(\tH\x00R\x0bredirectUri\x88\x01\x01\x42\x0f\n\r_redirect_uri\"\\\n\x15InviteMembersResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12)\n\x05users\x18\x02 \x03(\x0b\x32\x13.authorizer.v1.UserR\x05users\"\x8b\x02\n\x07Webhook\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\nevent_name\x18\x02 \x01(\tR\teventName\x12+\n\x11\x65vent_description\x18\x03 \x01(\tR\x10\x65ventDescription\x12\x1a\n\x08\x65ndpoint\x18\x04 \x01(\tR\x08\x65ndpoint\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x30\n\x07headers\x18\x06 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headers\x12\x1d\n\ncreated_at\x18\x07 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x08 \x01(\x03R\tupdatedAt\"\xd0\x01\n\nWebhookLog\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1f\n\x0bhttp_status\x18\x02 \x01(\x03R\nhttpStatus\x12\x1a\n\x08response\x18\x03 \x01(\tR\x08response\x12\x18\n\x07request\x18\x04 \x01(\tR\x07request\x12\x1d\n\nwebhook_id\x18\x05 \x01(\tR\twebhookId\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"\xf4\x01\n\x11\x41\x64\x64WebhookRequest\x12&\n\nevent_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12\x30\n\x11\x65vent_description\x18\x02 \x01(\tH\x00R\x10\x65ventDescription\x88\x01\x01\x12#\n\x08\x65ndpoint\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ndpoint\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12\x30\n\x07headers\x18\x05 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\x14\n\x12_event_description\".\n\x12\x41\x64\x64WebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xb5\x02\n\x14UpdateWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\"\n\nevent_name\x18\x02 \x01(\tH\x00R\teventName\x88\x01\x01\x12\x30\n\x11\x65vent_description\x18\x03 \x01(\tH\x01R\x10\x65ventDescription\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x04 \x01(\tH\x02R\x08\x65ndpoint\x88\x01\x01\x12\x1d\n\x07\x65nabled\x18\x05 \x01(\x08H\x03R\x07\x65nabled\x88\x01\x01\x12\x30\n\x07headers\x18\x06 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\r\n\x0b_event_nameB\x14\n\x12_event_descriptionB\x0b\n\t_endpointB\n\n\x08_enabled\"1\n\x15UpdateWebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"/\n\x14\x44\x65leteWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"1\n\x15\x44\x65leteWebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\",\n\x11GetWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"F\n\x12GetWebhookResponse\x12\x30\n\x07webhook\x18\x01 \x01(\x0b\x32\x16.authorizer.v1.WebhookR\x07webhook\"S\n\x0fWebhooksRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\x81\x01\n\x10WebhooksResponse\x12\x32\n\x08webhooks\x18\x01 \x03(\x0b\x32\x16.authorizer.v1.WebhookR\x08webhooks\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x89\x01\n\x12WebhookLogsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\"\n\nwebhook_id\x18\x02 \x01(\tH\x00R\twebhookId\x88\x01\x01\x42\r\n\x0b_webhook_id\"\x8e\x01\n\x13WebhookLogsResponse\x12<\n\x0cwebhook_logs\x18\x01 \x03(\x0b\x32\x19.authorizer.v1.WebhookLogR\x0bwebhookLogs\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xdc\x01\n\x13TestEndpointRequest\x12#\n\x08\x65ndpoint\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ndpoint\x12&\n\nevent_name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12\x30\n\x11\x65vent_description\x18\x03 \x01(\tH\x00R\x10\x65ventDescription\x88\x01\x01\x12\x30\n\x07headers\x18\x04 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\x14\n\x12_event_description\"S\n\x14TestEndpointResponse\x12\x1f\n\x0bhttp_status\x18\x01 \x01(\x03R\nhttpStatus\x12\x1a\n\x08response\x18\x02 \x01(\tR\x08response\"\xca\x01\n\rEmailTemplate\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\nevent_name\x18\x02 \x01(\tR\teventName\x12\x1a\n\x08template\x18\x03 \x01(\tR\x08template\x12\x16\n\x06\x64\x65sign\x18\x04 \x01(\tR\x06\x64\x65sign\x12\x18\n\x07subject\x18\x05 \x01(\tR\x07subject\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"\xb1\x01\n\x17\x41\x64\x64\x45mailTemplateRequest\x12&\n\nevent_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12!\n\x07subject\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07subject\x12#\n\x08template\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08template\x12\x1b\n\x06\x64\x65sign\x18\x04 \x01(\tH\x00R\x06\x64\x65sign\x88\x01\x01\x42\t\n\x07_design\"4\n\x18\x41\x64\x64\x45mailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xe9\x01\n\x1aUpdateEmailTemplateRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\"\n\nevent_name\x18\x02 \x01(\tH\x00R\teventName\x88\x01\x01\x12\x1f\n\x08template\x18\x03 \x01(\tH\x01R\x08template\x88\x01\x01\x12\x1d\n\x07subject\x18\x04 \x01(\tH\x02R\x07subject\x88\x01\x01\x12\x1b\n\x06\x64\x65sign\x18\x05 \x01(\tH\x03R\x06\x64\x65sign\x88\x01\x01\x42\r\n\x0b_event_nameB\x0b\n\t_templateB\n\n\x08_subjectB\t\n\x07_design\"7\n\x1bUpdateEmailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"5\n\x1a\x44\x65leteEmailTemplateRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"7\n\x1b\x44\x65leteEmailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"Y\n\x15\x45mailTemplatesRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\x9a\x01\n\x16\x45mailTemplatesResponse\x12\x45\n\x0f\x65mail_templates\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.EmailTemplateR\x0e\x65mailTemplates\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xcc\x02\n\x08\x41uditLog\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x1d\n\nactor_type\x18\x03 \x01(\tR\tactorType\x12\x1f\n\x0b\x61\x63tor_email\x18\x04 \x01(\tR\nactorEmail\x12\x16\n\x06\x61\x63tion\x18\x05 \x01(\tR\x06\x61\x63tion\x12#\n\rresource_type\x18\x06 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12\x1d\n\nip_address\x18\x08 \x01(\tR\tipAddress\x12\x1d\n\nuser_agent\x18\t \x01(\tR\tuserAgent\x12\x1a\n\x08metadata\x18\n \x01(\tR\x08metadata\x12\x1d\n\ncreated_at\x18\x0b \x01(\x03R\tcreatedAt\"\x93\x03\n\x10\x41uditLogsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\x1b\n\x06\x61\x63tion\x18\x02 \x01(\tH\x00R\x06\x61\x63tion\x88\x01\x01\x12\x1e\n\x08\x61\x63tor_id\x18\x03 \x01(\tH\x01R\x07\x61\x63torId\x88\x01\x01\x12(\n\rresource_type\x18\x04 \x01(\tH\x02R\x0cresourceType\x88\x01\x01\x12$\n\x0bresource_id\x18\x05 \x01(\tH\x03R\nresourceId\x88\x01\x01\x12*\n\x0e\x66rom_timestamp\x18\x06 \x01(\x03H\x04R\rfromTimestamp\x88\x01\x01\x12&\n\x0cto_timestamp\x18\x07 \x01(\x03H\x05R\x0btoTimestamp\x88\x01\x01\x42\t\n\x07_actionB\x0b\n\t_actor_idB\x10\n\x0e_resource_typeB\x0e\n\x0c_resource_idB\x11\n\x0f_from_timestampB\x0f\n\r_to_timestamp\"\x86\x01\n\x11\x41uditLogsResponse\x12\x36\n\naudit_logs\x18\x01 \x03(\x0b\x32\x17.authorizer.v1.AuditLogR\tauditLogs\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\",\n\x08\x46gaModel\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03\x64sl\x18\x02 \x01(\tR\x03\x64sl\"R\n\x08\x46gaTuple\x12\x12\n\x04user\x18\x01 \x01(\tR\x04user\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x03 \x01(\tR\x06object\"\x14\n\x12\x46gaGetModelRequest\"D\n\x13\x46gaGetModelResponse\x12-\n\x05model\x18\x01 \x01(\x0b\x32\x17.authorizer.v1.FgaModelR\x05model\"1\n\x14\x46gaWriteModelRequest\x12\x19\n\x03\x64sl\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x03\x64sl\"F\n\x15\x46gaWriteModelResponse\x12-\n\x05model\x18\x01 \x01(\x0b\x32\x17.authorizer.v1.FgaModelR\x05model\"M\n\x15\x46gaWriteTuplesRequest\x12\x34\n\x06tuples\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x06tuples\"2\n\x16\x46gaWriteTuplesResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"N\n\x16\x46gaDeleteTuplesRequest\x12\x34\n\x06tuples\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x06tuples\"3\n\x17\x46gaDeleteTuplesResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x89\x02\n\x14\x46gaReadTuplesRequest\x12\x17\n\x04user\x18\x01 \x01(\tH\x00R\x04user\x88\x01\x01\x12\x1f\n\x08relation\x18\x02 \x01(\tH\x01R\x08relation\x88\x01\x01\x12\x1b\n\x06object\x18\x03 \x01(\tH\x02R\x06object\x88\x01\x01\x12 \n\tpage_size\x18\x04 \x01(\x03H\x03R\x08pageSize\x88\x01\x01\x12\x32\n\x12\x63ontinuation_token\x18\x05 \x01(\tH\x04R\x11\x63ontinuationToken\x88\x01\x01\x42\x07\n\x05_userB\x0b\n\t_relationB\t\n\x07_objectB\x0c\n\n_page_sizeB\x15\n\x13_continuation_token\"\x93\x01\n\x15\x46gaReadTuplesResponse\x12/\n\x06tuples\x18\x01 \x03(\x0b\x32\x17.authorizer.v1.FgaTupleR\x06tuples\x12\x32\n\x12\x63ontinuation_token\x18\x02 \x01(\tH\x00R\x11\x63ontinuationToken\x88\x01\x01\x42\x15\n\x13_continuation_token\"\x81\x01\n\x13\x46gaListUsersRequest\x12\x1f\n\x06object\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06object\x12#\n\x08relation\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08relation\x12$\n\tuser_type\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08userType\",\n\x14\x46gaListUsersResponse\x12\x14\n\x05users\x18\x01 \x03(\tR\x05users\"X\n\x10\x46gaExpandRequest\x12#\n\x08relation\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08relation\x12\x1f\n\x06object\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06object\"\'\n\x11\x46gaExpandResponse\x12\x12\n\x04tree\x18\x01 \x01(\tR\x04tree\"\x11\n\x0f\x46gaResetRequest\",\n\x10\x46gaResetResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message2\xf5\x1e\n\x16\x41uthorizerAdminService\x12q\n\nAdminLogin\x12 .authorizer.v1.AdminLoginRequest\x1a!.authorizer.v1.AdminLoginResponse\"\x1e\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/admin/login:\x01*\x12n\n\x0b\x41\x64minLogout\x12!.authorizer.v1.AdminLogoutRequest\x1a\".authorizer.v1.AdminLogoutResponse\"\x18\x82\xd3\xe4\x93\x02\x12\"\x10/v1/admin/logout\x12r\n\x0c\x41\x64minSession\x12\".authorizer.v1.AdminSessionRequest\x1a#.authorizer.v1.AdminSessionResponse\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/v1/admin/session\x12\x66\n\tAdminMeta\x12\x1f.authorizer.v1.AdminMetaRequest\x1a .authorizer.v1.AdminMetaResponse\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/v1/admin/meta\x12^\n\x05Users\x12\x1b.authorizer.v1.UsersRequest\x1a\x1c.authorizer.v1.UsersResponse\"\x1a\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/admin/users:\x01*\x12Z\n\x04User\x12\x1a.authorizer.v1.UserRequest\x1a\x1b.authorizer.v1.UserResponse\"\x19\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/admin/user:\x01*\x12s\n\nUpdateUser\x12 .authorizer.v1.UpdateUserRequest\x1a!.authorizer.v1.UpdateUserResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/update_user:\x01*\x12s\n\nDeleteUser\x12 .authorizer.v1.DeleteUserRequest\x1a!.authorizer.v1.DeleteUserResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/delete_user:\x01*\x12\x9b\x01\n\x14VerificationRequests\x12*.authorizer.v1.VerificationRequestsRequest\x1a+.authorizer.v1.VerificationRequestsResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/verification_requests:\x01*\x12{\n\x0cRevokeAccess\x12\".authorizer.v1.RevokeAccessRequest\x1a#.authorizer.v1.RevokeAccessResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/revoke_access:\x01*\x12{\n\x0c\x45nableAccess\x12\".authorizer.v1.EnableAccessRequest\x1a#.authorizer.v1.EnableAccessResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/enable_access:\x01*\x12\x7f\n\rInviteMembers\x12#.authorizer.v1.InviteMembersRequest\x1a$.authorizer.v1.InviteMembersResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/invite_members:\x01*\x12s\n\nAddWebhook\x12 .authorizer.v1.AddWebhookRequest\x1a!.authorizer.v1.AddWebhookResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/add_webhook:\x01*\x12\x7f\n\rUpdateWebhook\x12#.authorizer.v1.UpdateWebhookRequest\x1a$.authorizer.v1.UpdateWebhookResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/update_webhook:\x01*\x12\x7f\n\rDeleteWebhook\x12#.authorizer.v1.DeleteWebhookRequest\x1a$.authorizer.v1.DeleteWebhookResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/delete_webhook:\x01*\x12o\n\nGetWebhook\x12 .authorizer.v1.GetWebhookRequest\x1a!.authorizer.v1.GetWebhookResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/admin/webhook:\x01*\x12j\n\x08Webhooks\x12\x1e.authorizer.v1.WebhooksRequest\x1a\x1f.authorizer.v1.WebhooksResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x12/v1/admin/webhooks:\x01*\x12w\n\x0bWebhookLogs\x12!.authorizer.v1.WebhookLogsRequest\x1a\".authorizer.v1.WebhookLogsResponse\"!\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/admin/webhook_logs:\x01*\x12{\n\x0cTestEndpoint\x12\".authorizer.v1.TestEndpointRequest\x1a#.authorizer.v1.TestEndpointResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/test_endpoint:\x01*\x12\x8c\x01\n\x10\x41\x64\x64\x45mailTemplate\x12&.authorizer.v1.AddEmailTemplateRequest\x1a\'.authorizer.v1.AddEmailTemplateResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v1/admin/add_email_template:\x01*\x12\x98\x01\n\x13UpdateEmailTemplate\x12).authorizer.v1.UpdateEmailTemplateRequest\x1a*.authorizer.v1.UpdateEmailTemplateResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/update_email_template:\x01*\x12\x98\x01\n\x13\x44\x65leteEmailTemplate\x12).authorizer.v1.DeleteEmailTemplateRequest\x1a*.authorizer.v1.DeleteEmailTemplateResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/delete_email_template:\x01*\x12\x83\x01\n\x0e\x45mailTemplates\x12$.authorizer.v1.EmailTemplatesRequest\x1a%.authorizer.v1.EmailTemplatesResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/email_templates:\x01*\x12o\n\tAuditLogs\x12\x1f.authorizer.v1.AuditLogsRequest\x1a .authorizer.v1.AuditLogsResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/audit_logs:\x01*\x12q\n\x0b\x46gaGetModel\x12!.authorizer.v1.FgaGetModelRequest\x1a\".authorizer.v1.FgaGetModelResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\x12\x13/v1/admin/fga/model\x12z\n\rFgaWriteModel\x12#.authorizer.v1.FgaWriteModelRequest\x1a$.authorizer.v1.FgaWriteModelResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/admin/fga/model:\x01*\x12~\n\x0e\x46gaWriteTuples\x12$.authorizer.v1.FgaWriteTuplesRequest\x1a%.authorizer.v1.FgaWriteTuplesResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/fga/tuples:\x01*\x12\x88\x01\n\x0f\x46gaDeleteTuples\x12%.authorizer.v1.FgaDeleteTuplesRequest\x1a&.authorizer.v1.FgaDeleteTuplesResponse\"&\x82\xd3\xe4\x93\x02 \"\x1b/v1/admin/fga/tuples/delete:\x01*\x12\x80\x01\n\rFgaReadTuples\x12#.authorizer.v1.FgaReadTuplesRequest\x1a$.authorizer.v1.FgaReadTuplesResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/fga/tuples/read:\x01*\x12|\n\x0c\x46gaListUsers\x12\".authorizer.v1.FgaListUsersRequest\x1a#.authorizer.v1.FgaListUsersResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/fga/list_users:\x01*\x12o\n\tFgaExpand\x12\x1f.authorizer.v1.FgaExpandRequest\x1a .authorizer.v1.FgaExpandResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/fga/expand:\x01*\x12k\n\x08\x46gaReset\x12\x1e.authorizer.v1.FgaResetRequest\x1a\x1f.authorizer.v1.FgaResetResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/admin/fga/reset:\x01*B\xc6\x01\n\x11\x63om.authorizer.v1B\nAdminProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x61uthorizer/v1/admin.proto\x12\rauthorizer.v1\x1a\x1f\x61uthorizer/v1/annotations.proto\x1a\x1a\x61uthorizer/v1/common.proto\x1a\x1e\x61uthorizer/v1/pagination.proto\x1a\x19\x61uthorizer/v1/types.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\"?\n\x11\x41\x64minLoginRequest\x12*\n\x0c\x61\x64min_secret\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x61\x64minSecret\".\n\x12\x41\x64minLoginResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x14\n\x12\x41\x64minLogoutRequest\"/\n\x13\x41\x64minLogoutResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x15\n\x13\x41\x64minSessionRequest\"0\n\x14\x41\x64minSessionResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x12\n\x10\x41\x64minMetaRequest\"L\n\x11\x41\x64minMetaResponse\x12\x37\n\nadmin_meta\x18\x01 \x01(\x0b\x32\x18.authorizer.v1.AdminMetaR\tadminMeta\"\xbe\x01\n\tAdminMeta\x12\x14\n\x05roles\x18\x01 \x03(\tR\x05roles\x12#\n\rdefault_roles\x18\x02 \x03(\tR\x0c\x64\x65\x66\x61ultRoles\x12\'\n\x0fprotected_roles\x18\x03 \x03(\tR\x0eprotectedRoles\x12M\n$is_multi_factor_auth_service_enabled\x18\x04 \x01(\x08R\x1fisMultiFactorAuthServiceEnabled\"f\n\x0cUsersRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\x14\n\x05query\x18\x02 \x01(\tR\x05query\"u\n\rUsersResponse\x12)\n\x05users\x18\x01 \x03(\x0b\x32\x13.authorizer.v1.UserR\x05users\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"3\n\x0bUserRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\"7\n\x0cUserResponse\x12\'\n\x04user\x18\x01 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"\xcc\x06\n\x11UpdateUserRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x19\n\x05\x65mail\x18\x02 \x01(\tH\x00R\x05\x65mail\x88\x01\x01\x12*\n\x0e\x65mail_verified\x18\x03 \x01(\x08H\x01R\remailVerified\x88\x01\x01\x12\"\n\ngiven_name\x18\x04 \x01(\tH\x02R\tgivenName\x88\x01\x01\x12$\n\x0b\x66\x61mily_name\x18\x05 \x01(\tH\x03R\nfamilyName\x88\x01\x01\x12$\n\x0bmiddle_name\x18\x06 \x01(\tH\x04R\nmiddleName\x88\x01\x01\x12\x1f\n\x08nickname\x18\x07 \x01(\tH\x05R\x08nickname\x88\x01\x01\x12\x1b\n\x06gender\x18\x08 \x01(\tH\x06R\x06gender\x88\x01\x01\x12!\n\tbirthdate\x18\t \x01(\tH\x07R\tbirthdate\x88\x01\x01\x12&\n\x0cphone_number\x18\n \x01(\tH\x08R\x0bphoneNumber\x88\x01\x01\x12\x37\n\x15phone_number_verified\x18\x0b \x01(\x08H\tR\x13phoneNumberVerified\x88\x01\x01\x12\x1d\n\x07picture\x18\x0c \x01(\tH\nR\x07picture\x88\x01\x01\x12\x14\n\x05roles\x18\r \x03(\tR\x05roles\x12\x43\n\x1cis_multi_factor_auth_enabled\x18\x0e \x01(\x08H\x0bR\x18isMultiFactorAuthEnabled\x88\x01\x01\x12\x31\n\x08\x61pp_data\x18\x0f \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppData\x12 \n\treset_mfa\x18\x10 \x01(\x08H\x0cR\x08resetMfa\x88\x01\x01\x42\x08\n\x06_emailB\x11\n\x0f_email_verifiedB\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x0e\n\x0c_middle_nameB\x0b\n\t_nicknameB\t\n\x07_genderB\x0c\n\n_birthdateB\x0f\n\r_phone_numberB\x18\n\x16_phone_number_verifiedB\n\n\x08_pictureB\x1f\n\x1d_is_multi_factor_auth_enabledB\x0c\n\n_reset_mfa\"=\n\x12UpdateUserResponse\x12\'\n\x04user\x18\x01 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"2\n\x11\x44\x65leteUserRequest\x12\x1d\n\x05\x65mail\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05\x65mail\".\n\x12\x44\x65leteUserResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"_\n\x1bVerificationRequestsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\xb2\x01\n\x1cVerificationRequestsResponse\x12W\n\x15verification_requests\x18\x01 \x03(\x0b\x32\".authorizer.v1.VerificationRequestR\x14verificationRequests\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x82\x02\n\x13VerificationRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x14\n\x05\x65mail\x18\x04 \x01(\tR\x05\x65mail\x12\x18\n\x07\x65xpires\x18\x05 \x01(\x03R\x07\x65xpires\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\x12\x14\n\x05nonce\x18\x08 \x01(\tR\x05nonce\x12!\n\x0credirect_uri\x18\t \x01(\tR\x0bredirectUri\"7\n\x13RevokeAccessRequest\x12 \n\x07user_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"0\n\x14RevokeAccessResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"7\n\x13\x45nableAccessRequest\x12 \n\x07user_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"0\n\x14\x45nableAccessResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"g\n\x14InviteMembersRequest\x12\x16\n\x06\x65mails\x18\x01 \x03(\tR\x06\x65mails\x12&\n\x0credirect_uri\x18\x02 \x01(\tH\x00R\x0bredirectUri\x88\x01\x01\x42\x0f\n\r_redirect_uri\"\\\n\x15InviteMembersResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12)\n\x05users\x18\x02 \x03(\x0b\x32\x13.authorizer.v1.UserR\x05users\"\x8b\x02\n\x07Webhook\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\nevent_name\x18\x02 \x01(\tR\teventName\x12+\n\x11\x65vent_description\x18\x03 \x01(\tR\x10\x65ventDescription\x12\x1a\n\x08\x65ndpoint\x18\x04 \x01(\tR\x08\x65ndpoint\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x30\n\x07headers\x18\x06 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headers\x12\x1d\n\ncreated_at\x18\x07 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x08 \x01(\x03R\tupdatedAt\"\xd0\x01\n\nWebhookLog\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1f\n\x0bhttp_status\x18\x02 \x01(\x03R\nhttpStatus\x12\x1a\n\x08response\x18\x03 \x01(\tR\x08response\x12\x18\n\x07request\x18\x04 \x01(\tR\x07request\x12\x1d\n\nwebhook_id\x18\x05 \x01(\tR\twebhookId\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"\xf4\x01\n\x11\x41\x64\x64WebhookRequest\x12&\n\nevent_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12\x30\n\x11\x65vent_description\x18\x02 \x01(\tH\x00R\x10\x65ventDescription\x88\x01\x01\x12#\n\x08\x65ndpoint\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ndpoint\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12\x30\n\x07headers\x18\x05 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\x14\n\x12_event_description\".\n\x12\x41\x64\x64WebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xb5\x02\n\x14UpdateWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\"\n\nevent_name\x18\x02 \x01(\tH\x00R\teventName\x88\x01\x01\x12\x30\n\x11\x65vent_description\x18\x03 \x01(\tH\x01R\x10\x65ventDescription\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x04 \x01(\tH\x02R\x08\x65ndpoint\x88\x01\x01\x12\x1d\n\x07\x65nabled\x18\x05 \x01(\x08H\x03R\x07\x65nabled\x88\x01\x01\x12\x30\n\x07headers\x18\x06 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\r\n\x0b_event_nameB\x14\n\x12_event_descriptionB\x0b\n\t_endpointB\n\n\x08_enabled\"1\n\x15UpdateWebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"/\n\x14\x44\x65leteWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"1\n\x15\x44\x65leteWebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\",\n\x11GetWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"F\n\x12GetWebhookResponse\x12\x30\n\x07webhook\x18\x01 \x01(\x0b\x32\x16.authorizer.v1.WebhookR\x07webhook\"S\n\x0fWebhooksRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\x81\x01\n\x10WebhooksResponse\x12\x32\n\x08webhooks\x18\x01 \x03(\x0b\x32\x16.authorizer.v1.WebhookR\x08webhooks\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x89\x01\n\x12WebhookLogsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\"\n\nwebhook_id\x18\x02 \x01(\tH\x00R\twebhookId\x88\x01\x01\x42\r\n\x0b_webhook_id\"\x8e\x01\n\x13WebhookLogsResponse\x12<\n\x0cwebhook_logs\x18\x01 \x03(\x0b\x32\x19.authorizer.v1.WebhookLogR\x0bwebhookLogs\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xdc\x01\n\x13TestEndpointRequest\x12#\n\x08\x65ndpoint\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ndpoint\x12&\n\nevent_name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12\x30\n\x11\x65vent_description\x18\x03 \x01(\tH\x00R\x10\x65ventDescription\x88\x01\x01\x12\x30\n\x07headers\x18\x04 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\x14\n\x12_event_description\"S\n\x14TestEndpointResponse\x12\x1f\n\x0bhttp_status\x18\x01 \x01(\x03R\nhttpStatus\x12\x1a\n\x08response\x18\x02 \x01(\tR\x08response\"\xca\x01\n\rEmailTemplate\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\nevent_name\x18\x02 \x01(\tR\teventName\x12\x1a\n\x08template\x18\x03 \x01(\tR\x08template\x12\x16\n\x06\x64\x65sign\x18\x04 \x01(\tR\x06\x64\x65sign\x12\x18\n\x07subject\x18\x05 \x01(\tR\x07subject\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"\xb1\x01\n\x17\x41\x64\x64\x45mailTemplateRequest\x12&\n\nevent_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12!\n\x07subject\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07subject\x12#\n\x08template\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08template\x12\x1b\n\x06\x64\x65sign\x18\x04 \x01(\tH\x00R\x06\x64\x65sign\x88\x01\x01\x42\t\n\x07_design\"4\n\x18\x41\x64\x64\x45mailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xe9\x01\n\x1aUpdateEmailTemplateRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\"\n\nevent_name\x18\x02 \x01(\tH\x00R\teventName\x88\x01\x01\x12\x1f\n\x08template\x18\x03 \x01(\tH\x01R\x08template\x88\x01\x01\x12\x1d\n\x07subject\x18\x04 \x01(\tH\x02R\x07subject\x88\x01\x01\x12\x1b\n\x06\x64\x65sign\x18\x05 \x01(\tH\x03R\x06\x64\x65sign\x88\x01\x01\x42\r\n\x0b_event_nameB\x0b\n\t_templateB\n\n\x08_subjectB\t\n\x07_design\"7\n\x1bUpdateEmailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"5\n\x1a\x44\x65leteEmailTemplateRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"7\n\x1b\x44\x65leteEmailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"Y\n\x15\x45mailTemplatesRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\x9a\x01\n\x16\x45mailTemplatesResponse\x12\x45\n\x0f\x65mail_templates\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.EmailTemplateR\x0e\x65mailTemplates\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xcc\x02\n\x08\x41uditLog\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x1d\n\nactor_type\x18\x03 \x01(\tR\tactorType\x12\x1f\n\x0b\x61\x63tor_email\x18\x04 \x01(\tR\nactorEmail\x12\x16\n\x06\x61\x63tion\x18\x05 \x01(\tR\x06\x61\x63tion\x12#\n\rresource_type\x18\x06 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12\x1d\n\nip_address\x18\x08 \x01(\tR\tipAddress\x12\x1d\n\nuser_agent\x18\t \x01(\tR\tuserAgent\x12\x1a\n\x08metadata\x18\n \x01(\tR\x08metadata\x12\x1d\n\ncreated_at\x18\x0b \x01(\x03R\tcreatedAt\"\x93\x03\n\x10\x41uditLogsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\x1b\n\x06\x61\x63tion\x18\x02 \x01(\tH\x00R\x06\x61\x63tion\x88\x01\x01\x12\x1e\n\x08\x61\x63tor_id\x18\x03 \x01(\tH\x01R\x07\x61\x63torId\x88\x01\x01\x12(\n\rresource_type\x18\x04 \x01(\tH\x02R\x0cresourceType\x88\x01\x01\x12$\n\x0bresource_id\x18\x05 \x01(\tH\x03R\nresourceId\x88\x01\x01\x12*\n\x0e\x66rom_timestamp\x18\x06 \x01(\x03H\x04R\rfromTimestamp\x88\x01\x01\x12&\n\x0cto_timestamp\x18\x07 \x01(\x03H\x05R\x0btoTimestamp\x88\x01\x01\x42\t\n\x07_actionB\x0b\n\t_actor_idB\x10\n\x0e_resource_typeB\x0e\n\x0c_resource_idB\x11\n\x0f_from_timestampB\x0f\n\r_to_timestamp\"\x86\x01\n\x11\x41uditLogsResponse\x12\x36\n\naudit_logs\x18\x01 \x03(\x0b\x32\x17.authorizer.v1.AuditLogR\tauditLogs\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\",\n\x08\x46gaModel\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03\x64sl\x18\x02 \x01(\tR\x03\x64sl\"R\n\x08\x46gaTuple\x12\x12\n\x04user\x18\x01 \x01(\tR\x04user\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x03 \x01(\tR\x06object\"\x14\n\x12\x46gaGetModelRequest\"D\n\x13\x46gaGetModelResponse\x12-\n\x05model\x18\x01 \x01(\x0b\x32\x17.authorizer.v1.FgaModelR\x05model\"1\n\x14\x46gaWriteModelRequest\x12\x19\n\x03\x64sl\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x03\x64sl\"F\n\x15\x46gaWriteModelResponse\x12-\n\x05model\x18\x01 \x01(\x0b\x32\x17.authorizer.v1.FgaModelR\x05model\"M\n\x15\x46gaWriteTuplesRequest\x12\x34\n\x06tuples\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x06tuples\"2\n\x16\x46gaWriteTuplesResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"N\n\x16\x46gaDeleteTuplesRequest\x12\x34\n\x06tuples\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x06tuples\"3\n\x17\x46gaDeleteTuplesResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x89\x02\n\x14\x46gaReadTuplesRequest\x12\x17\n\x04user\x18\x01 \x01(\tH\x00R\x04user\x88\x01\x01\x12\x1f\n\x08relation\x18\x02 \x01(\tH\x01R\x08relation\x88\x01\x01\x12\x1b\n\x06object\x18\x03 \x01(\tH\x02R\x06object\x88\x01\x01\x12 \n\tpage_size\x18\x04 \x01(\x03H\x03R\x08pageSize\x88\x01\x01\x12\x32\n\x12\x63ontinuation_token\x18\x05 \x01(\tH\x04R\x11\x63ontinuationToken\x88\x01\x01\x42\x07\n\x05_userB\x0b\n\t_relationB\t\n\x07_objectB\x0c\n\n_page_sizeB\x15\n\x13_continuation_token\"\x93\x01\n\x15\x46gaReadTuplesResponse\x12/\n\x06tuples\x18\x01 \x03(\x0b\x32\x17.authorizer.v1.FgaTupleR\x06tuples\x12\x32\n\x12\x63ontinuation_token\x18\x02 \x01(\tH\x00R\x11\x63ontinuationToken\x88\x01\x01\x42\x15\n\x13_continuation_token\"\x81\x01\n\x13\x46gaListUsersRequest\x12\x1f\n\x06object\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06object\x12#\n\x08relation\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08relation\x12$\n\tuser_type\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08userType\",\n\x14\x46gaListUsersResponse\x12\x14\n\x05users\x18\x01 \x03(\tR\x05users\"X\n\x10\x46gaExpandRequest\x12#\n\x08relation\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08relation\x12\x1f\n\x06object\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06object\"\'\n\x11\x46gaExpandResponse\x12\x12\n\x04tree\x18\x01 \x01(\tR\x04tree\"\x11\n\x0f\x46gaResetRequest\",\n\x10\x46gaResetResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xed\x01\n\x06\x43lient\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12%\n\x0e\x61llowed_scopes\x18\x04 \x03(\tR\rallowedScopes\x12\x1b\n\tis_active\x18\x05 \x01(\x08R\x08isActive\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\x12\x1b\n\tclient_id\x18\x08 \x01(\tR\x08\x63lientId\"\x9a\x01\n\x13\x43reateClientRequest\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12/\n\x0e\x61llowed_scopes\x18\x03 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x08\x01R\rallowedScopesB\x0e\n\x0c_description\"j\n\x14\x43reateClientResponse\x12-\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x15.authorizer.v1.ClientR\x06\x63lient\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\"\xde\x01\n\x13UpdateClientRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12%\n\x0e\x61llowed_scopes\x18\x04 \x03(\tR\rallowedScopes\x12 \n\tis_active\x18\x05 \x01(\x08H\x02R\x08isActive\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_is_active\"E\n\x14UpdateClientResponse\x12-\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x15.authorizer.v1.ClientR\x06\x63lient\".\n\x13\x44\x65leteClientRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"0\n\x14\x44\x65leteClientResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"4\n\x19RotateClientSecretRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"+\n\x10GetClientRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"B\n\x11GetClientResponse\x12-\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x15.authorizer.v1.ClientR\x06\x63lient\"R\n\x0e\x43lientsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"}\n\x0f\x43lientsResponse\x12/\n\x07\x63lients\x18\x01 \x03(\x0b\x32\x15.authorizer.v1.ClientR\x07\x63lients\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xdc\x04\n\rTrustedIssuer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12,\n\x12service_account_id\x18\x02 \x01(\tR\x10serviceAccountId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x1d\n\nissuer_url\x18\x04 \x01(\tR\tissuerUrl\x12&\n\x0fkey_source_type\x18\x05 \x01(\tR\rkeySourceType\x12\x19\n\x08jwks_url\x18\x06 \x01(\tR\x07jwksUrl\x12!\n\x0c\x65xpected_aud\x18\x07 \x01(\tR\x0b\x65xpectedAud\x12#\n\rsubject_claim\x18\x08 \x01(\tR\x0csubjectClaim\x12\x1f\n\x0bissuer_type\x18\t \x01(\tR\nissuerType\x12\x1b\n\tis_active\x18\n \x01(\x08R\x08isActive\x12=\n\x1bspiffe_refresh_hint_seconds\x18\x0b \x01(\x03R\x18spiffeRefreshHintSeconds\x12\x1d\n\ncreated_at\x18\x0c \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\r \x01(\x03R\tupdatedAt\x12)\n\x10\x61llowed_subjects\x18\x0e \x01(\tR\x0f\x61llowedSubjects\x12.\n\x13\x65nable_token_review\x18\x0f \x01(\x08R\x11\x65nableTokenReview\x12\x39\n\x19kubernetes_api_server_url\x18\x10 \x01(\tR\x16kubernetesApiServerUrl\"\xd9\x05\n\x17\x41\x64\x64TrustedIssuerRequest\x12\x35\n\x12service_account_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x10serviceAccountId\x12\x1b\n\x04name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12&\n\nissuer_url\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tissuerUrl\x12/\n\x0fkey_source_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\rkeySourceType\x12\x1e\n\x08jwks_url\x18\x05 \x01(\tH\x00R\x07jwksUrl\x88\x01\x01\x12*\n\x0c\x65xpected_aud\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x65xpectedAud\x12(\n\rsubject_claim\x18\x07 \x01(\tH\x01R\x0csubjectClaim\x88\x01\x01\x12(\n\x0bissuer_type\x18\x08 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nissuerType\x12\x42\n\x1bspiffe_refresh_hint_seconds\x18\t \x01(\x03H\x02R\x18spiffeRefreshHintSeconds\x88\x01\x01\x12.\n\x10\x61llowed_subjects\x18\n \x01(\tH\x03R\x0f\x61llowedSubjects\x88\x01\x01\x12\x33\n\x13\x65nable_token_review\x18\x0b \x01(\x08H\x04R\x11\x65nableTokenReview\x88\x01\x01\x12>\n\x19kubernetes_api_server_url\x18\x0c \x01(\tH\x05R\x16kubernetesApiServerUrl\x88\x01\x01\x42\x0b\n\t_jwks_urlB\x10\n\x0e_subject_claimB\x1e\n\x1c_spiffe_refresh_hint_secondsB\x13\n\x11_allowed_subjectsB\x16\n\x14_enable_token_reviewB\x1c\n\x1a_kubernetes_api_server_url\"_\n\x18\x41\x64\x64TrustedIssuerResponse\x12\x43\n\x0etrusted_issuer\x18\x01 \x01(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\rtrustedIssuer\"\xc1\x04\n\x1aUpdateTrustedIssuerRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x1e\n\x08jwks_url\x18\x03 \x01(\tH\x01R\x07jwksUrl\x88\x01\x01\x12&\n\x0c\x65xpected_aud\x18\x04 \x01(\tH\x02R\x0b\x65xpectedAud\x88\x01\x01\x12 \n\tis_active\x18\x05 \x01(\x08H\x03R\x08isActive\x88\x01\x01\x12\x42\n\x1bspiffe_refresh_hint_seconds\x18\x06 \x01(\x03H\x04R\x18spiffeRefreshHintSeconds\x88\x01\x01\x12.\n\x10\x61llowed_subjects\x18\x07 \x01(\tH\x05R\x0f\x61llowedSubjects\x88\x01\x01\x12\x33\n\x13\x65nable_token_review\x18\x08 \x01(\x08H\x06R\x11\x65nableTokenReview\x88\x01\x01\x12>\n\x19kubernetes_api_server_url\x18\t \x01(\tH\x07R\x16kubernetesApiServerUrl\x88\x01\x01\x42\x07\n\x05_nameB\x0b\n\t_jwks_urlB\x0f\n\r_expected_audB\x0c\n\n_is_activeB\x1e\n\x1c_spiffe_refresh_hint_secondsB\x13\n\x11_allowed_subjectsB\x16\n\x14_enable_token_reviewB\x1c\n\x1a_kubernetes_api_server_url\"b\n\x1bUpdateTrustedIssuerResponse\x12\x43\n\x0etrusted_issuer\x18\x01 \x01(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\rtrustedIssuer\"5\n\x1a\x44\x65leteTrustedIssuerRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"7\n\x1b\x44\x65leteTrustedIssuerResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"2\n\x17GetTrustedIssuerRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"_\n\x18GetTrustedIssuerResponse\x12\x43\n\x0etrusted_issuer\x18\x01 \x01(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\rtrustedIssuer\"\xa3\x01\n\x15TrustedIssuersRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\x31\n\x12service_account_id\x18\x02 \x01(\tH\x00R\x10serviceAccountId\x88\x01\x01\x42\x15\n\x13_service_account_id\"\x9a\x01\n\x16TrustedIssuersResponse\x12\x45\n\x0ftrusted_issuers\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\x0etrustedIssuers\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x84\x03\n\x13SamlServiceProvider\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x1b\n\tentity_id\x18\x04 \x01(\tR\x08\x65ntityId\x12\x17\n\x07\x61\x63s_url\x18\x05 \x01(\tR\x06\x61\x63sUrl\x12\x1e\n\x0bsp_cert_pem\x18\x06 \x01(\tR\tspCertPem\x12$\n\x0ename_id_format\x18\x07 \x01(\tR\x0cnameIdFormat\x12+\n\x11mapped_attributes\x18\x08 \x01(\tR\x10mappedAttributes\x12.\n\x13\x61llow_idp_initiated\x18\t \x01(\x08R\x11\x61llowIdpInitiated\x12\x1b\n\tis_active\x18\n \x01(\x08R\x08isActive\x12\x1d\n\ncreated_at\x18\x0b \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x0c \x01(\x03R\tupdatedAt\"\xc2\x01\n\nSamlIdpKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x19\n\x08\x63\x65rt_pem\x18\x03 \x01(\tR\x07\x63\x65rtPem\x12\x1c\n\talgorithm\x18\x04 \x01(\tR\talgorithm\x12\x16\n\x06status\x18\x05 \x01(\tR\x06status\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"s\n\x19SamlSpMetadataParseResult\x12\x1b\n\tentity_id\x18\x01 \x01(\tR\x08\x65ntityId\x12\x17\n\x07\x61\x63s_url\x18\x02 \x01(\tR\x06\x61\x63sUrl\x12 \n\x0b\x63\x65rtificate\x18\x03 \x01(\tR\x0b\x63\x65rtificate\"\xaf\x03\n CreateSamlServiceProviderRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\x12\x1b\n\x04name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12$\n\tentity_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ntityId\x12 \n\x07\x61\x63s_url\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06\x61\x63sUrl\x12#\n\x0bsp_cert_pem\x18\x05 \x01(\tH\x00R\tspCertPem\x88\x01\x01\x12)\n\x0ename_id_format\x18\x06 \x01(\tH\x01R\x0cnameIdFormat\x88\x01\x01\x12\x30\n\x11mapped_attributes\x18\x07 \x01(\tH\x02R\x10mappedAttributes\x88\x01\x01\x12\x33\n\x13\x61llow_idp_initiated\x18\x08 \x01(\x08H\x03R\x11\x61llowIdpInitiated\x88\x01\x01\x42\x0e\n\x0c_sp_cert_pemB\x11\n\x0f_name_id_formatB\x14\n\x12_mapped_attributesB\x16\n\x14_allow_idp_initiated\"{\n!CreateSamlServiceProviderResponse\x12V\n\x15saml_service_provider\x18\x01 \x01(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x13samlServiceProvider\"\xef\x03\n UpdateSamlServiceProviderRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12 \n\tentity_id\x18\x03 \x01(\tH\x01R\x08\x65ntityId\x88\x01\x01\x12\x1c\n\x07\x61\x63s_url\x18\x04 \x01(\tH\x02R\x06\x61\x63sUrl\x88\x01\x01\x12#\n\x0bsp_cert_pem\x18\x05 \x01(\tH\x03R\tspCertPem\x88\x01\x01\x12)\n\x0ename_id_format\x18\x06 \x01(\tH\x04R\x0cnameIdFormat\x88\x01\x01\x12\x30\n\x11mapped_attributes\x18\x07 \x01(\tH\x05R\x10mappedAttributes\x88\x01\x01\x12\x33\n\x13\x61llow_idp_initiated\x18\x08 \x01(\x08H\x06R\x11\x61llowIdpInitiated\x88\x01\x01\x12 \n\tis_active\x18\t \x01(\x08H\x07R\x08isActive\x88\x01\x01\x42\x07\n\x05_nameB\x0c\n\n_entity_idB\n\n\x08_acs_urlB\x0e\n\x0c_sp_cert_pemB\x11\n\x0f_name_id_formatB\x14\n\x12_mapped_attributesB\x16\n\x14_allow_idp_initiatedB\x0c\n\n_is_active\"{\n!UpdateSamlServiceProviderResponse\x12V\n\x15saml_service_provider\x18\x01 \x01(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x13samlServiceProvider\";\n DeleteSamlServiceProviderRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"=\n!DeleteSamlServiceProviderResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"8\n\x1dGetSamlServiceProviderRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"x\n\x1eGetSamlServiceProviderResponse\x12V\n\x15saml_service_provider\x18\x01 \x01(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x13samlServiceProvider\"\x83\x01\n\x1fListSamlServiceProvidersRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\x12@\n\npagination\x18\x02 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\xb7\x01\n ListSamlServiceProvidersResponse\x12X\n\x16saml_service_providers\x18\x01 \x03(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x14samlServiceProviders\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\":\n\x18RotateSamlIdpCertRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\"X\n\x19RotateSamlIdpCertResponse\x12;\n\x0csaml_idp_key\x18\x01 \x01(\x0b\x32\x19.authorizer.v1.SamlIdpKeyR\nsamlIdpKey\"2\n\x17RetireSamlIdpKeyRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"4\n\x18RetireSamlIdpKeyResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"8\n\x16ListSamlIdpKeysRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\"X\n\x17ListSamlIdpKeysResponse\x12=\n\rsaml_idp_keys\x18\x01 \x03(\x0b\x32\x19.authorizer.v1.SamlIdpKeyR\x0bsamlIdpKeys\"I\n\x1bImportSamlSpMetadataRequest\x12*\n\x0cmetadata_xml\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0bmetadataXml\"`\n\x1cImportSamlSpMetadataResponse\x12@\n\x06result\x18\x01 \x01(\x0b\x32(.authorizer.v1.SamlSpMetadataParseResultR\x06result2\xde\x35\n\x16\x41uthorizerAdminService\x12q\n\nAdminLogin\x12 .authorizer.v1.AdminLoginRequest\x1a!.authorizer.v1.AdminLoginResponse\"\x1e\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/admin/login:\x01*\x12n\n\x0b\x41\x64minLogout\x12!.authorizer.v1.AdminLogoutRequest\x1a\".authorizer.v1.AdminLogoutResponse\"\x18\x82\xd3\xe4\x93\x02\x12\"\x10/v1/admin/logout\x12r\n\x0c\x41\x64minSession\x12\".authorizer.v1.AdminSessionRequest\x1a#.authorizer.v1.AdminSessionResponse\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/v1/admin/session\x12\x66\n\tAdminMeta\x12\x1f.authorizer.v1.AdminMetaRequest\x1a .authorizer.v1.AdminMetaResponse\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/v1/admin/meta\x12^\n\x05Users\x12\x1b.authorizer.v1.UsersRequest\x1a\x1c.authorizer.v1.UsersResponse\"\x1a\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/admin/users:\x01*\x12Z\n\x04User\x12\x1a.authorizer.v1.UserRequest\x1a\x1b.authorizer.v1.UserResponse\"\x19\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/admin/user:\x01*\x12s\n\nUpdateUser\x12 .authorizer.v1.UpdateUserRequest\x1a!.authorizer.v1.UpdateUserResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/update_user:\x01*\x12s\n\nDeleteUser\x12 .authorizer.v1.DeleteUserRequest\x1a!.authorizer.v1.DeleteUserResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/delete_user:\x01*\x12\x9b\x01\n\x14VerificationRequests\x12*.authorizer.v1.VerificationRequestsRequest\x1a+.authorizer.v1.VerificationRequestsResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/verification_requests:\x01*\x12{\n\x0cRevokeAccess\x12\".authorizer.v1.RevokeAccessRequest\x1a#.authorizer.v1.RevokeAccessResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/revoke_access:\x01*\x12{\n\x0c\x45nableAccess\x12\".authorizer.v1.EnableAccessRequest\x1a#.authorizer.v1.EnableAccessResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/enable_access:\x01*\x12\x7f\n\rInviteMembers\x12#.authorizer.v1.InviteMembersRequest\x1a$.authorizer.v1.InviteMembersResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/invite_members:\x01*\x12s\n\nAddWebhook\x12 .authorizer.v1.AddWebhookRequest\x1a!.authorizer.v1.AddWebhookResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/add_webhook:\x01*\x12\x7f\n\rUpdateWebhook\x12#.authorizer.v1.UpdateWebhookRequest\x1a$.authorizer.v1.UpdateWebhookResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/update_webhook:\x01*\x12\x7f\n\rDeleteWebhook\x12#.authorizer.v1.DeleteWebhookRequest\x1a$.authorizer.v1.DeleteWebhookResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/delete_webhook:\x01*\x12o\n\nGetWebhook\x12 .authorizer.v1.GetWebhookRequest\x1a!.authorizer.v1.GetWebhookResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/admin/webhook:\x01*\x12j\n\x08Webhooks\x12\x1e.authorizer.v1.WebhooksRequest\x1a\x1f.authorizer.v1.WebhooksResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x12/v1/admin/webhooks:\x01*\x12w\n\x0bWebhookLogs\x12!.authorizer.v1.WebhookLogsRequest\x1a\".authorizer.v1.WebhookLogsResponse\"!\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/admin/webhook_logs:\x01*\x12{\n\x0cTestEndpoint\x12\".authorizer.v1.TestEndpointRequest\x1a#.authorizer.v1.TestEndpointResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/test_endpoint:\x01*\x12\x8c\x01\n\x10\x41\x64\x64\x45mailTemplate\x12&.authorizer.v1.AddEmailTemplateRequest\x1a\'.authorizer.v1.AddEmailTemplateResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v1/admin/add_email_template:\x01*\x12\x98\x01\n\x13UpdateEmailTemplate\x12).authorizer.v1.UpdateEmailTemplateRequest\x1a*.authorizer.v1.UpdateEmailTemplateResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/update_email_template:\x01*\x12\x98\x01\n\x13\x44\x65leteEmailTemplate\x12).authorizer.v1.DeleteEmailTemplateRequest\x1a*.authorizer.v1.DeleteEmailTemplateResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/delete_email_template:\x01*\x12\x83\x01\n\x0e\x45mailTemplates\x12$.authorizer.v1.EmailTemplatesRequest\x1a%.authorizer.v1.EmailTemplatesResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/email_templates:\x01*\x12o\n\tAuditLogs\x12\x1f.authorizer.v1.AuditLogsRequest\x1a .authorizer.v1.AuditLogsResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/audit_logs:\x01*\x12q\n\x0b\x46gaGetModel\x12!.authorizer.v1.FgaGetModelRequest\x1a\".authorizer.v1.FgaGetModelResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\x12\x13/v1/admin/fga/model\x12z\n\rFgaWriteModel\x12#.authorizer.v1.FgaWriteModelRequest\x1a$.authorizer.v1.FgaWriteModelResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/admin/fga/model:\x01*\x12~\n\x0e\x46gaWriteTuples\x12$.authorizer.v1.FgaWriteTuplesRequest\x1a%.authorizer.v1.FgaWriteTuplesResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/fga/tuples:\x01*\x12\x88\x01\n\x0f\x46gaDeleteTuples\x12%.authorizer.v1.FgaDeleteTuplesRequest\x1a&.authorizer.v1.FgaDeleteTuplesResponse\"&\x82\xd3\xe4\x93\x02 \"\x1b/v1/admin/fga/tuples/delete:\x01*\x12\x80\x01\n\rFgaReadTuples\x12#.authorizer.v1.FgaReadTuplesRequest\x1a$.authorizer.v1.FgaReadTuplesResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/fga/tuples/read:\x01*\x12|\n\x0c\x46gaListUsers\x12\".authorizer.v1.FgaListUsersRequest\x1a#.authorizer.v1.FgaListUsersResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/fga/list_users:\x01*\x12o\n\tFgaExpand\x12\x1f.authorizer.v1.FgaExpandRequest\x1a .authorizer.v1.FgaExpandResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/fga/expand:\x01*\x12k\n\x08\x46gaReset\x12\x1e.authorizer.v1.FgaResetRequest\x1a\x1f.authorizer.v1.FgaResetResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/admin/fga/reset:\x01*\x12{\n\x0c\x43reateClient\x12\".authorizer.v1.CreateClientRequest\x1a#.authorizer.v1.CreateClientResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/create_client:\x01*\x12{\n\x0cUpdateClient\x12\".authorizer.v1.UpdateClientRequest\x1a#.authorizer.v1.UpdateClientResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/update_client:\x01*\x12{\n\x0c\x44\x65leteClient\x12\".authorizer.v1.DeleteClientRequest\x1a#.authorizer.v1.DeleteClientResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/delete_client:\x01*\x12\x8e\x01\n\x12RotateClientSecret\x12(.authorizer.v1.RotateClientSecretRequest\x1a#.authorizer.v1.CreateClientResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/admin/rotate_client_secret:\x01*\x12k\n\tGetClient\x12\x1f.authorizer.v1.GetClientRequest\x1a .authorizer.v1.GetClientResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\"\x10/v1/admin/client:\x01*\x12\x66\n\x07\x43lients\x12\x1d.authorizer.v1.ClientsRequest\x1a\x1e.authorizer.v1.ClientsResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/admin/clients:\x01*\x12\x8c\x01\n\x10\x41\x64\x64TrustedIssuer\x12&.authorizer.v1.AddTrustedIssuerRequest\x1a\'.authorizer.v1.AddTrustedIssuerResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v1/admin/add_trusted_issuer:\x01*\x12\x98\x01\n\x13UpdateTrustedIssuer\x12).authorizer.v1.UpdateTrustedIssuerRequest\x1a*.authorizer.v1.UpdateTrustedIssuerResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/update_trusted_issuer:\x01*\x12\x98\x01\n\x13\x44\x65leteTrustedIssuer\x12).authorizer.v1.DeleteTrustedIssuerRequest\x1a*.authorizer.v1.DeleteTrustedIssuerResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/delete_trusted_issuer:\x01*\x12\x88\x01\n\x10GetTrustedIssuer\x12&.authorizer.v1.GetTrustedIssuerRequest\x1a\'.authorizer.v1.GetTrustedIssuerResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/trusted_issuer:\x01*\x12\x83\x01\n\x0eTrustedIssuers\x12$.authorizer.v1.TrustedIssuersRequest\x1a%.authorizer.v1.TrustedIssuersResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/trusted_issuers:\x01*\x12\xb1\x01\n\x19\x43reateSamlServiceProvider\x12/.authorizer.v1.CreateSamlServiceProviderRequest\x1a\x30.authorizer.v1.CreateSamlServiceProviderResponse\"1\x82\xd3\xe4\x93\x02+\"&/v1/admin/create_saml_service_provider:\x01*\x12\xb1\x01\n\x19UpdateSamlServiceProvider\x12/.authorizer.v1.UpdateSamlServiceProviderRequest\x1a\x30.authorizer.v1.UpdateSamlServiceProviderResponse\"1\x82\xd3\xe4\x93\x02+\"&/v1/admin/update_saml_service_provider:\x01*\x12\xb1\x01\n\x19\x44\x65leteSamlServiceProvider\x12/.authorizer.v1.DeleteSamlServiceProviderRequest\x1a\x30.authorizer.v1.DeleteSamlServiceProviderResponse\"1\x82\xd3\xe4\x93\x02+\"&/v1/admin/delete_saml_service_provider:\x01*\x12\xa1\x01\n\x16GetSamlServiceProvider\x12,.authorizer.v1.GetSamlServiceProviderRequest\x1a-.authorizer.v1.GetSamlServiceProviderResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/saml_service_provider:\x01*\x12\xa8\x01\n\x18ListSamlServiceProviders\x12..authorizer.v1.ListSamlServiceProvidersRequest\x1a/.authorizer.v1.ListSamlServiceProvidersResponse\"+\x82\xd3\xe4\x93\x02%\" /v1/admin/saml_service_providers:\x01*\x12\x91\x01\n\x11RotateSamlIdpCert\x12\'.authorizer.v1.RotateSamlIdpCertRequest\x1a(.authorizer.v1.RotateSamlIdpCertResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/admin/rotate_saml_idp_cert:\x01*\x12\x8d\x01\n\x10RetireSamlIdpKey\x12&.authorizer.v1.RetireSamlIdpKeyRequest\x1a\'.authorizer.v1.RetireSamlIdpKeyResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/v1/admin/retire_saml_idp_key:\x01*\x12\x84\x01\n\x0fListSamlIdpKeys\x12%.authorizer.v1.ListSamlIdpKeysRequest\x1a&.authorizer.v1.ListSamlIdpKeysResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/saml_idp_keys:\x01*\x12\x9d\x01\n\x14ImportSamlSpMetadata\x12*.authorizer.v1.ImportSamlSpMetadataRequest\x1a+.authorizer.v1.ImportSamlSpMetadataResponse\",\x82\xd3\xe4\x93\x02&\"!/v1/admin/import_saml_sp_metadata:\x01*Bt\n\x11\x63om.authorizer.v1B\nAdminProtoP\x01\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.admin_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\nAdminProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\nAdminProtoP\001\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' _globals['_ADMINLOGINREQUEST'].fields_by_name['admin_secret']._loaded_options = None _globals['_ADMINLOGINREQUEST'].fields_by_name['admin_secret']._serialized_options = b'\272H\004r\002\020\001' _globals['_UPDATEUSERREQUEST'].fields_by_name['id']._loaded_options = None @@ -84,6 +84,60 @@ _globals['_FGAEXPANDREQUEST'].fields_by_name['relation']._serialized_options = b'\272H\004r\002\020\001' _globals['_FGAEXPANDREQUEST'].fields_by_name['object']._loaded_options = None _globals['_FGAEXPANDREQUEST'].fields_by_name['object']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREATECLIENTREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_CREATECLIENTREQUEST'].fields_by_name['name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREATECLIENTREQUEST'].fields_by_name['allowed_scopes']._loaded_options = None + _globals['_CREATECLIENTREQUEST'].fields_by_name['allowed_scopes']._serialized_options = b'\272H\005\222\001\002\010\001' + _globals['_UPDATECLIENTREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_UPDATECLIENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DELETECLIENTREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_DELETECLIENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ROTATECLIENTSECRETREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_ROTATECLIENTSECRETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_GETCLIENTREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_GETCLIENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['service_account_id']._loaded_options = None + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['service_account_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_url']._loaded_options = None + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_url']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['key_source_type']._loaded_options = None + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['key_source_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['expected_aud']._loaded_options = None + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['expected_aud']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_type']._loaded_options = None + _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_UPDATETRUSTEDISSUERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_UPDATETRUSTEDISSUERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DELETETRUSTEDISSUERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_DELETETRUSTEDISSUERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_GETTRUSTEDISSUERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_GETTRUSTEDISSUERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['org_id']._loaded_options = None + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['entity_id']._loaded_options = None + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['entity_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['acs_url']._loaded_options = None + _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['acs_url']._serialized_options = b'\272H\004r\002\020\001' + _globals['_UPDATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_UPDATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DELETESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_DELETESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_GETSAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_GETSAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_LISTSAMLSERVICEPROVIDERSREQUEST'].fields_by_name['org_id']._loaded_options = None + _globals['_LISTSAMLSERVICEPROVIDERSREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_ROTATESAMLIDPCERTREQUEST'].fields_by_name['org_id']._loaded_options = None + _globals['_ROTATESAMLIDPCERTREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_RETIRESAMLIDPKEYREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_RETIRESAMLIDPKEYREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_LISTSAMLIDPKEYSREQUEST'].fields_by_name['org_id']._loaded_options = None + _globals['_LISTSAMLIDPKEYSREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_IMPORTSAMLSPMETADATAREQUEST'].fields_by_name['metadata_xml']._loaded_options = None + _globals['_IMPORTSAMLSPMETADATAREQUEST'].fields_by_name['metadata_xml']._serialized_options = b'\272H\004r\002\020\001' _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminLogin']._loaded_options = None _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminLogin']._serialized_options = b'\240\265\030\001\202\323\344\223\002\024\"\017/v1/admin/login:\001*' _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminLogout']._loaded_options = None @@ -148,6 +202,46 @@ _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaExpand']._serialized_options = b'\202\323\344\223\002\031\"\024/v1/admin/fga/expand:\001*' _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaReset']._loaded_options = None _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaReset']._serialized_options = b'\202\323\344\223\002\030\"\023/v1/admin/fga/reset:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateClient']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateClient']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/create_client:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateClient']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/update_client:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteClient']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteClient']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/delete_client:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateClientSecret']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateClientSecret']._serialized_options = b'\202\323\344\223\002#\"\036/v1/admin/rotate_client_secret:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetClient']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetClient']._serialized_options = b'\202\323\344\223\002\025\"\020/v1/admin/client:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Clients']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Clients']._serialized_options = b'\202\323\344\223\002\026\"\021/v1/admin/clients:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddTrustedIssuer']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddTrustedIssuer']._serialized_options = b'\202\323\344\223\002!\"\034/v1/admin/add_trusted_issuer:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateTrustedIssuer']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateTrustedIssuer']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/update_trusted_issuer:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteTrustedIssuer']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteTrustedIssuer']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/delete_trusted_issuer:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetTrustedIssuer']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetTrustedIssuer']._serialized_options = b'\202\323\344\223\002\035\"\030/v1/admin/trusted_issuer:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['TrustedIssuers']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['TrustedIssuers']._serialized_options = b'\202\323\344\223\002\036\"\031/v1/admin/trusted_issuers:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateSamlServiceProvider']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateSamlServiceProvider']._serialized_options = b'\202\323\344\223\002+\"&/v1/admin/create_saml_service_provider:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateSamlServiceProvider']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateSamlServiceProvider']._serialized_options = b'\202\323\344\223\002+\"&/v1/admin/update_saml_service_provider:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteSamlServiceProvider']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteSamlServiceProvider']._serialized_options = b'\202\323\344\223\002+\"&/v1/admin/delete_saml_service_provider:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetSamlServiceProvider']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetSamlServiceProvider']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/saml_service_provider:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlServiceProviders']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlServiceProviders']._serialized_options = b'\202\323\344\223\002%\" /v1/admin/saml_service_providers:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateSamlIdpCert']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateSamlIdpCert']._serialized_options = b'\202\323\344\223\002#\"\036/v1/admin/rotate_saml_idp_cert:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RetireSamlIdpKey']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RetireSamlIdpKey']._serialized_options = b'\202\323\344\223\002\"\"\035/v1/admin/retire_saml_idp_key:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlIdpKeys']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlIdpKeys']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/saml_idp_keys:\001*' + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ImportSamlSpMetadata']._loaded_options = None + _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ImportSamlSpMetadata']._serialized_options = b'\202\323\344\223\002&\"!/v1/admin/import_saml_sp_metadata:\001*' _globals['_ADMINLOGINREQUEST']._serialized_start=223 _globals['_ADMINLOGINREQUEST']._serialized_end=286 _globals['_ADMINLOGINRESPONSE']._serialized_start=288 @@ -164,134 +258,222 @@ _globals['_ADMINMETAREQUEST']._serialized_end=498 _globals['_ADMINMETARESPONSE']._serialized_start=500 _globals['_ADMINMETARESPONSE']._serialized_end=576 - _globals['_ADMINMETA']._serialized_start=578 - _globals['_ADMINMETA']._serialized_end=689 - _globals['_USERSREQUEST']._serialized_start=691 - _globals['_USERSREQUEST']._serialized_end=771 - _globals['_USERSRESPONSE']._serialized_start=773 - _globals['_USERSRESPONSE']._serialized_end=890 - _globals['_USERREQUEST']._serialized_start=892 - _globals['_USERREQUEST']._serialized_end=943 - _globals['_USERRESPONSE']._serialized_start=945 - _globals['_USERRESPONSE']._serialized_end=1000 - _globals['_UPDATEUSERREQUEST']._serialized_start=1003 - _globals['_UPDATEUSERREQUEST']._serialized_end=1799 - _globals['_UPDATEUSERRESPONSE']._serialized_start=1801 - _globals['_UPDATEUSERRESPONSE']._serialized_end=1862 - _globals['_DELETEUSERREQUEST']._serialized_start=1864 - _globals['_DELETEUSERREQUEST']._serialized_end=1914 - _globals['_DELETEUSERRESPONSE']._serialized_start=1916 - _globals['_DELETEUSERRESPONSE']._serialized_end=1962 - _globals['_VERIFICATIONREQUESTSREQUEST']._serialized_start=1964 - _globals['_VERIFICATIONREQUESTSREQUEST']._serialized_end=2059 - _globals['_VERIFICATIONREQUESTSRESPONSE']._serialized_start=2062 - _globals['_VERIFICATIONREQUESTSRESPONSE']._serialized_end=2240 - _globals['_VERIFICATIONREQUEST']._serialized_start=2243 - _globals['_VERIFICATIONREQUEST']._serialized_end=2501 - _globals['_REVOKEACCESSREQUEST']._serialized_start=2503 - _globals['_REVOKEACCESSREQUEST']._serialized_end=2558 - _globals['_REVOKEACCESSRESPONSE']._serialized_start=2560 - _globals['_REVOKEACCESSRESPONSE']._serialized_end=2608 - _globals['_ENABLEACCESSREQUEST']._serialized_start=2610 - _globals['_ENABLEACCESSREQUEST']._serialized_end=2665 - _globals['_ENABLEACCESSRESPONSE']._serialized_start=2667 - _globals['_ENABLEACCESSRESPONSE']._serialized_end=2715 - _globals['_INVITEMEMBERSREQUEST']._serialized_start=2717 - _globals['_INVITEMEMBERSREQUEST']._serialized_end=2820 - _globals['_INVITEMEMBERSRESPONSE']._serialized_start=2822 - _globals['_INVITEMEMBERSRESPONSE']._serialized_end=2914 - _globals['_WEBHOOK']._serialized_start=2917 - _globals['_WEBHOOK']._serialized_end=3184 - _globals['_WEBHOOKLOG']._serialized_start=3187 - _globals['_WEBHOOKLOG']._serialized_end=3395 - _globals['_ADDWEBHOOKREQUEST']._serialized_start=3398 - _globals['_ADDWEBHOOKREQUEST']._serialized_end=3642 - _globals['_ADDWEBHOOKRESPONSE']._serialized_start=3644 - _globals['_ADDWEBHOOKRESPONSE']._serialized_end=3690 - _globals['_UPDATEWEBHOOKREQUEST']._serialized_start=3693 - _globals['_UPDATEWEBHOOKREQUEST']._serialized_end=4002 - _globals['_UPDATEWEBHOOKRESPONSE']._serialized_start=4004 - _globals['_UPDATEWEBHOOKRESPONSE']._serialized_end=4053 - _globals['_DELETEWEBHOOKREQUEST']._serialized_start=4055 - _globals['_DELETEWEBHOOKREQUEST']._serialized_end=4102 - _globals['_DELETEWEBHOOKRESPONSE']._serialized_start=4104 - _globals['_DELETEWEBHOOKRESPONSE']._serialized_end=4153 - _globals['_GETWEBHOOKREQUEST']._serialized_start=4155 - _globals['_GETWEBHOOKREQUEST']._serialized_end=4199 - _globals['_GETWEBHOOKRESPONSE']._serialized_start=4201 - _globals['_GETWEBHOOKRESPONSE']._serialized_end=4271 - _globals['_WEBHOOKSREQUEST']._serialized_start=4273 - _globals['_WEBHOOKSREQUEST']._serialized_end=4356 - _globals['_WEBHOOKSRESPONSE']._serialized_start=4359 - _globals['_WEBHOOKSRESPONSE']._serialized_end=4488 - _globals['_WEBHOOKLOGSREQUEST']._serialized_start=4491 - _globals['_WEBHOOKLOGSREQUEST']._serialized_end=4628 - _globals['_WEBHOOKLOGSRESPONSE']._serialized_start=4631 - _globals['_WEBHOOKLOGSRESPONSE']._serialized_end=4773 - _globals['_TESTENDPOINTREQUEST']._serialized_start=4776 - _globals['_TESTENDPOINTREQUEST']._serialized_end=4996 - _globals['_TESTENDPOINTRESPONSE']._serialized_start=4998 - _globals['_TESTENDPOINTRESPONSE']._serialized_end=5081 - _globals['_EMAILTEMPLATE']._serialized_start=5084 - _globals['_EMAILTEMPLATE']._serialized_end=5286 - _globals['_ADDEMAILTEMPLATEREQUEST']._serialized_start=5289 - _globals['_ADDEMAILTEMPLATEREQUEST']._serialized_end=5466 - _globals['_ADDEMAILTEMPLATERESPONSE']._serialized_start=5468 - _globals['_ADDEMAILTEMPLATERESPONSE']._serialized_end=5520 - _globals['_UPDATEEMAILTEMPLATEREQUEST']._serialized_start=5523 - _globals['_UPDATEEMAILTEMPLATEREQUEST']._serialized_end=5756 - _globals['_UPDATEEMAILTEMPLATERESPONSE']._serialized_start=5758 - _globals['_UPDATEEMAILTEMPLATERESPONSE']._serialized_end=5813 - _globals['_DELETEEMAILTEMPLATEREQUEST']._serialized_start=5815 - _globals['_DELETEEMAILTEMPLATEREQUEST']._serialized_end=5868 - _globals['_DELETEEMAILTEMPLATERESPONSE']._serialized_start=5870 - _globals['_DELETEEMAILTEMPLATERESPONSE']._serialized_end=5925 - _globals['_EMAILTEMPLATESREQUEST']._serialized_start=5927 - _globals['_EMAILTEMPLATESREQUEST']._serialized_end=6016 - _globals['_EMAILTEMPLATESRESPONSE']._serialized_start=6019 - _globals['_EMAILTEMPLATESRESPONSE']._serialized_end=6173 - _globals['_AUDITLOG']._serialized_start=6176 - _globals['_AUDITLOG']._serialized_end=6508 - _globals['_AUDITLOGSREQUEST']._serialized_start=6511 - _globals['_AUDITLOGSREQUEST']._serialized_end=6914 - _globals['_AUDITLOGSRESPONSE']._serialized_start=6917 - _globals['_AUDITLOGSRESPONSE']._serialized_end=7051 - _globals['_FGAMODEL']._serialized_start=7053 - _globals['_FGAMODEL']._serialized_end=7097 - _globals['_FGATUPLE']._serialized_start=7099 - _globals['_FGATUPLE']._serialized_end=7181 - _globals['_FGAGETMODELREQUEST']._serialized_start=7183 - _globals['_FGAGETMODELREQUEST']._serialized_end=7203 - _globals['_FGAGETMODELRESPONSE']._serialized_start=7205 - _globals['_FGAGETMODELRESPONSE']._serialized_end=7273 - _globals['_FGAWRITEMODELREQUEST']._serialized_start=7275 - _globals['_FGAWRITEMODELREQUEST']._serialized_end=7324 - _globals['_FGAWRITEMODELRESPONSE']._serialized_start=7326 - _globals['_FGAWRITEMODELRESPONSE']._serialized_end=7396 - _globals['_FGAWRITETUPLESREQUEST']._serialized_start=7398 - _globals['_FGAWRITETUPLESREQUEST']._serialized_end=7475 - _globals['_FGAWRITETUPLESRESPONSE']._serialized_start=7477 - _globals['_FGAWRITETUPLESRESPONSE']._serialized_end=7527 - _globals['_FGADELETETUPLESREQUEST']._serialized_start=7529 - _globals['_FGADELETETUPLESREQUEST']._serialized_end=7607 - _globals['_FGADELETETUPLESRESPONSE']._serialized_start=7609 - _globals['_FGADELETETUPLESRESPONSE']._serialized_end=7660 - _globals['_FGAREADTUPLESREQUEST']._serialized_start=7663 - _globals['_FGAREADTUPLESREQUEST']._serialized_end=7928 - _globals['_FGAREADTUPLESRESPONSE']._serialized_start=7931 - _globals['_FGAREADTUPLESRESPONSE']._serialized_end=8078 - _globals['_FGALISTUSERSREQUEST']._serialized_start=8081 - _globals['_FGALISTUSERSREQUEST']._serialized_end=8210 - _globals['_FGALISTUSERSRESPONSE']._serialized_start=8212 - _globals['_FGALISTUSERSRESPONSE']._serialized_end=8256 - _globals['_FGAEXPANDREQUEST']._serialized_start=8258 - _globals['_FGAEXPANDREQUEST']._serialized_end=8346 - _globals['_FGAEXPANDRESPONSE']._serialized_start=8348 - _globals['_FGAEXPANDRESPONSE']._serialized_end=8387 - _globals['_FGARESETREQUEST']._serialized_start=8389 - _globals['_FGARESETREQUEST']._serialized_end=8406 - _globals['_FGARESETRESPONSE']._serialized_start=8408 - _globals['_FGARESETRESPONSE']._serialized_end=8452 - _globals['_AUTHORIZERADMINSERVICE']._serialized_start=8455 - _globals['_AUTHORIZERADMINSERVICE']._serialized_end=12412 + _globals['_ADMINMETA']._serialized_start=579 + _globals['_ADMINMETA']._serialized_end=769 + _globals['_USERSREQUEST']._serialized_start=771 + _globals['_USERSREQUEST']._serialized_end=873 + _globals['_USERSRESPONSE']._serialized_start=875 + _globals['_USERSRESPONSE']._serialized_end=992 + _globals['_USERREQUEST']._serialized_start=994 + _globals['_USERREQUEST']._serialized_end=1045 + _globals['_USERRESPONSE']._serialized_start=1047 + _globals['_USERRESPONSE']._serialized_end=1102 + _globals['_UPDATEUSERREQUEST']._serialized_start=1105 + _globals['_UPDATEUSERREQUEST']._serialized_end=1949 + _globals['_UPDATEUSERRESPONSE']._serialized_start=1951 + _globals['_UPDATEUSERRESPONSE']._serialized_end=2012 + _globals['_DELETEUSERREQUEST']._serialized_start=2014 + _globals['_DELETEUSERREQUEST']._serialized_end=2064 + _globals['_DELETEUSERRESPONSE']._serialized_start=2066 + _globals['_DELETEUSERRESPONSE']._serialized_end=2112 + _globals['_VERIFICATIONREQUESTSREQUEST']._serialized_start=2114 + _globals['_VERIFICATIONREQUESTSREQUEST']._serialized_end=2209 + _globals['_VERIFICATIONREQUESTSRESPONSE']._serialized_start=2212 + _globals['_VERIFICATIONREQUESTSRESPONSE']._serialized_end=2390 + _globals['_VERIFICATIONREQUEST']._serialized_start=2393 + _globals['_VERIFICATIONREQUEST']._serialized_end=2651 + _globals['_REVOKEACCESSREQUEST']._serialized_start=2653 + _globals['_REVOKEACCESSREQUEST']._serialized_end=2708 + _globals['_REVOKEACCESSRESPONSE']._serialized_start=2710 + _globals['_REVOKEACCESSRESPONSE']._serialized_end=2758 + _globals['_ENABLEACCESSREQUEST']._serialized_start=2760 + _globals['_ENABLEACCESSREQUEST']._serialized_end=2815 + _globals['_ENABLEACCESSRESPONSE']._serialized_start=2817 + _globals['_ENABLEACCESSRESPONSE']._serialized_end=2865 + _globals['_INVITEMEMBERSREQUEST']._serialized_start=2867 + _globals['_INVITEMEMBERSREQUEST']._serialized_end=2970 + _globals['_INVITEMEMBERSRESPONSE']._serialized_start=2972 + _globals['_INVITEMEMBERSRESPONSE']._serialized_end=3064 + _globals['_WEBHOOK']._serialized_start=3067 + _globals['_WEBHOOK']._serialized_end=3334 + _globals['_WEBHOOKLOG']._serialized_start=3337 + _globals['_WEBHOOKLOG']._serialized_end=3545 + _globals['_ADDWEBHOOKREQUEST']._serialized_start=3548 + _globals['_ADDWEBHOOKREQUEST']._serialized_end=3792 + _globals['_ADDWEBHOOKRESPONSE']._serialized_start=3794 + _globals['_ADDWEBHOOKRESPONSE']._serialized_end=3840 + _globals['_UPDATEWEBHOOKREQUEST']._serialized_start=3843 + _globals['_UPDATEWEBHOOKREQUEST']._serialized_end=4152 + _globals['_UPDATEWEBHOOKRESPONSE']._serialized_start=4154 + _globals['_UPDATEWEBHOOKRESPONSE']._serialized_end=4203 + _globals['_DELETEWEBHOOKREQUEST']._serialized_start=4205 + _globals['_DELETEWEBHOOKREQUEST']._serialized_end=4252 + _globals['_DELETEWEBHOOKRESPONSE']._serialized_start=4254 + _globals['_DELETEWEBHOOKRESPONSE']._serialized_end=4303 + _globals['_GETWEBHOOKREQUEST']._serialized_start=4305 + _globals['_GETWEBHOOKREQUEST']._serialized_end=4349 + _globals['_GETWEBHOOKRESPONSE']._serialized_start=4351 + _globals['_GETWEBHOOKRESPONSE']._serialized_end=4421 + _globals['_WEBHOOKSREQUEST']._serialized_start=4423 + _globals['_WEBHOOKSREQUEST']._serialized_end=4506 + _globals['_WEBHOOKSRESPONSE']._serialized_start=4509 + _globals['_WEBHOOKSRESPONSE']._serialized_end=4638 + _globals['_WEBHOOKLOGSREQUEST']._serialized_start=4641 + _globals['_WEBHOOKLOGSREQUEST']._serialized_end=4778 + _globals['_WEBHOOKLOGSRESPONSE']._serialized_start=4781 + _globals['_WEBHOOKLOGSRESPONSE']._serialized_end=4923 + _globals['_TESTENDPOINTREQUEST']._serialized_start=4926 + _globals['_TESTENDPOINTREQUEST']._serialized_end=5146 + _globals['_TESTENDPOINTRESPONSE']._serialized_start=5148 + _globals['_TESTENDPOINTRESPONSE']._serialized_end=5231 + _globals['_EMAILTEMPLATE']._serialized_start=5234 + _globals['_EMAILTEMPLATE']._serialized_end=5436 + _globals['_ADDEMAILTEMPLATEREQUEST']._serialized_start=5439 + _globals['_ADDEMAILTEMPLATEREQUEST']._serialized_end=5616 + _globals['_ADDEMAILTEMPLATERESPONSE']._serialized_start=5618 + _globals['_ADDEMAILTEMPLATERESPONSE']._serialized_end=5670 + _globals['_UPDATEEMAILTEMPLATEREQUEST']._serialized_start=5673 + _globals['_UPDATEEMAILTEMPLATEREQUEST']._serialized_end=5906 + _globals['_UPDATEEMAILTEMPLATERESPONSE']._serialized_start=5908 + _globals['_UPDATEEMAILTEMPLATERESPONSE']._serialized_end=5963 + _globals['_DELETEEMAILTEMPLATEREQUEST']._serialized_start=5965 + _globals['_DELETEEMAILTEMPLATEREQUEST']._serialized_end=6018 + _globals['_DELETEEMAILTEMPLATERESPONSE']._serialized_start=6020 + _globals['_DELETEEMAILTEMPLATERESPONSE']._serialized_end=6075 + _globals['_EMAILTEMPLATESREQUEST']._serialized_start=6077 + _globals['_EMAILTEMPLATESREQUEST']._serialized_end=6166 + _globals['_EMAILTEMPLATESRESPONSE']._serialized_start=6169 + _globals['_EMAILTEMPLATESRESPONSE']._serialized_end=6323 + _globals['_AUDITLOG']._serialized_start=6326 + _globals['_AUDITLOG']._serialized_end=6658 + _globals['_AUDITLOGSREQUEST']._serialized_start=6661 + _globals['_AUDITLOGSREQUEST']._serialized_end=7064 + _globals['_AUDITLOGSRESPONSE']._serialized_start=7067 + _globals['_AUDITLOGSRESPONSE']._serialized_end=7201 + _globals['_FGAMODEL']._serialized_start=7203 + _globals['_FGAMODEL']._serialized_end=7247 + _globals['_FGATUPLE']._serialized_start=7249 + _globals['_FGATUPLE']._serialized_end=7331 + _globals['_FGAGETMODELREQUEST']._serialized_start=7333 + _globals['_FGAGETMODELREQUEST']._serialized_end=7353 + _globals['_FGAGETMODELRESPONSE']._serialized_start=7355 + _globals['_FGAGETMODELRESPONSE']._serialized_end=7423 + _globals['_FGAWRITEMODELREQUEST']._serialized_start=7425 + _globals['_FGAWRITEMODELREQUEST']._serialized_end=7474 + _globals['_FGAWRITEMODELRESPONSE']._serialized_start=7476 + _globals['_FGAWRITEMODELRESPONSE']._serialized_end=7546 + _globals['_FGAWRITETUPLESREQUEST']._serialized_start=7548 + _globals['_FGAWRITETUPLESREQUEST']._serialized_end=7625 + _globals['_FGAWRITETUPLESRESPONSE']._serialized_start=7627 + _globals['_FGAWRITETUPLESRESPONSE']._serialized_end=7677 + _globals['_FGADELETETUPLESREQUEST']._serialized_start=7679 + _globals['_FGADELETETUPLESREQUEST']._serialized_end=7757 + _globals['_FGADELETETUPLESRESPONSE']._serialized_start=7759 + _globals['_FGADELETETUPLESRESPONSE']._serialized_end=7810 + _globals['_FGAREADTUPLESREQUEST']._serialized_start=7813 + _globals['_FGAREADTUPLESREQUEST']._serialized_end=8078 + _globals['_FGAREADTUPLESRESPONSE']._serialized_start=8081 + _globals['_FGAREADTUPLESRESPONSE']._serialized_end=8228 + _globals['_FGALISTUSERSREQUEST']._serialized_start=8231 + _globals['_FGALISTUSERSREQUEST']._serialized_end=8360 + _globals['_FGALISTUSERSRESPONSE']._serialized_start=8362 + _globals['_FGALISTUSERSRESPONSE']._serialized_end=8406 + _globals['_FGAEXPANDREQUEST']._serialized_start=8408 + _globals['_FGAEXPANDREQUEST']._serialized_end=8496 + _globals['_FGAEXPANDRESPONSE']._serialized_start=8498 + _globals['_FGAEXPANDRESPONSE']._serialized_end=8537 + _globals['_FGARESETREQUEST']._serialized_start=8539 + _globals['_FGARESETREQUEST']._serialized_end=8556 + _globals['_FGARESETRESPONSE']._serialized_start=8558 + _globals['_FGARESETRESPONSE']._serialized_end=8602 + _globals['_CLIENT']._serialized_start=8605 + _globals['_CLIENT']._serialized_end=8842 + _globals['_CREATECLIENTREQUEST']._serialized_start=8845 + _globals['_CREATECLIENTREQUEST']._serialized_end=8999 + _globals['_CREATECLIENTRESPONSE']._serialized_start=9001 + _globals['_CREATECLIENTRESPONSE']._serialized_end=9107 + _globals['_UPDATECLIENTREQUEST']._serialized_start=9110 + _globals['_UPDATECLIENTREQUEST']._serialized_end=9332 + _globals['_UPDATECLIENTRESPONSE']._serialized_start=9334 + _globals['_UPDATECLIENTRESPONSE']._serialized_end=9403 + _globals['_DELETECLIENTREQUEST']._serialized_start=9405 + _globals['_DELETECLIENTREQUEST']._serialized_end=9451 + _globals['_DELETECLIENTRESPONSE']._serialized_start=9453 + _globals['_DELETECLIENTRESPONSE']._serialized_end=9501 + _globals['_ROTATECLIENTSECRETREQUEST']._serialized_start=9503 + _globals['_ROTATECLIENTSECRETREQUEST']._serialized_end=9555 + _globals['_GETCLIENTREQUEST']._serialized_start=9557 + _globals['_GETCLIENTREQUEST']._serialized_end=9600 + _globals['_GETCLIENTRESPONSE']._serialized_start=9602 + _globals['_GETCLIENTRESPONSE']._serialized_end=9668 + _globals['_CLIENTSREQUEST']._serialized_start=9670 + _globals['_CLIENTSREQUEST']._serialized_end=9752 + _globals['_CLIENTSRESPONSE']._serialized_start=9754 + _globals['_CLIENTSRESPONSE']._serialized_end=9879 + _globals['_TRUSTEDISSUER']._serialized_start=9882 + _globals['_TRUSTEDISSUER']._serialized_end=10486 + _globals['_ADDTRUSTEDISSUERREQUEST']._serialized_start=10489 + _globals['_ADDTRUSTEDISSUERREQUEST']._serialized_end=11218 + _globals['_ADDTRUSTEDISSUERRESPONSE']._serialized_start=11220 + _globals['_ADDTRUSTEDISSUERRESPONSE']._serialized_end=11315 + _globals['_UPDATETRUSTEDISSUERREQUEST']._serialized_start=11318 + _globals['_UPDATETRUSTEDISSUERREQUEST']._serialized_end=11895 + _globals['_UPDATETRUSTEDISSUERRESPONSE']._serialized_start=11897 + _globals['_UPDATETRUSTEDISSUERRESPONSE']._serialized_end=11995 + _globals['_DELETETRUSTEDISSUERREQUEST']._serialized_start=11997 + _globals['_DELETETRUSTEDISSUERREQUEST']._serialized_end=12050 + _globals['_DELETETRUSTEDISSUERRESPONSE']._serialized_start=12052 + _globals['_DELETETRUSTEDISSUERRESPONSE']._serialized_end=12107 + _globals['_GETTRUSTEDISSUERREQUEST']._serialized_start=12109 + _globals['_GETTRUSTEDISSUERREQUEST']._serialized_end=12159 + _globals['_GETTRUSTEDISSUERRESPONSE']._serialized_start=12161 + _globals['_GETTRUSTEDISSUERRESPONSE']._serialized_end=12256 + _globals['_TRUSTEDISSUERSREQUEST']._serialized_start=12259 + _globals['_TRUSTEDISSUERSREQUEST']._serialized_end=12422 + _globals['_TRUSTEDISSUERSRESPONSE']._serialized_start=12425 + _globals['_TRUSTEDISSUERSRESPONSE']._serialized_end=12579 + _globals['_SAMLSERVICEPROVIDER']._serialized_start=12582 + _globals['_SAMLSERVICEPROVIDER']._serialized_end=12970 + _globals['_SAMLIDPKEY']._serialized_start=12973 + _globals['_SAMLIDPKEY']._serialized_end=13167 + _globals['_SAMLSPMETADATAPARSERESULT']._serialized_start=13169 + _globals['_SAMLSPMETADATAPARSERESULT']._serialized_end=13284 + _globals['_CREATESAMLSERVICEPROVIDERREQUEST']._serialized_start=13287 + _globals['_CREATESAMLSERVICEPROVIDERREQUEST']._serialized_end=13718 + _globals['_CREATESAMLSERVICEPROVIDERRESPONSE']._serialized_start=13720 + _globals['_CREATESAMLSERVICEPROVIDERRESPONSE']._serialized_end=13843 + _globals['_UPDATESAMLSERVICEPROVIDERREQUEST']._serialized_start=13846 + _globals['_UPDATESAMLSERVICEPROVIDERREQUEST']._serialized_end=14341 + _globals['_UPDATESAMLSERVICEPROVIDERRESPONSE']._serialized_start=14343 + _globals['_UPDATESAMLSERVICEPROVIDERRESPONSE']._serialized_end=14466 + _globals['_DELETESAMLSERVICEPROVIDERREQUEST']._serialized_start=14468 + _globals['_DELETESAMLSERVICEPROVIDERREQUEST']._serialized_end=14527 + _globals['_DELETESAMLSERVICEPROVIDERRESPONSE']._serialized_start=14529 + _globals['_DELETESAMLSERVICEPROVIDERRESPONSE']._serialized_end=14590 + _globals['_GETSAMLSERVICEPROVIDERREQUEST']._serialized_start=14592 + _globals['_GETSAMLSERVICEPROVIDERREQUEST']._serialized_end=14648 + _globals['_GETSAMLSERVICEPROVIDERRESPONSE']._serialized_start=14650 + _globals['_GETSAMLSERVICEPROVIDERRESPONSE']._serialized_end=14770 + _globals['_LISTSAMLSERVICEPROVIDERSREQUEST']._serialized_start=14773 + _globals['_LISTSAMLSERVICEPROVIDERSREQUEST']._serialized_end=14904 + _globals['_LISTSAMLSERVICEPROVIDERSRESPONSE']._serialized_start=14907 + _globals['_LISTSAMLSERVICEPROVIDERSRESPONSE']._serialized_end=15090 + _globals['_ROTATESAMLIDPCERTREQUEST']._serialized_start=15092 + _globals['_ROTATESAMLIDPCERTREQUEST']._serialized_end=15150 + _globals['_ROTATESAMLIDPCERTRESPONSE']._serialized_start=15152 + _globals['_ROTATESAMLIDPCERTRESPONSE']._serialized_end=15240 + _globals['_RETIRESAMLIDPKEYREQUEST']._serialized_start=15242 + _globals['_RETIRESAMLIDPKEYREQUEST']._serialized_end=15292 + _globals['_RETIRESAMLIDPKEYRESPONSE']._serialized_start=15294 + _globals['_RETIRESAMLIDPKEYRESPONSE']._serialized_end=15346 + _globals['_LISTSAMLIDPKEYSREQUEST']._serialized_start=15348 + _globals['_LISTSAMLIDPKEYSREQUEST']._serialized_end=15404 + _globals['_LISTSAMLIDPKEYSRESPONSE']._serialized_start=15406 + _globals['_LISTSAMLIDPKEYSRESPONSE']._serialized_end=15494 + _globals['_IMPORTSAMLSPMETADATAREQUEST']._serialized_start=15496 + _globals['_IMPORTSAMLSPMETADATAREQUEST']._serialized_end=15569 + _globals['_IMPORTSAMLSPMETADATARESPONSE']._serialized_start=15571 + _globals['_IMPORTSAMLSPMETADATARESPONSE']._serialized_end=15667 + _globals['_AUTHORIZERADMINSERVICE']._serialized_start=15670 + _globals['_AUTHORIZERADMINSERVICE']._serialized_end=22548 # @@protoc_insertion_point(module_scope) diff --git a/src/authorizer/_grpc/authorizer/v1/admin_pb2_grpc.py b/src/authorizer/_grpc/authorizer/v1/admin_pb2_grpc.py index 3e82b6e..129c839 100644 --- a/src/authorizer/_grpc/authorizer/v1/admin_pb2_grpc.py +++ b/src/authorizer/_grpc/authorizer/v1/admin_pb2_grpc.py @@ -178,6 +178,106 @@ def __init__(self, channel): request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaResetRequest.SerializeToString, response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaResetResponse.FromString, _registered_method=True) + self.CreateClient = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/CreateClient', + request_serializer=authorizer_dot_v1_dot_admin__pb2.CreateClientRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, + _registered_method=True) + self.UpdateClient = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/UpdateClient', + request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientResponse.FromString, + _registered_method=True) + self.DeleteClient = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/DeleteClient', + request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientResponse.FromString, + _registered_method=True) + self.RotateClientSecret = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/RotateClientSecret', + request_serializer=authorizer_dot_v1_dot_admin__pb2.RotateClientSecretRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, + _registered_method=True) + self.GetClient = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/GetClient', + request_serializer=authorizer_dot_v1_dot_admin__pb2.GetClientRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.GetClientResponse.FromString, + _registered_method=True) + self.Clients = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/Clients', + request_serializer=authorizer_dot_v1_dot_admin__pb2.ClientsRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.ClientsResponse.FromString, + _registered_method=True) + self.AddTrustedIssuer = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/AddTrustedIssuer', + request_serializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerResponse.FromString, + _registered_method=True) + self.UpdateTrustedIssuer = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/UpdateTrustedIssuer', + request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerResponse.FromString, + _registered_method=True) + self.DeleteTrustedIssuer = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/DeleteTrustedIssuer', + request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerResponse.FromString, + _registered_method=True) + self.GetTrustedIssuer = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/GetTrustedIssuer', + request_serializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerResponse.FromString, + _registered_method=True) + self.TrustedIssuers = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/TrustedIssuers', + request_serializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersResponse.FromString, + _registered_method=True) + self.CreateSamlServiceProvider = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/CreateSamlServiceProvider', + request_serializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderResponse.FromString, + _registered_method=True) + self.UpdateSamlServiceProvider = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/UpdateSamlServiceProvider', + request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderResponse.FromString, + _registered_method=True) + self.DeleteSamlServiceProvider = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/DeleteSamlServiceProvider', + request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderResponse.FromString, + _registered_method=True) + self.GetSamlServiceProvider = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/GetSamlServiceProvider', + request_serializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderResponse.FromString, + _registered_method=True) + self.ListSamlServiceProviders = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/ListSamlServiceProviders', + request_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersResponse.FromString, + _registered_method=True) + self.RotateSamlIdpCert = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/RotateSamlIdpCert', + request_serializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertResponse.FromString, + _registered_method=True) + self.RetireSamlIdpKey = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/RetireSamlIdpKey', + request_serializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyResponse.FromString, + _registered_method=True) + self.ListSamlIdpKeys = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/ListSamlIdpKeys', + request_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysResponse.FromString, + _registered_method=True) + self.ImportSamlSpMetadata = channel.unary_unary( + '/authorizer.v1.AuthorizerAdminService/ImportSamlSpMetadata', + request_serializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataResponse.FromString, + _registered_method=True) class AuthorizerAdminServiceServicer(object): @@ -458,6 +558,179 @@ def FgaReset(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def CreateClient(self, request, context): + """=== Service Accounts === + + CreateClient provisions a new machine/workload identity and returns + the generated client secret exactly once (only the bcrypt hash is stored). + Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateClient(self, request, context): + """UpdateClient updates a service account's name, description, allowed + scopes, or active state. It never touches the client secret. Requires + super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteClient(self, request, context): + """DeleteClient deletes a service account by id, cascading to its + trusted issuers. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RotateClientSecret(self, request, context): + """RotateClientSecret replaces the stored client secret with a fresh + one and returns the new plaintext exactly once (the old secret stops + validating immediately). Reuses CreateClientResponse — the only + admin message that carries a secret. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetClient(self, request, context): + """GetClient returns a single service account by id. The client secret + is never surfaced. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Clients(self, request, context): + """Clients returns a paginated list of service accounts. Client secrets + are never surfaced. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AddTrustedIssuer(self, request, context): + """=== Trusted Issuers === + + AddTrustedIssuer registers an external JWT issuer for a service account. + subject_claim defaults to "sub" when omitted. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateTrustedIssuer(self, request, context): + """UpdateTrustedIssuer updates a trusted issuer's name, JWKS URL, expected + audience, active state, or SPIFFE refresh hint. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteTrustedIssuer(self, request, context): + """DeleteTrustedIssuer deletes a trusted issuer by id. Requires super-admin + auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetTrustedIssuer(self, request, context): + """GetTrustedIssuer returns a single trusted issuer by id. Requires super-admin + auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def TrustedIssuers(self, request, context): + """TrustedIssuers returns a paginated list of trusted issuers, optionally + filtered by service_account_id. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateSamlServiceProvider(self, request, context): + """=== SAML IdP: downstream service providers === + + CreateSamlServiceProvider registers a downstream SAML 2.0 SP that Authorizer + (acting as the IdP) issues signed assertions to. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateSamlServiceProvider(self, request, context): + """UpdateSamlServiceProvider updates a downstream SP's name, endpoints, + certificate, attribute mapping, or active state. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteSamlServiceProvider(self, request, context): + """DeleteSamlServiceProvider deletes a downstream SP by id. Requires + super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetSamlServiceProvider(self, request, context): + """GetSamlServiceProvider returns a single downstream SP by id. Requires + super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListSamlServiceProviders(self, request, context): + """ListSamlServiceProviders returns a paginated list of downstream SPs for an + org. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RotateSamlIdpCert(self, request, context): + """=== SAML IdP: signing key rotation & SP-metadata import === + + RotateSamlIdpCert generates a new current signing keypair for an org's SAML + IdP, demoting the previous current key. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RetireSamlIdpKey(self, request, context): + """RetireSamlIdpKey retires a published-but-not-signing SAML IdP key by id. + Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListSamlIdpKeys(self, request, context): + """ListSamlIdpKeys returns all SAML IdP signing keys for an org. Requires + super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ImportSamlSpMetadata(self, request, context): + """ImportSamlSpMetadata parses pasted SP metadata XML and returns the fields to + prefill a create call. It does NOT create a record and performs no remote + fetch. Requires super-admin auth. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_AuthorizerAdminServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -621,6 +894,106 @@ def add_AuthorizerAdminServiceServicer_to_server(servicer, server): request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaResetRequest.FromString, response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaResetResponse.SerializeToString, ), + 'CreateClient': grpc.unary_unary_rpc_method_handler( + servicer.CreateClient, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateClientRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.SerializeToString, + ), + 'UpdateClient': grpc.unary_unary_rpc_method_handler( + servicer.UpdateClient, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientResponse.SerializeToString, + ), + 'DeleteClient': grpc.unary_unary_rpc_method_handler( + servicer.DeleteClient, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientResponse.SerializeToString, + ), + 'RotateClientSecret': grpc.unary_unary_rpc_method_handler( + servicer.RotateClientSecret, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.RotateClientSecretRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.SerializeToString, + ), + 'GetClient': grpc.unary_unary_rpc_method_handler( + servicer.GetClient, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.GetClientRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.GetClientResponse.SerializeToString, + ), + 'Clients': grpc.unary_unary_rpc_method_handler( + servicer.Clients, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.ClientsRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.ClientsResponse.SerializeToString, + ), + 'AddTrustedIssuer': grpc.unary_unary_rpc_method_handler( + servicer.AddTrustedIssuer, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerResponse.SerializeToString, + ), + 'UpdateTrustedIssuer': grpc.unary_unary_rpc_method_handler( + servicer.UpdateTrustedIssuer, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerResponse.SerializeToString, + ), + 'DeleteTrustedIssuer': grpc.unary_unary_rpc_method_handler( + servicer.DeleteTrustedIssuer, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerResponse.SerializeToString, + ), + 'GetTrustedIssuer': grpc.unary_unary_rpc_method_handler( + servicer.GetTrustedIssuer, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerResponse.SerializeToString, + ), + 'TrustedIssuers': grpc.unary_unary_rpc_method_handler( + servicer.TrustedIssuers, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersResponse.SerializeToString, + ), + 'CreateSamlServiceProvider': grpc.unary_unary_rpc_method_handler( + servicer.CreateSamlServiceProvider, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderResponse.SerializeToString, + ), + 'UpdateSamlServiceProvider': grpc.unary_unary_rpc_method_handler( + servicer.UpdateSamlServiceProvider, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderResponse.SerializeToString, + ), + 'DeleteSamlServiceProvider': grpc.unary_unary_rpc_method_handler( + servicer.DeleteSamlServiceProvider, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderResponse.SerializeToString, + ), + 'GetSamlServiceProvider': grpc.unary_unary_rpc_method_handler( + servicer.GetSamlServiceProvider, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderResponse.SerializeToString, + ), + 'ListSamlServiceProviders': grpc.unary_unary_rpc_method_handler( + servicer.ListSamlServiceProviders, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersResponse.SerializeToString, + ), + 'RotateSamlIdpCert': grpc.unary_unary_rpc_method_handler( + servicer.RotateSamlIdpCert, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertResponse.SerializeToString, + ), + 'RetireSamlIdpKey': grpc.unary_unary_rpc_method_handler( + servicer.RetireSamlIdpKey, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyResponse.SerializeToString, + ), + 'ListSamlIdpKeys': grpc.unary_unary_rpc_method_handler( + servicer.ListSamlIdpKeys, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysResponse.SerializeToString, + ), + 'ImportSamlSpMetadata': grpc.unary_unary_rpc_method_handler( + servicer.ImportSamlSpMetadata, + request_deserializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataRequest.FromString, + response_serializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'authorizer.v1.AuthorizerAdminService', rpc_method_handlers) @@ -1499,3 +1872,543 @@ def FgaReset(request, timeout, metadata, _registered_method=True) + + @staticmethod + def CreateClient(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/CreateClient', + authorizer_dot_v1_dot_admin__pb2.CreateClientRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateClient(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/UpdateClient', + authorizer_dot_v1_dot_admin__pb2.UpdateClientRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.UpdateClientResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteClient(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/DeleteClient', + authorizer_dot_v1_dot_admin__pb2.DeleteClientRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.DeleteClientResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RotateClientSecret(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/RotateClientSecret', + authorizer_dot_v1_dot_admin__pb2.RotateClientSecretRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetClient(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/GetClient', + authorizer_dot_v1_dot_admin__pb2.GetClientRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.GetClientResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Clients(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/Clients', + authorizer_dot_v1_dot_admin__pb2.ClientsRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.ClientsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def AddTrustedIssuer(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/AddTrustedIssuer', + authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateTrustedIssuer(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/UpdateTrustedIssuer', + authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteTrustedIssuer(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/DeleteTrustedIssuer', + authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetTrustedIssuer(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/GetTrustedIssuer', + authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def TrustedIssuers(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/TrustedIssuers', + authorizer_dot_v1_dot_admin__pb2.TrustedIssuersRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.TrustedIssuersResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def CreateSamlServiceProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/CreateSamlServiceProvider', + authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateSamlServiceProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/UpdateSamlServiceProvider', + authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteSamlServiceProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/DeleteSamlServiceProvider', + authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetSamlServiceProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/GetSamlServiceProvider', + authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListSamlServiceProviders(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/ListSamlServiceProviders', + authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RotateSamlIdpCert(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/RotateSamlIdpCert', + authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RetireSamlIdpKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/RetireSamlIdpKey', + authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListSamlIdpKeys(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/ListSamlIdpKeys', + authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ImportSamlSpMetadata(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerAdminService/ImportSamlSpMetadata', + authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataRequest.SerializeToString, + authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/src/authorizer/_grpc/authorizer/v1/annotations_pb2.py b/src/authorizer/_grpc/authorizer/v1/annotations_pb2.py index 30a1f15..ea4d125 100644 --- a/src/authorizer/_grpc/authorizer/v1/annotations_pb2.py +++ b/src/authorizer/_grpc/authorizer/v1/annotations_pb2.py @@ -25,14 +25,14 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x61uthorizer/v1/annotations.proto\x12\rauthorizer.v1\x1a google/protobuf/descriptor.proto\"I\n\x15PermissionRequirement\x12\x1a\n\x08resource\x18\x01 \x01(\tR\x08resource\x12\x14\n\x05scope\x18\x02 \x01(\tR\x05scope\"b\n\x07McpTool\x12\x18\n\x07\x65xposed\x18\x01 \x01(\x08R\x07\x65xposed\x12\x1b\n\ttool_name\x18\x02 \x01(\tR\x08toolName\x12 \n\x0b\x64\x65structive\x18\x03 \x01(\x08R\x0b\x64\x65structive:y\n\x14required_permissions\x12\x1e.google.protobuf.MethodOptions\x18\xd1\x86\x03 \x03(\x0b\x32$.authorizer.v1.PermissionRequirementR\x13requiredPermissions:S\n\x08mcp_tool\x12\x1e.google.protobuf.MethodOptions\x18\xd2\x86\x03 \x01(\x0b\x32\x16.authorizer.v1.McpToolR\x07mcpTool:=\n\taudit_log\x12\x1e.google.protobuf.MethodOptions\x18\xd3\x86\x03 \x01(\x08R\x08\x61uditLog:8\n\x06public\x12\x1e.google.protobuf.MethodOptions\x18\xd4\x86\x03 \x01(\x08R\x06publicB\xcc\x01\n\x11\x63om.authorizer.v1B\x10\x41nnotationsProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x61uthorizer/v1/annotations.proto\x12\rauthorizer.v1\x1a google/protobuf/descriptor.proto\"I\n\x15PermissionRequirement\x12\x1a\n\x08resource\x18\x01 \x01(\tR\x08resource\x12\x14\n\x05scope\x18\x02 \x01(\tR\x05scope\"b\n\x07McpTool\x12\x18\n\x07\x65xposed\x18\x01 \x01(\x08R\x07\x65xposed\x12\x1b\n\ttool_name\x18\x02 \x01(\tR\x08toolName\x12 \n\x0b\x64\x65structive\x18\x03 \x01(\x08R\x0b\x64\x65structive:y\n\x14required_permissions\x12\x1e.google.protobuf.MethodOptions\x18\xd1\x86\x03 \x03(\x0b\x32$.authorizer.v1.PermissionRequirementR\x13requiredPermissions:S\n\x08mcp_tool\x12\x1e.google.protobuf.MethodOptions\x18\xd2\x86\x03 \x01(\x0b\x32\x16.authorizer.v1.McpToolR\x07mcpTool:=\n\taudit_log\x12\x1e.google.protobuf.MethodOptions\x18\xd3\x86\x03 \x01(\x08R\x08\x61uditLog:8\n\x06public\x12\x1e.google.protobuf.MethodOptions\x18\xd4\x86\x03 \x01(\x08R\x06publicBz\n\x11\x63om.authorizer.v1B\x10\x41nnotationsProtoP\x01\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.annotations_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\020AnnotationsProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\020AnnotationsProtoP\001\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' _globals['_PERMISSIONREQUIREMENT']._serialized_start=84 _globals['_PERMISSIONREQUIREMENT']._serialized_end=157 _globals['_MCPTOOL']._serialized_start=159 diff --git a/src/authorizer/_grpc/authorizer/v1/authorizer_pb2.py b/src/authorizer/_grpc/authorizer/v1/authorizer_pb2.py index f5f1faa..920d469 100644 --- a/src/authorizer/_grpc/authorizer/v1/authorizer_pb2.py +++ b/src/authorizer/_grpc/authorizer/v1/authorizer_pb2.py @@ -29,14 +29,14 @@ from authorizer._grpc.google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x61uthorizer/v1/authorizer.proto\x12\rauthorizer.v1\x1a\x1f\x61uthorizer/v1/annotations.proto\x1a\x1a\x61uthorizer/v1/common.proto\x1a\x19\x61uthorizer/v1/types.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\"\xdf\x04\n\rSignupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x35\n\x10\x63onfirm_password\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x0f\x63onfirmPassword\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12\x16\n\x06gender\x18\t \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\n \x01(\tR\tbirthdate\x12\x18\n\x07picture\x18\x0b \x01(\tR\x07picture\x12\x14\n\x05roles\x18\x0c \x03(\tR\x05roles\x12\x14\n\x05scope\x18\r \x03(\tR\x05scope\x12!\n\x0credirect_uri\x18\x0e \x01(\tR\x0bredirectUri\x12>\n\x1cis_multi_factor_auth_enabled\x18\x0f \x01(\x08R\x18isMultiFactorAuthEnabled\x12\x14\n\x05state\x18\x10 \x01(\tR\x05state\x12\x31\n\x08\x61pp_data\x18\x11 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppData\"\xc4\x01\n\x0cLoginRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x14\n\x05roles\x18\x04 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x05 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\"\x0f\n\rLogoutRequest\"*\n\x0eLogoutResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x9c\x01\n\x15MagicLinkLoginRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\x14\n\x05roles\x18\x02 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x03 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x04 \x01(\tR\x05state\x12!\n\x0credirect_uri\x18\x05 \x01(\tR\x0bredirectUri\"2\n\x16MagicLinkLoginResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"I\n\x12VerifyEmailRequest\x12\x1d\n\x05token\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05token\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\"y\n\x18ResendVerifyEmailRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\'\n\nidentifier\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nidentifier\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"5\n\x19ResendVerifyEmailResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xaa\x01\n\x10VerifyOtpRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x1b\n\x03otp\x18\x03 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x10R\x03otp\x12\x17\n\x07is_totp\x18\x04 \x01(\x08R\x06isTotp\x12\x14\n\x05state\x18\x05 \x01(\tR\x05state\"t\n\x10ResendOtpRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"-\n\x11ResendOtpResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x9c\x01\n\x15\x46orgotPasswordRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\x12!\n\x0credirect_uri\x18\x04 \x01(\tR\x0bredirectUri\"t\n\x16\x46orgotPasswordResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12@\n\x1dshould_show_mobile_otp_screen\x18\x02 \x01(\x08R\x19shouldShowMobileOtpScreen\"\xc9\x01\n\x14ResetPasswordRequest\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x10\n\x03otp\x18\x02 \x01(\tR\x03otp\x12*\n\x0cphone_number\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x35\n\x10\x63onfirm_password\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x0f\x63onfirmPassword\"1\n\x15ResetPasswordResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x10\n\x0eProfileRequest\"\xd4\x04\n\x14UpdateProfileRequest\x12!\n\x0cold_password\x18\x01 \x01(\tR\x0boldPassword\x12+\n\x0cnew_password\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x0bnewPassword\x12:\n\x14\x63onfirm_new_password\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x12\x63onfirmNewPassword\x12\x1e\n\x05\x65mail\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12\x16\n\x06gender\x18\t \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\n \x01(\tR\tbirthdate\x12*\n\x0cphone_number\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x18\n\x07picture\x18\x0c \x01(\tR\x07picture\x12\x43\n\x1cis_multi_factor_auth_enabled\x18\r \x01(\x08H\x00R\x18isMultiFactorAuthEnabled\x88\x01\x01\x12\x31\n\x08\x61pp_data\x18\x0e \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppDataB\x1f\n\x1d_is_multi_factor_auth_enabled\"1\n\x15UpdateProfileResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x1a\n\x18\x44\x65\x61\x63tivateAccountRequest\"5\n\x19\x44\x65\x61\x63tivateAccountResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"=\n\rRevokeRequest\x12,\n\rrefresh_token\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0crefreshToken\"*\n\x0eRevokeResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xa2\x01\n\x0eSessionRequest\x12\x14\n\x05roles\x18\x01 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x02 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\x12N\n\x12required_relations\x18\x04 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"\xc6\x01\n\x17ValidateJwtTokenRequest\x12&\n\ntoken_type\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\ttokenType\x12\x1d\n\x05token\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05token\x12\x14\n\x05roles\x18\x03 \x03(\tR\x05roles\x12N\n\x12required_relations\x18\x04 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"e\n\x18ValidateJwtTokenResponse\x12\x19\n\x08is_valid\x18\x01 \x01(\x08R\x07isValid\x12.\n\x06\x63laims\x18\x02 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x06\x63laims\"\x9f\x01\n\x16ValidateSessionRequest\x12\x1f\n\x06\x63ookie\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06\x63ookie\x12\x14\n\x05roles\x18\x02 \x03(\tR\x05roles\x12N\n\x12required_relations\x18\x03 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"]\n\x17ValidateSessionResponse\x12\x19\n\x08is_valid\x18\x01 \x01(\x08R\x07isValid\x12\'\n\x04user\x18\x02 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"\r\n\x0bMetaRequest\"v\n\x17\x43heckPermissionsRequest\x12G\n\x06\x63hecks\x18\x01 \x03(\x0b\x32#.authorizer.v1.PermissionCheckInputB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\x64R\x06\x63hecks\x12\x12\n\x04user\x18\x02 \x01(\tR\x04user\"Z\n\x18\x43heckPermissionsResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32$.authorizer.v1.PermissionCheckResultR\x07results\"i\n\x16ListPermissionsRequest\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x1f\n\x0bobject_type\x18\x02 \x01(\tR\nobjectType\x12\x12\n\x04user\x18\x03 \x01(\tR\x04user\"\x8e\x01\n\x17ListPermissionsResponse\x12\x18\n\x07objects\x18\x01 \x03(\tR\x07objects\x12;\n\x0bpermissions\x18\x02 \x03(\x0b\x32\x19.authorizer.v1.PermissionR\x0bpermissions\x12\x1c\n\ttruncated\x18\x03 \x01(\x08R\ttruncated2\xe8\x12\n\x11\x41uthorizerService\x12\x66\n\x06Signup\x12\x1c.authorizer.v1.SignupRequest\x1a\x1b.authorizer.v1.AuthResponse\"!\x92\xb5\x18\x00\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0f\"\n/v1/signup:\x01*\x12\x63\n\x05Login\x12\x1b.authorizer.v1.LoginRequest\x1a\x1b.authorizer.v1.AuthResponse\" \x92\xb5\x18\x00\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0e\"\t/v1/login:\x01*\x12]\n\x06Logout\x12\x1c.authorizer.v1.LogoutRequest\x1a\x1d.authorizer.v1.LogoutResponse\"\x16\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0c\"\n/v1/logout\x12\x86\x01\n\x0eMagicLinkLogin\x12$.authorizer.v1.MagicLinkLoginRequest\x1a%.authorizer.v1.MagicLinkLoginResponse\"\'\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/magic_link_login:\x01*\x12r\n\x0bVerifyEmail\x12!.authorizer.v1.VerifyEmailRequest\x1a\x1b.authorizer.v1.AuthResponse\"#\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x15\"\x10/v1/verify_email:\x01*\x12\x8e\x01\n\x11ResendVerifyEmail\x12\'.authorizer.v1.ResendVerifyEmailRequest\x1a(.authorizer.v1.ResendVerifyEmailResponse\"&\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/resend_verify_email:\x01*\x12l\n\tVerifyOtp\x12\x1f.authorizer.v1.VerifyOtpRequest\x1a\x1b.authorizer.v1.AuthResponse\"!\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/verify_otp:\x01*\x12m\n\tResendOtp\x12\x1f.authorizer.v1.ResendOtpRequest\x1a .authorizer.v1.ResendOtpResponse\"\x1d\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/resend_otp:\x01*\x12\x81\x01\n\x0e\x46orgotPassword\x12$.authorizer.v1.ForgotPasswordRequest\x1a%.authorizer.v1.ForgotPasswordResponse\"\"\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x18\"\x13/v1/forgot_password:\x01*\x12\x81\x01\n\rResetPassword\x12#.authorizer.v1.ResetPasswordRequest\x1a$.authorizer.v1.ResetPasswordResponse\"%\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/reset_password:\x01*\x12X\n\x07Profile\x12\x1d.authorizer.v1.ProfileRequest\x1a\x13.authorizer.v1.User\"\x19\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\r\x12\x0b/v1/profile\x12}\n\rUpdateProfile\x12#.authorizer.v1.UpdateProfileRequest\x1a$.authorizer.v1.UpdateProfileResponse\"!\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/update_profile:\x01*\x12\x93\x01\n\x11\x44\x65\x61\x63tivateAccount\x12\'.authorizer.v1.DeactivateAccountRequest\x1a(.authorizer.v1.DeactivateAccountResponse\"+\x92\xb5\x18\x02\x18\x01\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/deactivate_account:\x01*\x12\x64\n\x06Revoke\x12\x1c.authorizer.v1.RevokeRequest\x1a\x1d.authorizer.v1.RevokeResponse\"\x1d\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0f\"\n/v1/revoke:\x01*\x12]\n\x07Session\x12\x1d.authorizer.v1.SessionRequest\x1a\x1b.authorizer.v1.AuthResponse\"\x16\x82\xd3\xe4\x93\x02\x10\"\x0b/v1/session:\x01*\x12\x8a\x01\n\x10ValidateJwtToken\x12&.authorizer.v1.ValidateJwtTokenRequest\x1a\'.authorizer.v1.ValidateJwtTokenResponse\"%\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/validate_jwt_token:\x01*\x12\x85\x01\n\x0fValidateSession\x12%.authorizer.v1.ValidateSessionRequest\x1a&.authorizer.v1.ValidateSessionResponse\"#\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/validate_session:\x01*\x12S\n\x04Meta\x12\x1a.authorizer.v1.MetaRequest\x1a\x13.authorizer.v1.Meta\"\x1a\x92\xb5\x18\x02\x08\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\n\x12\x08/v1/meta\x12\x8b\x01\n\x10\x43heckPermissions\x12&.authorizer.v1.CheckPermissionsRequest\x1a\'.authorizer.v1.CheckPermissionsResponse\"&\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\x1a\"\x15/v1/check_permissions:\x01*\x12\x87\x01\n\x0fListPermissions\x12%.authorizer.v1.ListPermissionsRequest\x1a&.authorizer.v1.ListPermissionsResponse\"%\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/list_permissions:\x01*B\xcb\x01\n\x11\x63om.authorizer.v1B\x0f\x41uthorizerProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x61uthorizer/v1/authorizer.proto\x12\rauthorizer.v1\x1a\x1f\x61uthorizer/v1/annotations.proto\x1a\x1a\x61uthorizer/v1/common.proto\x1a\x19\x61uthorizer/v1/types.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\"\xc3\x04\n\rSignupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x35\n\x10\x63onfirm_password\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x0f\x63onfirmPassword\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12\x16\n\x06gender\x18\t \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\n \x01(\tR\tbirthdate\x12\x18\n\x07picture\x18\x0b \x01(\tR\x07picture\x12\x14\n\x05roles\x18\x0c \x03(\tR\x05roles\x12\x14\n\x05scope\x18\r \x03(\tR\x05scope\x12!\n\x0credirect_uri\x18\x0e \x01(\tR\x0bredirectUri\x12\x14\n\x05state\x18\x10 \x01(\tR\x05state\x12\x31\n\x08\x61pp_data\x18\x11 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppDataJ\x04\x08\x0f\x10\x10R\x1cis_multi_factor_auth_enabled\"\xc4\x01\n\x0cLoginRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x14\n\x05roles\x18\x04 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x05 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\"\x0f\n\rLogoutRequest\"*\n\x0eLogoutResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x9c\x01\n\x15MagicLinkLoginRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\x14\n\x05roles\x18\x02 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x03 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x04 \x01(\tR\x05state\x12!\n\x0credirect_uri\x18\x05 \x01(\tR\x0bredirectUri\"2\n\x16MagicLinkLoginResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"I\n\x12VerifyEmailRequest\x12\x1d\n\x05token\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05token\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\"y\n\x18ResendVerifyEmailRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\'\n\nidentifier\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nidentifier\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"5\n\x19ResendVerifyEmailResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xaa\x01\n\x10VerifyOtpRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x1b\n\x03otp\x18\x03 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x10R\x03otp\x12\x17\n\x07is_totp\x18\x04 \x01(\x08R\x06isTotp\x12\x14\n\x05state\x18\x05 \x01(\tR\x05state\"t\n\x10ResendOtpRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"-\n\x11ResendOtpResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"w\n\x13SkipMfaSetupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"\\\n\x0eLockMfaRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\"+\n\x0fLockMfaResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"e\n\x17\x45mailOtpMfaSetupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\"4\n\x18\x45mailOtpMfaSetupResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"c\n\x15SmsOtpMfaSetupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\"2\n\x16SmsOtpMfaSetupResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x9c\x01\n\x15\x46orgotPasswordRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\x12!\n\x0credirect_uri\x18\x04 \x01(\tR\x0bredirectUri\"t\n\x16\x46orgotPasswordResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12@\n\x1dshould_show_mobile_otp_screen\x18\x02 \x01(\x08R\x19shouldShowMobileOtpScreen\"\xc9\x01\n\x14ResetPasswordRequest\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x10\n\x03otp\x18\x02 \x01(\tR\x03otp\x12*\n\x0cphone_number\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x35\n\x10\x63onfirm_password\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x0f\x63onfirmPassword\"1\n\x15ResetPasswordResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x10\n\x0eProfileRequest\"\xd4\x04\n\x14UpdateProfileRequest\x12!\n\x0cold_password\x18\x01 \x01(\tR\x0boldPassword\x12+\n\x0cnew_password\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x0bnewPassword\x12:\n\x14\x63onfirm_new_password\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x12\x63onfirmNewPassword\x12\x1e\n\x05\x65mail\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12\x16\n\x06gender\x18\t \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\n \x01(\tR\tbirthdate\x12*\n\x0cphone_number\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x18\n\x07picture\x18\x0c \x01(\tR\x07picture\x12\x43\n\x1cis_multi_factor_auth_enabled\x18\r \x01(\x08H\x00R\x18isMultiFactorAuthEnabled\x88\x01\x01\x12\x31\n\x08\x61pp_data\x18\x0e \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppDataB\x1f\n\x1d_is_multi_factor_auth_enabled\"1\n\x15UpdateProfileResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x1a\n\x18\x44\x65\x61\x63tivateAccountRequest\"5\n\x19\x44\x65\x61\x63tivateAccountResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"=\n\rRevokeRequest\x12,\n\rrefresh_token\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0crefreshToken\"*\n\x0eRevokeResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xa2\x01\n\x0eSessionRequest\x12\x14\n\x05roles\x18\x01 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x02 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\x12N\n\x12required_relations\x18\x04 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"\xc6\x01\n\x17ValidateJwtTokenRequest\x12&\n\ntoken_type\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\ttokenType\x12\x1d\n\x05token\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05token\x12\x14\n\x05roles\x18\x03 \x03(\tR\x05roles\x12N\n\x12required_relations\x18\x04 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"e\n\x18ValidateJwtTokenResponse\x12\x19\n\x08is_valid\x18\x01 \x01(\x08R\x07isValid\x12.\n\x06\x63laims\x18\x02 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x06\x63laims\"\x9f\x01\n\x16ValidateSessionRequest\x12\x1f\n\x06\x63ookie\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06\x63ookie\x12\x14\n\x05roles\x18\x02 \x03(\tR\x05roles\x12N\n\x12required_relations\x18\x03 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"]\n\x17ValidateSessionResponse\x12\x19\n\x08is_valid\x18\x01 \x01(\x08R\x07isValid\x12\'\n\x04user\x18\x02 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"\r\n\x0bMetaRequest\"v\n\x17\x43heckPermissionsRequest\x12G\n\x06\x63hecks\x18\x01 \x03(\x0b\x32#.authorizer.v1.PermissionCheckInputB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\x64R\x06\x63hecks\x12\x12\n\x04user\x18\x02 \x01(\tR\x04user\"Z\n\x18\x43heckPermissionsResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32$.authorizer.v1.PermissionCheckResultR\x07results\"i\n\x16ListPermissionsRequest\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x1f\n\x0bobject_type\x18\x02 \x01(\tR\nobjectType\x12\x12\n\x04user\x18\x03 \x01(\tR\x04user\"\x8e\x01\n\x17ListPermissionsResponse\x12\x18\n\x07objects\x18\x01 \x03(\tR\x07objects\x12;\n\x0bpermissions\x18\x02 \x03(\x0b\x32\x19.authorizer.v1.PermissionR\x0bpermissions\x12\x1c\n\ttruncated\x18\x03 \x01(\x08R\ttruncated2\xe7\x16\n\x11\x41uthorizerService\x12\x66\n\x06Signup\x12\x1c.authorizer.v1.SignupRequest\x1a\x1b.authorizer.v1.AuthResponse\"!\x92\xb5\x18\x00\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0f\"\n/v1/signup:\x01*\x12\x63\n\x05Login\x12\x1b.authorizer.v1.LoginRequest\x1a\x1b.authorizer.v1.AuthResponse\" \x92\xb5\x18\x00\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0e\"\t/v1/login:\x01*\x12]\n\x06Logout\x12\x1c.authorizer.v1.LogoutRequest\x1a\x1d.authorizer.v1.LogoutResponse\"\x16\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0c\"\n/v1/logout\x12\x86\x01\n\x0eMagicLinkLogin\x12$.authorizer.v1.MagicLinkLoginRequest\x1a%.authorizer.v1.MagicLinkLoginResponse\"\'\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/magic_link_login:\x01*\x12r\n\x0bVerifyEmail\x12!.authorizer.v1.VerifyEmailRequest\x1a\x1b.authorizer.v1.AuthResponse\"#\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x15\"\x10/v1/verify_email:\x01*\x12\x8e\x01\n\x11ResendVerifyEmail\x12\'.authorizer.v1.ResendVerifyEmailRequest\x1a(.authorizer.v1.ResendVerifyEmailResponse\"&\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/resend_verify_email:\x01*\x12l\n\tVerifyOtp\x12\x1f.authorizer.v1.VerifyOtpRequest\x1a\x1b.authorizer.v1.AuthResponse\"!\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/verify_otp:\x01*\x12m\n\tResendOtp\x12\x1f.authorizer.v1.ResendOtpRequest\x1a .authorizer.v1.ResendOtpResponse\"\x1d\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/resend_otp:\x01*\x12v\n\x0cSkipMfaSetup\x12\".authorizer.v1.SkipMfaSetupRequest\x1a\x1b.authorizer.v1.AuthResponse\"%\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/skip_mfa_setup:\x01*\x12i\n\x07LockMfa\x12\x1d.authorizer.v1.LockMfaRequest\x1a\x1e.authorizer.v1.LockMfaResponse\"\x1f\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x11\"\x0c/v1/lock_mfa:\x01*\x12\x8f\x01\n\x10\x45mailOtpMfaSetup\x12&.authorizer.v1.EmailOtpMfaSetupRequest\x1a\'.authorizer.v1.EmailOtpMfaSetupResponse\"*\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/email_otp_mfa_setup:\x01*\x12\x87\x01\n\x0eSmsOtpMfaSetup\x12$.authorizer.v1.SmsOtpMfaSetupRequest\x1a%.authorizer.v1.SmsOtpMfaSetupResponse\"(\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1a\"\x15/v1/sms_otp_mfa_setup:\x01*\x12\x81\x01\n\x0e\x46orgotPassword\x12$.authorizer.v1.ForgotPasswordRequest\x1a%.authorizer.v1.ForgotPasswordResponse\"\"\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x18\"\x13/v1/forgot_password:\x01*\x12\x81\x01\n\rResetPassword\x12#.authorizer.v1.ResetPasswordRequest\x1a$.authorizer.v1.ResetPasswordResponse\"%\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/reset_password:\x01*\x12X\n\x07Profile\x12\x1d.authorizer.v1.ProfileRequest\x1a\x13.authorizer.v1.User\"\x19\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\r\x12\x0b/v1/profile\x12}\n\rUpdateProfile\x12#.authorizer.v1.UpdateProfileRequest\x1a$.authorizer.v1.UpdateProfileResponse\"!\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/update_profile:\x01*\x12\x93\x01\n\x11\x44\x65\x61\x63tivateAccount\x12\'.authorizer.v1.DeactivateAccountRequest\x1a(.authorizer.v1.DeactivateAccountResponse\"+\x92\xb5\x18\x02\x18\x01\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/deactivate_account:\x01*\x12\x64\n\x06Revoke\x12\x1c.authorizer.v1.RevokeRequest\x1a\x1d.authorizer.v1.RevokeResponse\"\x1d\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0f\"\n/v1/revoke:\x01*\x12]\n\x07Session\x12\x1d.authorizer.v1.SessionRequest\x1a\x1b.authorizer.v1.AuthResponse\"\x16\x82\xd3\xe4\x93\x02\x10\"\x0b/v1/session:\x01*\x12\x8a\x01\n\x10ValidateJwtToken\x12&.authorizer.v1.ValidateJwtTokenRequest\x1a\'.authorizer.v1.ValidateJwtTokenResponse\"%\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/validate_jwt_token:\x01*\x12\x85\x01\n\x0fValidateSession\x12%.authorizer.v1.ValidateSessionRequest\x1a&.authorizer.v1.ValidateSessionResponse\"#\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/validate_session:\x01*\x12S\n\x04Meta\x12\x1a.authorizer.v1.MetaRequest\x1a\x13.authorizer.v1.Meta\"\x1a\x92\xb5\x18\x02\x08\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\n\x12\x08/v1/meta\x12\x8b\x01\n\x10\x43heckPermissions\x12&.authorizer.v1.CheckPermissionsRequest\x1a\'.authorizer.v1.CheckPermissionsResponse\"&\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\x1a\"\x15/v1/check_permissions:\x01*\x12\x87\x01\n\x0fListPermissions\x12%.authorizer.v1.ListPermissionsRequest\x1a&.authorizer.v1.ListPermissionsResponse\"%\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/list_permissions:\x01*By\n\x11\x63om.authorizer.v1B\x0f\x41uthorizerProtoP\x01\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.authorizer_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\017AuthorizerProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\017AuthorizerProtoP\001\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' _globals['_SIGNUPREQUEST'].fields_by_name['email']._loaded_options = None _globals['_SIGNUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' _globals['_SIGNUPREQUEST'].fields_by_name['phone_number']._loaded_options = None @@ -69,6 +69,22 @@ _globals['_RESENDOTPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' _globals['_RESENDOTPREQUEST'].fields_by_name['phone_number']._loaded_options = None _globals['_RESENDOTPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' + _globals['_SKIPMFASETUPREQUEST'].fields_by_name['email']._loaded_options = None + _globals['_SKIPMFASETUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' + _globals['_SKIPMFASETUPREQUEST'].fields_by_name['phone_number']._loaded_options = None + _globals['_SKIPMFASETUPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' + _globals['_LOCKMFAREQUEST'].fields_by_name['email']._loaded_options = None + _globals['_LOCKMFAREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' + _globals['_LOCKMFAREQUEST'].fields_by_name['phone_number']._loaded_options = None + _globals['_LOCKMFAREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' + _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['email']._loaded_options = None + _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' + _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['phone_number']._loaded_options = None + _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' + _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['email']._loaded_options = None + _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' + _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['phone_number']._loaded_options = None + _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' _globals['_FORGOTPASSWORDREQUEST'].fields_by_name['email']._loaded_options = None _globals['_FORGOTPASSWORDREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' _globals['_FORGOTPASSWORDREQUEST'].fields_by_name['phone_number']._loaded_options = None @@ -113,6 +129,14 @@ _globals['_AUTHORIZERSERVICE'].methods_by_name['VerifyOtp']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\023\"\016/v1/verify_otp:\001*' _globals['_AUTHORIZERSERVICE'].methods_by_name['ResendOtp']._loaded_options = None _globals['_AUTHORIZERSERVICE'].methods_by_name['ResendOtp']._serialized_options = b'\240\265\030\001\202\323\344\223\002\023\"\016/v1/resend_otp:\001*' + _globals['_AUTHORIZERSERVICE'].methods_by_name['SkipMfaSetup']._loaded_options = None + _globals['_AUTHORIZERSERVICE'].methods_by_name['SkipMfaSetup']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\027\"\022/v1/skip_mfa_setup:\001*' + _globals['_AUTHORIZERSERVICE'].methods_by_name['LockMfa']._loaded_options = None + _globals['_AUTHORIZERSERVICE'].methods_by_name['LockMfa']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\021\"\014/v1/lock_mfa:\001*' + _globals['_AUTHORIZERSERVICE'].methods_by_name['EmailOtpMfaSetup']._loaded_options = None + _globals['_AUTHORIZERSERVICE'].methods_by_name['EmailOtpMfaSetup']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\034\"\027/v1/email_otp_mfa_setup:\001*' + _globals['_AUTHORIZERSERVICE'].methods_by_name['SmsOtpMfaSetup']._loaded_options = None + _globals['_AUTHORIZERSERVICE'].methods_by_name['SmsOtpMfaSetup']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\032\"\025/v1/sms_otp_mfa_setup:\001*' _globals['_AUTHORIZERSERVICE'].methods_by_name['ForgotPassword']._loaded_options = None _globals['_AUTHORIZERSERVICE'].methods_by_name['ForgotPassword']._serialized_options = b'\240\265\030\001\202\323\344\223\002\030\"\023/v1/forgot_password:\001*' _globals['_AUTHORIZERSERVICE'].methods_by_name['ResetPassword']._loaded_options = None @@ -138,71 +162,85 @@ _globals['_AUTHORIZERSERVICE'].methods_by_name['ListPermissions']._loaded_options = None _globals['_AUTHORIZERSERVICE'].methods_by_name['ListPermissions']._serialized_options = b'\222\265\030\002\010\001\202\323\344\223\002\031\"\024/v1/list_permissions:\001*' _globals['_SIGNUPREQUEST']._serialized_start=197 - _globals['_SIGNUPREQUEST']._serialized_end=804 - _globals['_LOGINREQUEST']._serialized_start=807 - _globals['_LOGINREQUEST']._serialized_end=1003 - _globals['_LOGOUTREQUEST']._serialized_start=1005 - _globals['_LOGOUTREQUEST']._serialized_end=1020 - _globals['_LOGOUTRESPONSE']._serialized_start=1022 - _globals['_LOGOUTRESPONSE']._serialized_end=1064 - _globals['_MAGICLINKLOGINREQUEST']._serialized_start=1067 - _globals['_MAGICLINKLOGINREQUEST']._serialized_end=1223 - _globals['_MAGICLINKLOGINRESPONSE']._serialized_start=1225 - _globals['_MAGICLINKLOGINRESPONSE']._serialized_end=1275 - _globals['_VERIFYEMAILREQUEST']._serialized_start=1277 - _globals['_VERIFYEMAILREQUEST']._serialized_end=1350 - _globals['_RESENDVERIFYEMAILREQUEST']._serialized_start=1352 - _globals['_RESENDVERIFYEMAILREQUEST']._serialized_end=1473 - _globals['_RESENDVERIFYEMAILRESPONSE']._serialized_start=1475 - _globals['_RESENDVERIFYEMAILRESPONSE']._serialized_end=1528 - _globals['_VERIFYOTPREQUEST']._serialized_start=1531 - _globals['_VERIFYOTPREQUEST']._serialized_end=1701 - _globals['_RESENDOTPREQUEST']._serialized_start=1703 - _globals['_RESENDOTPREQUEST']._serialized_end=1819 - _globals['_RESENDOTPRESPONSE']._serialized_start=1821 - _globals['_RESENDOTPRESPONSE']._serialized_end=1866 - _globals['_FORGOTPASSWORDREQUEST']._serialized_start=1869 - _globals['_FORGOTPASSWORDREQUEST']._serialized_end=2025 - _globals['_FORGOTPASSWORDRESPONSE']._serialized_start=2027 - _globals['_FORGOTPASSWORDRESPONSE']._serialized_end=2143 - _globals['_RESETPASSWORDREQUEST']._serialized_start=2146 - _globals['_RESETPASSWORDREQUEST']._serialized_end=2347 - _globals['_RESETPASSWORDRESPONSE']._serialized_start=2349 - _globals['_RESETPASSWORDRESPONSE']._serialized_end=2398 - _globals['_PROFILEREQUEST']._serialized_start=2400 - _globals['_PROFILEREQUEST']._serialized_end=2416 - _globals['_UPDATEPROFILEREQUEST']._serialized_start=2419 - _globals['_UPDATEPROFILEREQUEST']._serialized_end=3015 - _globals['_UPDATEPROFILERESPONSE']._serialized_start=3017 - _globals['_UPDATEPROFILERESPONSE']._serialized_end=3066 - _globals['_DEACTIVATEACCOUNTREQUEST']._serialized_start=3068 - _globals['_DEACTIVATEACCOUNTREQUEST']._serialized_end=3094 - _globals['_DEACTIVATEACCOUNTRESPONSE']._serialized_start=3096 - _globals['_DEACTIVATEACCOUNTRESPONSE']._serialized_end=3149 - _globals['_REVOKEREQUEST']._serialized_start=3151 - _globals['_REVOKEREQUEST']._serialized_end=3212 - _globals['_REVOKERESPONSE']._serialized_start=3214 - _globals['_REVOKERESPONSE']._serialized_end=3256 - _globals['_SESSIONREQUEST']._serialized_start=3259 - _globals['_SESSIONREQUEST']._serialized_end=3421 - _globals['_VALIDATEJWTTOKENREQUEST']._serialized_start=3424 - _globals['_VALIDATEJWTTOKENREQUEST']._serialized_end=3622 - _globals['_VALIDATEJWTTOKENRESPONSE']._serialized_start=3624 - _globals['_VALIDATEJWTTOKENRESPONSE']._serialized_end=3725 - _globals['_VALIDATESESSIONREQUEST']._serialized_start=3728 - _globals['_VALIDATESESSIONREQUEST']._serialized_end=3887 - _globals['_VALIDATESESSIONRESPONSE']._serialized_start=3889 - _globals['_VALIDATESESSIONRESPONSE']._serialized_end=3982 - _globals['_METAREQUEST']._serialized_start=3984 - _globals['_METAREQUEST']._serialized_end=3997 - _globals['_CHECKPERMISSIONSREQUEST']._serialized_start=3999 - _globals['_CHECKPERMISSIONSREQUEST']._serialized_end=4117 - _globals['_CHECKPERMISSIONSRESPONSE']._serialized_start=4119 - _globals['_CHECKPERMISSIONSRESPONSE']._serialized_end=4209 - _globals['_LISTPERMISSIONSREQUEST']._serialized_start=4211 - _globals['_LISTPERMISSIONSREQUEST']._serialized_end=4316 - _globals['_LISTPERMISSIONSRESPONSE']._serialized_start=4319 - _globals['_LISTPERMISSIONSRESPONSE']._serialized_end=4461 - _globals['_AUTHORIZERSERVICE']._serialized_start=4464 - _globals['_AUTHORIZERSERVICE']._serialized_end=6872 + _globals['_SIGNUPREQUEST']._serialized_end=776 + _globals['_LOGINREQUEST']._serialized_start=779 + _globals['_LOGINREQUEST']._serialized_end=975 + _globals['_LOGOUTREQUEST']._serialized_start=977 + _globals['_LOGOUTREQUEST']._serialized_end=992 + _globals['_LOGOUTRESPONSE']._serialized_start=994 + _globals['_LOGOUTRESPONSE']._serialized_end=1036 + _globals['_MAGICLINKLOGINREQUEST']._serialized_start=1039 + _globals['_MAGICLINKLOGINREQUEST']._serialized_end=1195 + _globals['_MAGICLINKLOGINRESPONSE']._serialized_start=1197 + _globals['_MAGICLINKLOGINRESPONSE']._serialized_end=1247 + _globals['_VERIFYEMAILREQUEST']._serialized_start=1249 + _globals['_VERIFYEMAILREQUEST']._serialized_end=1322 + _globals['_RESENDVERIFYEMAILREQUEST']._serialized_start=1324 + _globals['_RESENDVERIFYEMAILREQUEST']._serialized_end=1445 + _globals['_RESENDVERIFYEMAILRESPONSE']._serialized_start=1447 + _globals['_RESENDVERIFYEMAILRESPONSE']._serialized_end=1500 + _globals['_VERIFYOTPREQUEST']._serialized_start=1503 + _globals['_VERIFYOTPREQUEST']._serialized_end=1673 + _globals['_RESENDOTPREQUEST']._serialized_start=1675 + _globals['_RESENDOTPREQUEST']._serialized_end=1791 + _globals['_RESENDOTPRESPONSE']._serialized_start=1793 + _globals['_RESENDOTPRESPONSE']._serialized_end=1838 + _globals['_SKIPMFASETUPREQUEST']._serialized_start=1840 + _globals['_SKIPMFASETUPREQUEST']._serialized_end=1959 + _globals['_LOCKMFAREQUEST']._serialized_start=1961 + _globals['_LOCKMFAREQUEST']._serialized_end=2053 + _globals['_LOCKMFARESPONSE']._serialized_start=2055 + _globals['_LOCKMFARESPONSE']._serialized_end=2098 + _globals['_EMAILOTPMFASETUPREQUEST']._serialized_start=2100 + _globals['_EMAILOTPMFASETUPREQUEST']._serialized_end=2201 + _globals['_EMAILOTPMFASETUPRESPONSE']._serialized_start=2203 + _globals['_EMAILOTPMFASETUPRESPONSE']._serialized_end=2255 + _globals['_SMSOTPMFASETUPREQUEST']._serialized_start=2257 + _globals['_SMSOTPMFASETUPREQUEST']._serialized_end=2356 + _globals['_SMSOTPMFASETUPRESPONSE']._serialized_start=2358 + _globals['_SMSOTPMFASETUPRESPONSE']._serialized_end=2408 + _globals['_FORGOTPASSWORDREQUEST']._serialized_start=2411 + _globals['_FORGOTPASSWORDREQUEST']._serialized_end=2567 + _globals['_FORGOTPASSWORDRESPONSE']._serialized_start=2569 + _globals['_FORGOTPASSWORDRESPONSE']._serialized_end=2685 + _globals['_RESETPASSWORDREQUEST']._serialized_start=2688 + _globals['_RESETPASSWORDREQUEST']._serialized_end=2889 + _globals['_RESETPASSWORDRESPONSE']._serialized_start=2891 + _globals['_RESETPASSWORDRESPONSE']._serialized_end=2940 + _globals['_PROFILEREQUEST']._serialized_start=2942 + _globals['_PROFILEREQUEST']._serialized_end=2958 + _globals['_UPDATEPROFILEREQUEST']._serialized_start=2961 + _globals['_UPDATEPROFILEREQUEST']._serialized_end=3557 + _globals['_UPDATEPROFILERESPONSE']._serialized_start=3559 + _globals['_UPDATEPROFILERESPONSE']._serialized_end=3608 + _globals['_DEACTIVATEACCOUNTREQUEST']._serialized_start=3610 + _globals['_DEACTIVATEACCOUNTREQUEST']._serialized_end=3636 + _globals['_DEACTIVATEACCOUNTRESPONSE']._serialized_start=3638 + _globals['_DEACTIVATEACCOUNTRESPONSE']._serialized_end=3691 + _globals['_REVOKEREQUEST']._serialized_start=3693 + _globals['_REVOKEREQUEST']._serialized_end=3754 + _globals['_REVOKERESPONSE']._serialized_start=3756 + _globals['_REVOKERESPONSE']._serialized_end=3798 + _globals['_SESSIONREQUEST']._serialized_start=3801 + _globals['_SESSIONREQUEST']._serialized_end=3963 + _globals['_VALIDATEJWTTOKENREQUEST']._serialized_start=3966 + _globals['_VALIDATEJWTTOKENREQUEST']._serialized_end=4164 + _globals['_VALIDATEJWTTOKENRESPONSE']._serialized_start=4166 + _globals['_VALIDATEJWTTOKENRESPONSE']._serialized_end=4267 + _globals['_VALIDATESESSIONREQUEST']._serialized_start=4270 + _globals['_VALIDATESESSIONREQUEST']._serialized_end=4429 + _globals['_VALIDATESESSIONRESPONSE']._serialized_start=4431 + _globals['_VALIDATESESSIONRESPONSE']._serialized_end=4524 + _globals['_METAREQUEST']._serialized_start=4526 + _globals['_METAREQUEST']._serialized_end=4539 + _globals['_CHECKPERMISSIONSREQUEST']._serialized_start=4541 + _globals['_CHECKPERMISSIONSREQUEST']._serialized_end=4659 + _globals['_CHECKPERMISSIONSRESPONSE']._serialized_start=4661 + _globals['_CHECKPERMISSIONSRESPONSE']._serialized_end=4751 + _globals['_LISTPERMISSIONSREQUEST']._serialized_start=4753 + _globals['_LISTPERMISSIONSREQUEST']._serialized_end=4858 + _globals['_LISTPERMISSIONSRESPONSE']._serialized_start=4861 + _globals['_LISTPERMISSIONSRESPONSE']._serialized_end=5003 + _globals['_AUTHORIZERSERVICE']._serialized_start=5006 + _globals['_AUTHORIZERSERVICE']._serialized_end=7925 # @@protoc_insertion_point(module_scope) diff --git a/src/authorizer/_grpc/authorizer/v1/authorizer_pb2_grpc.py b/src/authorizer/_grpc/authorizer/v1/authorizer_pb2_grpc.py index be97a54..443d6f9 100644 --- a/src/authorizer/_grpc/authorizer/v1/authorizer_pb2_grpc.py +++ b/src/authorizer/_grpc/authorizer/v1/authorizer_pb2_grpc.py @@ -56,6 +56,26 @@ def __init__(self, channel): request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpRequest.SerializeToString, response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpResponse.FromString, _registered_method=True) + self.SkipMfaSetup = channel.unary_unary( + '/authorizer.v1.AuthorizerService/SkipMfaSetup', + request_serializer=authorizer_dot_v1_dot_authorizer__pb2.SkipMfaSetupRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, + _registered_method=True) + self.LockMfa = channel.unary_unary( + '/authorizer.v1.AuthorizerService/LockMfa', + request_serializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaResponse.FromString, + _registered_method=True) + self.EmailOtpMfaSetup = channel.unary_unary( + '/authorizer.v1.AuthorizerService/EmailOtpMfaSetup', + request_serializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupResponse.FromString, + _registered_method=True) + self.SmsOtpMfaSetup = channel.unary_unary( + '/authorizer.v1.AuthorizerService/SmsOtpMfaSetup', + request_serializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupRequest.SerializeToString, + response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupResponse.FromString, + _registered_method=True) self.ForgotPassword = channel.unary_unary( '/authorizer.v1.AuthorizerService/ForgotPassword', request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordRequest.SerializeToString, @@ -180,6 +200,53 @@ def ResendOtp(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def SkipMfaSetup(self, request, context): + """SkipMfaSetup completes an in-progress, token-withheld MFA offer by + recording that the caller explicitly declined it, then issues the + access token that was withheld. Identified by the MFA session cookie + (set when the offer screen was returned) plus email/phone_number to + resolve the pending user — same identification pattern as VerifyOtp. + Fails with FAILED_PRECONDITION if MFA is organization-enforced + (enforce-mfa) — enforcement is never skippable. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def LockMfa(self, request, context): + """LockMfa records that the caller lost access to their only MFA + factor(s). Only allowed when the caller has NO verified Email/SMS OTP + fallback enrolled — if one exists, use it instead of locking. Does not + issue a token; the account requires admin recovery afterward. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EmailOtpMfaSetup(self, request, context): + """EmailOtpMfaSetup sends a one-time code to the caller's own email and + creates an unverified email-OTP MFA enrollment. Dual-mode permissions: + (a) an authenticated caller (bearer token) — the settings-screen action + for an ALREADY-logged-in user adding a second factor; the request body is + unused in this mode. (b) a caller in the withheld first-time-offer + state, with no bearer token yet — identified by the MFA session cookie + plus email/phone_number, same pattern as SkipMfaSetup. Either mode + reuses the same underlying Authenticator row once VerifyOtp marks it + verified. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SmsOtpMfaSetup(self, request, context): + """SmsOtpMfaSetup sends a one-time code to the caller's own phone number + and creates an unverified SMS-OTP MFA enrollment. Same dual-mode + permissions and relationship to VerifyOtp as EmailOtpMfaSetup. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def ForgotPassword(self, request, context): """=== Password lifecycle === @@ -324,6 +391,26 @@ def add_AuthorizerServiceServicer_to_server(servicer, server): request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpRequest.FromString, response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpResponse.SerializeToString, ), + 'SkipMfaSetup': grpc.unary_unary_rpc_method_handler( + servicer.SkipMfaSetup, + request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SkipMfaSetupRequest.FromString, + response_serializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.SerializeToString, + ), + 'LockMfa': grpc.unary_unary_rpc_method_handler( + servicer.LockMfa, + request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaRequest.FromString, + response_serializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaResponse.SerializeToString, + ), + 'EmailOtpMfaSetup': grpc.unary_unary_rpc_method_handler( + servicer.EmailOtpMfaSetup, + request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupRequest.FromString, + response_serializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupResponse.SerializeToString, + ), + 'SmsOtpMfaSetup': grpc.unary_unary_rpc_method_handler( + servicer.SmsOtpMfaSetup, + request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupRequest.FromString, + response_serializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupResponse.SerializeToString, + ), 'ForgotPassword': grpc.unary_unary_rpc_method_handler( servicer.ForgotPassword, request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordRequest.FromString, @@ -612,6 +699,114 @@ def ResendOtp(request, metadata, _registered_method=True) + @staticmethod + def SkipMfaSetup(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerService/SkipMfaSetup', + authorizer_dot_v1_dot_authorizer__pb2.SkipMfaSetupRequest.SerializeToString, + authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def LockMfa(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerService/LockMfa', + authorizer_dot_v1_dot_authorizer__pb2.LockMfaRequest.SerializeToString, + authorizer_dot_v1_dot_authorizer__pb2.LockMfaResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def EmailOtpMfaSetup(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerService/EmailOtpMfaSetup', + authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupRequest.SerializeToString, + authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SmsOtpMfaSetup(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/authorizer.v1.AuthorizerService/SmsOtpMfaSetup', + authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupRequest.SerializeToString, + authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + @staticmethod def ForgotPassword(request, target, diff --git a/src/authorizer/_grpc/authorizer/v1/common_pb2.py b/src/authorizer/_grpc/authorizer/v1/common_pb2.py index 26c2f81..fb2f90a 100644 --- a/src/authorizer/_grpc/authorizer/v1/common_pb2.py +++ b/src/authorizer/_grpc/authorizer/v1/common_pb2.py @@ -25,14 +25,14 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61uthorizer/v1/common.proto\x12\rauthorizer.v1\x1a\x1cgoogle/protobuf/struct.proto\"8\n\x07\x41ppData\x12-\n\x05value\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x05valueB\xc7\x01\n\x11\x63om.authorizer.v1B\x0b\x43ommonProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61uthorizer/v1/common.proto\x12\rauthorizer.v1\x1a\x1cgoogle/protobuf/struct.proto\"8\n\x07\x41ppData\x12-\n\x05value\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x05valueBu\n\x11\x63om.authorizer.v1B\x0b\x43ommonProtoP\x01\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.common_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\013CommonProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\013CommonProtoP\001\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' _globals['_APPDATA']._serialized_start=75 _globals['_APPDATA']._serialized_end=131 # @@protoc_insertion_point(module_scope) diff --git a/src/authorizer/_grpc/authorizer/v1/errors_pb2.py b/src/authorizer/_grpc/authorizer/v1/errors_pb2.py index b8f198b..5e9656f 100644 --- a/src/authorizer/_grpc/authorizer/v1/errors_pb2.py +++ b/src/authorizer/_grpc/authorizer/v1/errors_pb2.py @@ -24,14 +24,14 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61uthorizer/v1/errors.proto\x12\rauthorizer.v1*\x86\x03\n\x0b\x45rrorReason\x12\x1c\n\x18\x45RROR_REASON_UNSPECIFIED\x10\x00\x12$\n ERROR_REASON_INVALID_CREDENTIALS\x10\x01\x12\"\n\x1e\x45RROR_REASON_PERMISSION_DENIED\x10\x02\x12\x1a\n\x16\x45RROR_REASON_NOT_FOUND\x10\x03\x12\x1f\n\x1b\x45RROR_REASON_ALREADY_EXISTS\x10\x04\x12 \n\x1c\x45RROR_REASON_INVALID_REQUEST\x10\x05\x12&\n\"ERROR_REASON_VERIFICATION_REQUIRED\x10\x06\x12#\n\x1f\x45RROR_REASON_OPERATION_DISABLED\x10\x07\x12\x1d\n\x19\x45RROR_REASON_RATE_LIMITED\x10\x08\x12\x1e\n\x1a\x45RROR_REASON_TOKEN_EXPIRED\x10\t\x12$\n ERROR_REASON_ACCOUNT_DEACTIVATED\x10\nB\xc7\x01\n\x11\x63om.authorizer.v1B\x0b\x45rrorsProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61uthorizer/v1/errors.proto\x12\rauthorizer.v1*\x86\x03\n\x0b\x45rrorReason\x12\x1c\n\x18\x45RROR_REASON_UNSPECIFIED\x10\x00\x12$\n ERROR_REASON_INVALID_CREDENTIALS\x10\x01\x12\"\n\x1e\x45RROR_REASON_PERMISSION_DENIED\x10\x02\x12\x1a\n\x16\x45RROR_REASON_NOT_FOUND\x10\x03\x12\x1f\n\x1b\x45RROR_REASON_ALREADY_EXISTS\x10\x04\x12 \n\x1c\x45RROR_REASON_INVALID_REQUEST\x10\x05\x12&\n\"ERROR_REASON_VERIFICATION_REQUIRED\x10\x06\x12#\n\x1f\x45RROR_REASON_OPERATION_DISABLED\x10\x07\x12\x1d\n\x19\x45RROR_REASON_RATE_LIMITED\x10\x08\x12\x1e\n\x1a\x45RROR_REASON_TOKEN_EXPIRED\x10\t\x12$\n ERROR_REASON_ACCOUNT_DEACTIVATED\x10\nBu\n\x11\x63om.authorizer.v1B\x0b\x45rrorsProtoP\x01\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.errors_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\013ErrorsProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\013ErrorsProtoP\001\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' _globals['_ERRORREASON']._serialized_start=46 _globals['_ERRORREASON']._serialized_end=436 # @@protoc_insertion_point(module_scope) diff --git a/src/authorizer/_grpc/authorizer/v1/pagination_pb2.py b/src/authorizer/_grpc/authorizer/v1/pagination_pb2.py index 024adb5..a75bb76 100644 --- a/src/authorizer/_grpc/authorizer/v1/pagination_pb2.py +++ b/src/authorizer/_grpc/authorizer/v1/pagination_pb2.py @@ -25,14 +25,14 @@ from authorizer._grpc.buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x61uthorizer/v1/pagination.proto\x12\rauthorizer.v1\x1a\x1b\x62uf/validate/validate.proto\"q\n\x11PaginationRequest\x12\x1b\n\x04page\x18\x01 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x00R\x04page\x12 \n\x05limit\x18\x02 \x01(\x03\x42\n\xbaH\x07\"\x05\x18\xe8\x07(\x00R\x05limit\x12\x1d\n\npage_token\x18\x03 \x01(\tR\tpageToken\"\x8c\x01\n\nPagination\x12\x14\n\x05limit\x18\x01 \x01(\x03R\x05limit\x12\x12\n\x04page\x18\x02 \x01(\x03R\x04page\x12\x16\n\x06offset\x18\x03 \x01(\x03R\x06offset\x12\x14\n\x05total\x18\x04 \x01(\x03R\x05total\x12&\n\x0fnext_page_token\x18\x05 \x01(\tR\rnextPageTokenB\xcb\x01\n\x11\x63om.authorizer.v1B\x0fPaginationProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x61uthorizer/v1/pagination.proto\x12\rauthorizer.v1\x1a\x1b\x62uf/validate/validate.proto\"q\n\x11PaginationRequest\x12\x1b\n\x04page\x18\x01 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x00R\x04page\x12 \n\x05limit\x18\x02 \x01(\x03\x42\n\xbaH\x07\"\x05\x18\xe8\x07(\x00R\x05limit\x12\x1d\n\npage_token\x18\x03 \x01(\tR\tpageToken\"\x8c\x01\n\nPagination\x12\x14\n\x05limit\x18\x01 \x01(\x03R\x05limit\x12\x12\n\x04page\x18\x02 \x01(\x03R\x04page\x12\x16\n\x06offset\x18\x03 \x01(\x03R\x06offset\x12\x14\n\x05total\x18\x04 \x01(\x03R\x05total\x12&\n\x0fnext_page_token\x18\x05 \x01(\tR\rnextPageTokenBy\n\x11\x63om.authorizer.v1B\x0fPaginationProtoP\x01\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.pagination_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\017PaginationProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\017PaginationProtoP\001\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' _globals['_PAGINATIONREQUEST'].fields_by_name['page']._loaded_options = None _globals['_PAGINATIONREQUEST'].fields_by_name['page']._serialized_options = b'\272H\004\"\002(\000' _globals['_PAGINATIONREQUEST'].fields_by_name['limit']._loaded_options = None diff --git a/src/authorizer/_grpc/authorizer/v1/types_pb2.py b/src/authorizer/_grpc/authorizer/v1/types_pb2.py index b57c8eb..f599ea5 100644 --- a/src/authorizer/_grpc/authorizer/v1/types_pb2.py +++ b/src/authorizer/_grpc/authorizer/v1/types_pb2.py @@ -25,28 +25,28 @@ from authorizer._grpc.authorizer.v1 import common_pb2 as authorizer_dot_v1_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x61uthorizer/v1/types.proto\x12\rauthorizer.v1\x1a\x1a\x61uthorizer/v1/common.proto\"\xc1\x05\n\x04User\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12%\n\x0e\x65mail_verified\x18\x03 \x01(\x08R\remailVerified\x12%\n\x0esignup_methods\x18\x04 \x01(\tR\rsignupMethods\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12-\n\x12preferred_username\x18\t \x01(\tR\x11preferredUsername\x12\x16\n\x06gender\x18\n \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\x0b \x01(\tR\tbirthdate\x12!\n\x0cphone_number\x18\x0c \x01(\tR\x0bphoneNumber\x12\x32\n\x15phone_number_verified\x18\r \x01(\x08R\x13phoneNumberVerified\x12\x18\n\x07picture\x18\x0e \x01(\tR\x07picture\x12\x14\n\x05roles\x18\x0f \x03(\tR\x05roles\x12\x1d\n\ncreated_at\x18\x10 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x11 \x01(\x03R\tupdatedAt\x12+\n\x11revoked_timestamp\x18\x12 \x01(\x03R\x10revokedTimestamp\x12>\n\x1cis_multi_factor_auth_enabled\x18\x13 \x01(\x08R\x18isMultiFactorAuthEnabled\x12\x31\n\x08\x61pp_data\x18\x14 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppData\"\xc1\x04\n\x0c\x41uthResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12>\n\x1cshould_show_email_otp_screen\x18\x02 \x01(\x08R\x18shouldShowEmailOtpScreen\x12@\n\x1dshould_show_mobile_otp_screen\x18\x03 \x01(\x08R\x19shouldShowMobileOtpScreen\x12\x35\n\x17should_show_totp_screen\x18\x04 \x01(\x08R\x14shouldShowTotpScreen\x12!\n\x0c\x61\x63\x63\x65ss_token\x18\x05 \x01(\tR\x0b\x61\x63\x63\x65ssToken\x12\x19\n\x08id_token\x18\x06 \x01(\tR\x07idToken\x12#\n\rrefresh_token\x18\x07 \x01(\tR\x0crefreshToken\x12\x1d\n\nexpires_in\x18\x08 \x01(\x03R\texpiresIn\x12\'\n\x04user\x18\t \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\x12>\n\x1b\x61uthenticator_scanner_image\x18\n \x01(\tR\x19\x61uthenticatorScannerImage\x12\x31\n\x14\x61uthenticator_secret\x18\x0b \x01(\tR\x13\x61uthenticatorSecret\x12@\n\x1c\x61uthenticator_recovery_codes\x18\x0c \x03(\tR\x1a\x61uthenticatorRecoveryCodes\"@\n\nPermission\x12\x16\n\x06object\x18\x01 \x01(\tR\x06object\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\"F\n\x10\x46gaRelationInput\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\"W\n\rFgaTupleInput\x12\x12\n\x04user\x18\x01 \x01(\tR\x04user\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x03 \x01(\tR\x06object\"\x95\x01\n\x14PermissionCheckInput\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\x12I\n\x11\x63ontextual_tuples\x18\x03 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x10\x63ontextualTuples\"e\n\x15PermissionCheckResult\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\x12\x18\n\x07\x61llowed\x18\x03 \x01(\x08R\x07\x61llowed\"\xfc\x08\n\x04Meta\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08\x63lientId\x12\x35\n\x17is_google_login_enabled\x18\x03 \x01(\x08R\x14isGoogleLoginEnabled\x12\x39\n\x19is_facebook_login_enabled\x18\x04 \x01(\x08R\x16isFacebookLoginEnabled\x12\x35\n\x17is_github_login_enabled\x18\x05 \x01(\x08R\x14isGithubLoginEnabled\x12\x39\n\x19is_linkedin_login_enabled\x18\x06 \x01(\x08R\x16isLinkedinLoginEnabled\x12\x33\n\x16is_apple_login_enabled\x18\x07 \x01(\x08R\x13isAppleLoginEnabled\x12\x37\n\x18is_discord_login_enabled\x18\x08 \x01(\x08R\x15isDiscordLoginEnabled\x12\x37\n\x18is_twitter_login_enabled\x18\t \x01(\x08R\x15isTwitterLoginEnabled\x12;\n\x1ais_microsoft_login_enabled\x18\n \x01(\x08R\x17isMicrosoftLoginEnabled\x12\x35\n\x17is_twitch_login_enabled\x18\x0b \x01(\x08R\x14isTwitchLoginEnabled\x12\x35\n\x17is_roblox_login_enabled\x18\x0c \x01(\x08R\x14isRobloxLoginEnabled\x12\x41\n\x1dis_email_verification_enabled\x18\r \x01(\x08R\x1aisEmailVerificationEnabled\x12\x45\n\x1fis_basic_authentication_enabled\x18\x0e \x01(\x08R\x1cisBasicAuthenticationEnabled\x12<\n\x1bis_magic_link_login_enabled\x18\x0f \x01(\x08R\x17isMagicLinkLoginEnabled\x12+\n\x12is_sign_up_enabled\x18\x10 \x01(\x08R\x0fisSignUpEnabled\x12;\n\x1ais_strong_password_enabled\x18\x11 \x01(\x08R\x17isStrongPasswordEnabled\x12>\n\x1cis_multi_factor_auth_enabled\x18\x12 \x01(\x08R\x18isMultiFactorAuthEnabled\x12R\n&is_mobile_basic_authentication_enabled\x18\x13 \x01(\x08R\"isMobileBasicAuthenticationEnabled\x12\x41\n\x1dis_phone_verification_enabled\x18\x14 \x01(\x08R\x1aisPhoneVerificationEnabledB\xc6\x01\n\x11\x63om.authorizer.v1B\nTypesProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x61uthorizer/v1/types.proto\x12\rauthorizer.v1\x1a\x1a\x61uthorizer/v1/common.proto\"\x9d\x06\n\x04User\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12%\n\x0e\x65mail_verified\x18\x03 \x01(\x08R\remailVerified\x12%\n\x0esignup_methods\x18\x04 \x01(\tR\rsignupMethods\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12-\n\x12preferred_username\x18\t \x01(\tR\x11preferredUsername\x12\x16\n\x06gender\x18\n \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\x0b \x01(\tR\tbirthdate\x12!\n\x0cphone_number\x18\x0c \x01(\tR\x0bphoneNumber\x12\x32\n\x15phone_number_verified\x18\r \x01(\x08R\x13phoneNumberVerified\x12\x18\n\x07picture\x18\x0e \x01(\tR\x07picture\x12\x14\n\x05roles\x18\x0f \x03(\tR\x05roles\x12\x1d\n\ncreated_at\x18\x10 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x11 \x01(\x03R\tupdatedAt\x12+\n\x11revoked_timestamp\x18\x12 \x01(\x03R\x10revokedTimestamp\x12>\n\x1cis_multi_factor_auth_enabled\x18\x13 \x01(\x08R\x18isMultiFactorAuthEnabled\x12\x31\n\x08\x61pp_data\x18\x14 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppData\x12\x36\n\x18has_skipped_mfa_setup_at\x18\x15 \x01(\x03R\x14hasSkippedMfaSetupAt\x12\"\n\rmfa_locked_at\x18\x16 \x01(\x03R\x0bmfaLockedAt\"\xd9\x06\n\x0c\x41uthResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12>\n\x1cshould_show_email_otp_screen\x18\x02 \x01(\x08R\x18shouldShowEmailOtpScreen\x12@\n\x1dshould_show_mobile_otp_screen\x18\x03 \x01(\x08R\x19shouldShowMobileOtpScreen\x12\x35\n\x17should_show_totp_screen\x18\x04 \x01(\x08R\x14shouldShowTotpScreen\x12!\n\x0c\x61\x63\x63\x65ss_token\x18\x05 \x01(\tR\x0b\x61\x63\x63\x65ssToken\x12\x19\n\x08id_token\x18\x06 \x01(\tR\x07idToken\x12#\n\rrefresh_token\x18\x07 \x01(\tR\x0crefreshToken\x12\x1d\n\nexpires_in\x18\x08 \x01(\x03R\texpiresIn\x12\'\n\x04user\x18\t \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\x12>\n\x1b\x61uthenticator_scanner_image\x18\n \x01(\tR\x19\x61uthenticatorScannerImage\x12\x31\n\x14\x61uthenticator_secret\x18\x0b \x01(\tR\x13\x61uthenticatorSecret\x12@\n\x1c\x61uthenticator_recovery_codes\x18\x0c \x03(\tR\x1a\x61uthenticatorRecoveryCodes\x12\x46\n should_offer_webauthn_mfa_verify\x18\r \x01(\x08R\x1cshouldOfferWebauthnMfaVerify\x12\x44\n\x1fshould_offer_webauthn_mfa_setup\x18\x0e \x01(\x08R\x1bshouldOfferWebauthnMfaSetup\x12\x45\n should_offer_email_otp_mfa_setup\x18\x0f \x01(\x08R\x1bshouldOfferEmailOtpMfaSetup\x12\x41\n\x1eshould_offer_sms_otp_mfa_setup\x18\x10 \x01(\x08R\x19shouldOfferSmsOtpMfaSetup\"@\n\nPermission\x12\x16\n\x06object\x18\x01 \x01(\tR\x06object\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\"F\n\x10\x46gaRelationInput\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\"W\n\rFgaTupleInput\x12\x12\n\x04user\x18\x01 \x01(\tR\x04user\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x03 \x01(\tR\x06object\"\x95\x01\n\x14PermissionCheckInput\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\x12I\n\x11\x63ontextual_tuples\x18\x03 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x10\x63ontextualTuples\"e\n\x15PermissionCheckResult\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\x12\x18\n\x07\x61llowed\x18\x03 \x01(\x08R\x07\x61llowed\"\xa8\x0b\n\x04Meta\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08\x63lientId\x12\x35\n\x17is_google_login_enabled\x18\x03 \x01(\x08R\x14isGoogleLoginEnabled\x12\x39\n\x19is_facebook_login_enabled\x18\x04 \x01(\x08R\x16isFacebookLoginEnabled\x12\x35\n\x17is_github_login_enabled\x18\x05 \x01(\x08R\x14isGithubLoginEnabled\x12\x39\n\x19is_linkedin_login_enabled\x18\x06 \x01(\x08R\x16isLinkedinLoginEnabled\x12\x33\n\x16is_apple_login_enabled\x18\x07 \x01(\x08R\x13isAppleLoginEnabled\x12\x37\n\x18is_discord_login_enabled\x18\x08 \x01(\x08R\x15isDiscordLoginEnabled\x12\x37\n\x18is_twitter_login_enabled\x18\t \x01(\x08R\x15isTwitterLoginEnabled\x12;\n\x1ais_microsoft_login_enabled\x18\n \x01(\x08R\x17isMicrosoftLoginEnabled\x12\x35\n\x17is_twitch_login_enabled\x18\x0b \x01(\x08R\x14isTwitchLoginEnabled\x12\x35\n\x17is_roblox_login_enabled\x18\x0c \x01(\x08R\x14isRobloxLoginEnabled\x12\x41\n\x1dis_email_verification_enabled\x18\r \x01(\x08R\x1aisEmailVerificationEnabled\x12\x45\n\x1fis_basic_authentication_enabled\x18\x0e \x01(\x08R\x1cisBasicAuthenticationEnabled\x12<\n\x1bis_magic_link_login_enabled\x18\x0f \x01(\x08R\x17isMagicLinkLoginEnabled\x12+\n\x12is_sign_up_enabled\x18\x10 \x01(\x08R\x0fisSignUpEnabled\x12;\n\x1ais_strong_password_enabled\x18\x11 \x01(\x08R\x17isStrongPasswordEnabled\x12>\n\x1cis_multi_factor_auth_enabled\x18\x12 \x01(\x08R\x18isMultiFactorAuthEnabled\x12R\n&is_mobile_basic_authentication_enabled\x18\x13 \x01(\x08R\"isMobileBasicAuthenticationEnabled\x12\x41\n\x1dis_phone_verification_enabled\x18\x14 \x01(\x08R\x1aisPhoneVerificationEnabled\x12\x37\n\x18is_org_discovery_enabled\x18\x15 \x01(\x08R\x15isOrgDiscoveryEnabled\x12-\n\x13is_totp_mfa_enabled\x18\x16 \x01(\x08R\x10isTotpMfaEnabled\x12\x36\n\x18is_email_otp_mfa_enabled\x18\x17 \x01(\x08R\x14isEmailOtpMfaEnabled\x12\x32\n\x16is_sms_otp_mfa_enabled\x18\x18 \x01(\x08R\x12isSmsOtpMfaEnabled\x12.\n\x13is_webauthn_enabled\x18\x19 \x01(\x08R\x11isWebauthnEnabled\x12&\n\x0fis_mfa_enforced\x18\x1a \x01(\x08R\risMfaEnforcedBt\n\x11\x63om.authorizer.v1B\nTypesProtoP\x01\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.types_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\nTypesProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\nTypesProtoP\001\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' _globals['_USER']._serialized_start=73 - _globals['_USER']._serialized_end=778 - _globals['_AUTHRESPONSE']._serialized_start=781 - _globals['_AUTHRESPONSE']._serialized_end=1358 - _globals['_PERMISSION']._serialized_start=1360 - _globals['_PERMISSION']._serialized_end=1424 - _globals['_FGARELATIONINPUT']._serialized_start=1426 - _globals['_FGARELATIONINPUT']._serialized_end=1496 - _globals['_FGATUPLEINPUT']._serialized_start=1498 - _globals['_FGATUPLEINPUT']._serialized_end=1585 - _globals['_PERMISSIONCHECKINPUT']._serialized_start=1588 - _globals['_PERMISSIONCHECKINPUT']._serialized_end=1737 - _globals['_PERMISSIONCHECKRESULT']._serialized_start=1739 - _globals['_PERMISSIONCHECKRESULT']._serialized_end=1840 - _globals['_META']._serialized_start=1843 - _globals['_META']._serialized_end=2991 + _globals['_USER']._serialized_end=870 + _globals['_AUTHRESPONSE']._serialized_start=873 + _globals['_AUTHRESPONSE']._serialized_end=1730 + _globals['_PERMISSION']._serialized_start=1732 + _globals['_PERMISSION']._serialized_end=1796 + _globals['_FGARELATIONINPUT']._serialized_start=1798 + _globals['_FGARELATIONINPUT']._serialized_end=1868 + _globals['_FGATUPLEINPUT']._serialized_start=1870 + _globals['_FGATUPLEINPUT']._serialized_end=1957 + _globals['_PERMISSIONCHECKINPUT']._serialized_start=1960 + _globals['_PERMISSIONCHECKINPUT']._serialized_end=2109 + _globals['_PERMISSIONCHECKRESULT']._serialized_start=2111 + _globals['_PERMISSIONCHECKRESULT']._serialized_end=2212 + _globals['_META']._serialized_start=2215 + _globals['_META']._serialized_end=3663 # @@protoc_insertion_point(module_scope) diff --git a/src/authorizer/_proto.py b/src/authorizer/_proto.py index 08dbc49..28d9537 100644 --- a/src/authorizer/_proto.py +++ b/src/authorizer/_proto.py @@ -70,6 +70,18 @@ def _wrap(value: Any, descriptor: Any) -> Any: if field.message_type.full_name == "authorizer.v1.AppData": # SDK contract: free-form maps are flat; wrap into the proto AppData. out[key] = {"value": val} if isinstance(val, dict) else val + elif ( + field.message_type.full_name == "authorizer.v1.PaginationRequest" + and isinstance(val, dict) + and set(val) == {"pagination"} + and isinstance(val["pagination"], dict) + ): + # Several GraphQL ListXRequest inputs type `pagination` as + # PaginatedRequest (itself wrapping PaginationRequest) rather than + # PaginationRequest directly — a pre-existing schema quirk. Proto + # flattens straight to PaginationRequest; collapse the redundant + # wrapper so REST/gRPC callers get the same page/limit as GraphQL. + out[key] = _wrap(val["pagination"], field.message_type) elif isinstance(val, list): out[key] = [_wrap(v, field.message_type) for v in val] else: diff --git a/src/authorizer/_queries.py b/src/authorizer/_queries.py index 1c68a95..97d0878 100644 --- a/src/authorizer/_queries.py +++ b/src/authorizer/_queries.py @@ -9,12 +9,14 @@ "id email email_verified given_name family_name middle_name nickname " "preferred_username picture signup_methods gender birthdate phone_number " "phone_number_verified roles created_at updated_at is_multi_factor_auth_enabled " - "app_data revoked_timestamp" + "app_data revoked_timestamp has_skipped_mfa_setup_at mfa_locked_at enrolled_mfa_methods" ) AUTH_TOKEN_FRAGMENT = ( "message access_token expires_in refresh_token id_token " "should_show_email_otp_screen should_show_mobile_otp_screen should_show_totp_screen " + "should_offer_webauthn_mfa_verify should_offer_webauthn_mfa_setup " + "should_offer_email_otp_mfa_setup should_offer_sms_otp_mfa_setup " "authenticator_scanner_image authenticator_secret authenticator_recovery_codes " f"user {{ {USER_FRAGMENT} }}" ) @@ -109,6 +111,51 @@ "{ list_permissions(params: $data) { objects permissions { object relation } truncated } }" ) +# -- MFA setup / recovery ----------------------------------------------------- # +SKIP_MFA_SETUP = ( + "mutation skipMfaSetup($data: SkipMfaSetupRequest!) " + f"{{ skip_mfa_setup(params: $data) {{ {AUTH_TOKEN_FRAGMENT} }} }}" +) +LOCK_MFA = "mutation lockMfa($data: LockMfaRequest!) { lock_mfa(params: $data) { message } }" +EMAIL_OTP_MFA_SETUP = ( + "mutation emailOtpMfaSetup($data: OtpMfaSetupRequest) " + "{ email_otp_mfa_setup(params: $data) { message } }" +) +SMS_OTP_MFA_SETUP = ( + "mutation smsOtpMfaSetup($data: OtpMfaSetupRequest) " + "{ sms_otp_mfa_setup(params: $data) { message } }" +) +TOTP_MFA_SETUP = ( + "mutation totpMfaSetup($data: OtpMfaSetupRequest) " + f"{{ totp_mfa_setup(params: $data) {{ {AUTH_TOKEN_FRAGMENT} }} }}" +) + +# -- WebAuthn / passkeys ------------------------------------------------------- # +WEBAUTHN_CREDENTIAL_FRAGMENT = "id name transports created_at updated_at last_used_at" + +WEBAUTHN_REGISTRATION_OPTIONS = ( + "mutation webauthnRegistrationOptions($email: String, $phone_number: String) " + "{ webauthn_registration_options(email: $email, phone_number: $phone_number) " + "{ options } }" +) +WEBAUTHN_REGISTRATION_VERIFY = ( + "mutation webauthnRegistrationVerify($data: WebauthnRegistrationVerifyRequest!) " + f"{{ webauthn_registration_verify(params: $data) {{ {AUTH_TOKEN_FRAGMENT} }} }}" +) +WEBAUTHN_LOGIN_OPTIONS = ( + "mutation webauthnLoginOptions($email: String) " + "{ webauthn_login_options(email: $email) { options } }" +) +WEBAUTHN_LOGIN_VERIFY = ( + "mutation webauthnLoginVerify($data: WebauthnLoginVerifyRequest!) " + f"{{ webauthn_login_verify(params: $data) {{ {AUTH_TOKEN_FRAGMENT} }} }}" +) +WEBAUTHN_DELETE_CREDENTIAL = ( + "mutation webauthnDeleteCredential($id: ID!) " + "{ webauthn_delete_credential(id: $id) { message } }" +) +WEBAUTHN_CREDENTIALS = f"query {{ webauthn_credentials {{ {WEBAUTHN_CREDENTIAL_FRAGMENT} }} }}" + # --------------------------------------------------------------------------- # # Admin (`_`-prefixed) operations. GraphQL fragments mirror the admin schema. # --------------------------------------------------------------------------- # @@ -136,7 +183,7 @@ "{ _admin_signup(params: $data) { message } }" ) ADMIN_USERS = ( - "query adminUsers($data: PaginatedRequest) " + "query adminUsers($data: ListUsersRequest) " f"{{ _users(params: $data) {{ {PAGINATION_FRAGMENT} users {{ {USER_FRAGMENT} }} }} }}" ) ADMIN_USER = ( @@ -257,7 +304,7 @@ # Machine-agent-identity admin ops: clients (service accounts), trusted # issuers, organizations, org SSO connections, SCIM endpoints. # --------------------------------------------------------------------------- # -CLIENT_FRAGMENT = "id name description allowed_scopes is_active created_at updated_at" +CLIENT_FRAGMENT = "id client_id name description allowed_scopes is_active created_at updated_at" TRUSTED_ISSUER_FRAGMENT = ( "id service_account_id name issuer_url key_source_type jwks_url expected_aud " "subject_claim allowed_subjects issuer_type is_active spiffe_refresh_hint_seconds " @@ -405,3 +452,82 @@ "query adminScimEndpoint($data: ScimEndpointRequest!) " f"{{ _scim_endpoint(params: $data) {{ {SCIM_ENDPOINT_FRAGMENT} }} }}" ) + +# --------------------------------------------------------------------------- # +# SAML IdP (Authorizer as Identity Provider for downstream SPs), user +# organizations, and org domains (home-realm discovery). +# --------------------------------------------------------------------------- # +SAML_SERVICE_PROVIDER_FRAGMENT = ( + "id org_id name entity_id acs_url sp_cert_pem name_id_format mapped_attributes " + "allow_idp_initiated is_active created_at updated_at" +) +SAML_IDP_KEY_FRAGMENT = "id org_id cert_pem algorithm status created_at updated_at" +USER_ORGANIZATION_FRAGMENT = f"organization {{ {ORGANIZATION_FRAGMENT} }} roles" +ORG_DOMAIN_FRAGMENT = "domain org_id verified_at created_at updated_at" +ORG_DOMAIN_CHALLENGE_FRAGMENT = "domain record_type record_name record_value" + +ADMIN_CREATE_SAML_SERVICE_PROVIDER = ( + "mutation adminCreateSamlServiceProvider($data: CreateSAMLServiceProviderRequest!) " + f"{{ _create_saml_service_provider(params: $data) {{ {SAML_SERVICE_PROVIDER_FRAGMENT} }} }}" +) +ADMIN_UPDATE_SAML_SERVICE_PROVIDER = ( + "mutation adminUpdateSamlServiceProvider($data: UpdateSAMLServiceProviderRequest!) " + f"{{ _update_saml_service_provider(params: $data) {{ {SAML_SERVICE_PROVIDER_FRAGMENT} }} }}" +) +ADMIN_DELETE_SAML_SERVICE_PROVIDER = ( + "mutation adminDeleteSamlServiceProvider($data: SAMLServiceProviderRequest!) " + "{ _delete_saml_service_provider(params: $data) { message } }" +) +ADMIN_GET_SAML_SERVICE_PROVIDER = ( + "query adminSamlServiceProvider($data: SAMLServiceProviderRequest!) " + f"{{ _saml_service_provider(params: $data) {{ {SAML_SERVICE_PROVIDER_FRAGMENT} }} }}" +) +ADMIN_LIST_SAML_SERVICE_PROVIDERS = ( + "query adminListSamlServiceProviders($data: ListSAMLServiceProvidersRequest!) " + f"{{ _list_saml_service_providers(params: $data) {{ {PAGINATION_FRAGMENT} " + f"saml_service_providers {{ {SAML_SERVICE_PROVIDER_FRAGMENT} }} }} }}" +) +ADMIN_ROTATE_SAML_IDP_CERT = ( + "mutation adminRotateSamlIdpCert($data: RotateSAMLIDPCertRequest!) " + f"{{ _rotate_saml_idp_cert(params: $data) {{ {SAML_IDP_KEY_FRAGMENT} }} }}" +) +ADMIN_RETIRE_SAML_IDP_KEY = ( + "mutation adminRetireSamlIdpKey($data: RetireSAMLIDPKeyRequest!) " + "{ _retire_saml_idp_key(params: $data) { message } }" +) +ADMIN_LIST_SAML_IDP_KEYS = ( + "query adminListSamlIdpKeys($data: ListSAMLIDPKeysRequest!) " + f"{{ _list_saml_idp_keys(params: $data) {{ {SAML_IDP_KEY_FRAGMENT} }} }}" +) +ADMIN_IMPORT_SAML_SP_METADATA = ( + "mutation adminImportSamlSpMetadata($data: ImportSAMLSPMetadataRequest!) " + "{ _import_saml_sp_metadata(params: $data) { entity_id acs_url certificate } }" +) + +ADMIN_USER_ORGANIZATIONS = ( + "query adminUserOrganizations($data: UserOrganizationsRequest!) " + f"{{ _user_organizations(params: $data) {{ {PAGINATION_FRAGMENT} " + f"user_organizations {{ {USER_ORGANIZATION_FRAGMENT} }} }} }}" +) + +ADMIN_REQUEST_ORG_DOMAIN = ( + "mutation adminRequestOrgDomain($data: RequestOrgDomainRequest!) " + f"{{ _request_org_domain(params: $data) {{ {ORG_DOMAIN_CHALLENGE_FRAGMENT} }} }}" +) +ADMIN_VERIFY_ORG_DOMAIN = ( + "mutation adminVerifyOrgDomain($data: VerifyOrgDomainRequest!) " + f"{{ _verify_org_domain(params: $data) {{ {ORG_DOMAIN_FRAGMENT} }} }}" +) +ADMIN_ADD_VERIFIED_ORG_DOMAIN = ( + "mutation adminAddVerifiedOrgDomain($data: AddVerifiedOrgDomainRequest!) " + f"{{ _add_verified_org_domain(params: $data) {{ {ORG_DOMAIN_FRAGMENT} }} }}" +) +ADMIN_DELETE_ORG_DOMAIN = ( + "mutation adminDeleteOrgDomain($data: DeleteOrgDomainRequest!) " + "{ _delete_org_domain(params: $data) { message } }" +) +ADMIN_ORG_DOMAINS = ( + "query adminOrgDomains($data: ListOrgDomainsRequest!) " + f"{{ _org_domains(params: $data) {{ {PAGINATION_FRAGMENT} " + f"org_domains {{ {ORG_DOMAIN_FRAGMENT} }} }} }}" +) diff --git a/src/authorizer/admin_client.py b/src/authorizer/admin_client.py index f36db82..acfb48c 100644 --- a/src/authorizer/admin_client.py +++ b/src/authorizer/admin_client.py @@ -138,7 +138,7 @@ def generate_jwt_keys(self, req: t.GenerateJWTKeysRequest) -> t.GenerateJWTKeysR return t.GenerateJWTKeysResponse.from_dict(res or {}) # -- users ------------------------------------------------------------ # - def users(self, req: t.PaginatedRequest | None = None) -> t.UsersResponse: + def users(self, req: t.ListUsersRequest | None = None) -> t.UsersResponse: res = self._invoke("users", d.ADMIN["users"], req.to_dict() if req else None) return t.UsersResponse.from_dict(res or {}) @@ -423,6 +423,115 @@ def get_org_saml_connection(self, req: t.OrgSAMLConnectionRequest) -> t.OrgSAMLC ) return t.OrgSAMLConnection.from_dict(res or {}) + # -- SAML IdP (Authorizer as Identity Provider for downstream SPs) ---- # + def create_saml_service_provider( + self, req: t.CreateSAMLServiceProviderRequest + ) -> t.SAMLServiceProvider: + res = self._invoke( + "create_saml_service_provider", + d.ADMIN["create_saml_service_provider"], + req.to_dict(), + ) + return t.SAMLServiceProvider.from_dict(res or {}) + + def update_saml_service_provider( + self, req: t.UpdateSAMLServiceProviderRequest + ) -> t.SAMLServiceProvider: + res = self._invoke( + "update_saml_service_provider", + d.ADMIN["update_saml_service_provider"], + req.to_dict(), + ) + return t.SAMLServiceProvider.from_dict(res or {}) + + def delete_saml_service_provider( + self, req: t.SAMLServiceProviderRequest + ) -> t.GenericResponse: + """Destructive: the downstream SP can no longer be issued assertions.""" + res = self._invoke( + "delete_saml_service_provider", + d.ADMIN["delete_saml_service_provider"], + req.to_dict(), + ) + return t.GenericResponse.from_dict(res or {}) + + def get_saml_service_provider( + self, req: t.SAMLServiceProviderRequest + ) -> t.SAMLServiceProvider: + res = self._invoke( + "get_saml_service_provider", d.ADMIN["get_saml_service_provider"], req.to_dict() + ) + return t.SAMLServiceProvider.from_dict(res or {}) + + def list_saml_service_providers( + self, req: t.ListSAMLServiceProvidersRequest + ) -> t.SAMLServiceProvidersResponse: + res = self._invoke( + "list_saml_service_providers", + d.ADMIN["list_saml_service_providers"], + req.to_dict(), + ) + return t.SAMLServiceProvidersResponse.from_dict(res or {}) + + def rotate_saml_idp_cert(self, req: t.RotateSAMLIDPCertRequest) -> t.SAMLIDPKey: + """Generates a new current signing keypair; the previous key stays "active".""" + res = self._invoke( + "rotate_saml_idp_cert", d.ADMIN["rotate_saml_idp_cert"], req.to_dict() + ) + return t.SAMLIDPKey.from_dict(res or {}) + + def retire_saml_idp_key(self, req: t.RetireSAMLIDPKeyRequest) -> t.GenericResponse: + """Destructive: the key stops appearing in IdP metadata. Cannot retire the current key.""" + res = self._invoke( + "retire_saml_idp_key", d.ADMIN["retire_saml_idp_key"], req.to_dict() + ) + return t.GenericResponse.from_dict(res or {}) + + def list_saml_idp_keys(self, req: t.ListSAMLIDPKeysRequest) -> list[t.SAMLIDPKey]: + res = self._invoke("list_saml_idp_keys", d.ADMIN["list_saml_idp_keys"], req.to_dict()) + # GraphQL returns a bare list; REST/gRPC wrap it as {"saml_idp_keys": [...]}. + items = res if isinstance(res, list) else (res or {}).get("saml_idp_keys", []) + return [t.SAMLIDPKey.from_dict(x) for x in items if isinstance(x, dict)] + + def import_saml_sp_metadata( + self, req: t.ImportSAMLSPMetadataRequest + ) -> t.SAMLSPMetadataParseResult: + """Parses pasted SP metadata XML; does NOT create a record or fetch a URL.""" + res = self._invoke( + "import_saml_sp_metadata", d.ADMIN["import_saml_sp_metadata"], req.to_dict() + ) + return t.SAMLSPMetadataParseResult.from_dict(res or {}) + + # -- user organizations ------------------------------------------------- # + def user_organizations(self, req: t.UserOrganizationsRequest) -> t.UserOrganizationsResponse: + res = self._invoke("user_organizations", d.ADMIN["user_organizations"], req.to_dict()) + return t.UserOrganizationsResponse.from_dict(res or {}) + + # -- org domains (home-realm discovery) ---------------------------------- # + def request_org_domain(self, req: t.RequestOrgDomainRequest) -> t.OrgDomainChallenge: + res = self._invoke("request_org_domain", d.ADMIN["request_org_domain"], req.to_dict()) + return t.OrgDomainChallenge.from_dict(res or {}) + + def verify_org_domain(self, req: t.VerifyOrgDomainRequest) -> t.OrgDomain: + res = self._invoke("verify_org_domain", d.ADMIN["verify_org_domain"], req.to_dict()) + return t.OrgDomain.from_dict(res or {}) + + def add_verified_org_domain(self, req: t.AddVerifiedOrgDomainRequest) -> t.OrgDomain: + """Super-admin only: trusted-asserts a domain as verified, skipping DNS challenge.""" + res = self._invoke( + "add_verified_org_domain", d.ADMIN["add_verified_org_domain"], req.to_dict() + ) + return t.OrgDomain.from_dict(res or {}) + + def delete_org_domain(self, req: t.DeleteOrgDomainRequest) -> t.GenericResponse: + """Destructive: the domain no longer routes logins to this organization.""" + res = self._invoke("delete_org_domain", d.ADMIN["delete_org_domain"], req.to_dict()) + return t.GenericResponse.from_dict(res or {}) + + def org_domains(self, req: t.ListOrgDomainsRequest) -> t.OrgDomainsResponse: + res = self._invoke("org_domains", d.ADMIN["org_domains"], req.to_dict()) + return t.OrgDomainsResponse.from_dict(res or {}) + # -- SCIM endpoints ------------------------------------------------------ # def create_scim_endpoint( self, req: t.CreateScimEndpointRequest diff --git a/src/authorizer/async_admin_client.py b/src/authorizer/async_admin_client.py index e0fb008..bcb5064 100644 --- a/src/authorizer/async_admin_client.py +++ b/src/authorizer/async_admin_client.py @@ -137,7 +137,7 @@ async def generate_jwt_keys( return t.GenerateJWTKeysResponse.from_dict(res or {}) # -- users ------------------------------------------------------------ # - async def users(self, req: t.PaginatedRequest | None = None) -> t.UsersResponse: + async def users(self, req: t.ListUsersRequest | None = None) -> t.UsersResponse: res = await self._invoke("users", d.ADMIN["users"], req.to_dict() if req else None) return t.UsersResponse.from_dict(res or {}) @@ -454,6 +454,125 @@ async def get_org_saml_connection( ) return t.OrgSAMLConnection.from_dict(res or {}) + # -- SAML IdP (Authorizer as Identity Provider for downstream SPs) ---- # + async def create_saml_service_provider( + self, req: t.CreateSAMLServiceProviderRequest + ) -> t.SAMLServiceProvider: + res = await self._invoke( + "create_saml_service_provider", + d.ADMIN["create_saml_service_provider"], + req.to_dict(), + ) + return t.SAMLServiceProvider.from_dict(res or {}) + + async def update_saml_service_provider( + self, req: t.UpdateSAMLServiceProviderRequest + ) -> t.SAMLServiceProvider: + res = await self._invoke( + "update_saml_service_provider", + d.ADMIN["update_saml_service_provider"], + req.to_dict(), + ) + return t.SAMLServiceProvider.from_dict(res or {}) + + async def delete_saml_service_provider( + self, req: t.SAMLServiceProviderRequest + ) -> t.GenericResponse: + """Destructive: the downstream SP can no longer be issued assertions.""" + res = await self._invoke( + "delete_saml_service_provider", + d.ADMIN["delete_saml_service_provider"], + req.to_dict(), + ) + return t.GenericResponse.from_dict(res or {}) + + async def get_saml_service_provider( + self, req: t.SAMLServiceProviderRequest + ) -> t.SAMLServiceProvider: + res = await self._invoke( + "get_saml_service_provider", d.ADMIN["get_saml_service_provider"], req.to_dict() + ) + return t.SAMLServiceProvider.from_dict(res or {}) + + async def list_saml_service_providers( + self, req: t.ListSAMLServiceProvidersRequest + ) -> t.SAMLServiceProvidersResponse: + res = await self._invoke( + "list_saml_service_providers", + d.ADMIN["list_saml_service_providers"], + req.to_dict(), + ) + return t.SAMLServiceProvidersResponse.from_dict(res or {}) + + async def rotate_saml_idp_cert(self, req: t.RotateSAMLIDPCertRequest) -> t.SAMLIDPKey: + """Generates a new current signing keypair; the previous key stays "active".""" + res = await self._invoke( + "rotate_saml_idp_cert", d.ADMIN["rotate_saml_idp_cert"], req.to_dict() + ) + return t.SAMLIDPKey.from_dict(res or {}) + + async def retire_saml_idp_key(self, req: t.RetireSAMLIDPKeyRequest) -> t.GenericResponse: + """Destructive: the key stops appearing in IdP metadata. Cannot retire the current key.""" + res = await self._invoke( + "retire_saml_idp_key", d.ADMIN["retire_saml_idp_key"], req.to_dict() + ) + return t.GenericResponse.from_dict(res or {}) + + async def list_saml_idp_keys(self, req: t.ListSAMLIDPKeysRequest) -> list[t.SAMLIDPKey]: + res = await self._invoke( + "list_saml_idp_keys", d.ADMIN["list_saml_idp_keys"], req.to_dict() + ) + # GraphQL returns a bare list; REST/gRPC wrap it as {"saml_idp_keys": [...]}. + items = res if isinstance(res, list) else (res or {}).get("saml_idp_keys", []) + return [t.SAMLIDPKey.from_dict(x) for x in items if isinstance(x, dict)] + + async def import_saml_sp_metadata( + self, req: t.ImportSAMLSPMetadataRequest + ) -> t.SAMLSPMetadataParseResult: + """Parses pasted SP metadata XML; does NOT create a record or fetch a URL.""" + res = await self._invoke( + "import_saml_sp_metadata", d.ADMIN["import_saml_sp_metadata"], req.to_dict() + ) + return t.SAMLSPMetadataParseResult.from_dict(res or {}) + + # -- user organizations ------------------------------------------------- # + async def user_organizations( + self, req: t.UserOrganizationsRequest + ) -> t.UserOrganizationsResponse: + res = await self._invoke( + "user_organizations", d.ADMIN["user_organizations"], req.to_dict() + ) + return t.UserOrganizationsResponse.from_dict(res or {}) + + # -- org domains (home-realm discovery) ---------------------------------- # + async def request_org_domain(self, req: t.RequestOrgDomainRequest) -> t.OrgDomainChallenge: + res = await self._invoke( + "request_org_domain", d.ADMIN["request_org_domain"], req.to_dict() + ) + return t.OrgDomainChallenge.from_dict(res or {}) + + async def verify_org_domain(self, req: t.VerifyOrgDomainRequest) -> t.OrgDomain: + res = await self._invoke("verify_org_domain", d.ADMIN["verify_org_domain"], req.to_dict()) + return t.OrgDomain.from_dict(res or {}) + + async def add_verified_org_domain(self, req: t.AddVerifiedOrgDomainRequest) -> t.OrgDomain: + """Super-admin only: trusted-asserts a domain as verified, skipping DNS challenge.""" + res = await self._invoke( + "add_verified_org_domain", d.ADMIN["add_verified_org_domain"], req.to_dict() + ) + return t.OrgDomain.from_dict(res or {}) + + async def delete_org_domain(self, req: t.DeleteOrgDomainRequest) -> t.GenericResponse: + """Destructive: the domain no longer routes logins to this organization.""" + res = await self._invoke( + "delete_org_domain", d.ADMIN["delete_org_domain"], req.to_dict() + ) + return t.GenericResponse.from_dict(res or {}) + + async def org_domains(self, req: t.ListOrgDomainsRequest) -> t.OrgDomainsResponse: + res = await self._invoke("org_domains", d.ADMIN["org_domains"], req.to_dict()) + return t.OrgDomainsResponse.from_dict(res or {}) + # -- SCIM endpoints ------------------------------------------------------ # async def create_scim_endpoint( self, req: t.CreateScimEndpointRequest diff --git a/src/authorizer/async_client.py b/src/authorizer/async_client.py index 218af75..b6c1017 100644 --- a/src/authorizer/async_client.py +++ b/src/authorizer/async_client.py @@ -239,6 +239,114 @@ async def list_permissions( ) return t.ListPermissionsResponse.from_dict(res or {}) + # -- MFA setup / recovery ---------------------------------------------- # + async def skip_mfa_setup( + self, req: t.SkipMfaSetupRequest, headers: dict[str, str] | None = None + ) -> t.AuthToken: + res = await self._invoke( + "skip_mfa_setup", d.PUBLIC["skip_mfa_setup"], req.to_dict(), headers + ) + return t.AuthToken.from_dict(res or {}) + + async def lock_mfa( + self, req: t.LockMfaRequest, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + """No OTP fallback? Locks the account; requires admin recovery afterward.""" + res = await self._invoke("lock_mfa", d.PUBLIC["lock_mfa"], req.to_dict(), headers) + return t.GenericResponse.from_dict(res or {}) + + async def email_otp_mfa_setup( + self, req: t.OtpMfaSetupRequest | None = None, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + data = req.to_dict() if req is not None else None + res = await self._invoke( + "email_otp_mfa_setup", d.PUBLIC["email_otp_mfa_setup"], data, headers + ) + return t.GenericResponse.from_dict(res or {}) + + async def sms_otp_mfa_setup( + self, req: t.OtpMfaSetupRequest | None = None, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + data = req.to_dict() if req is not None else None + res = await self._invoke( + "sms_otp_mfa_setup", d.PUBLIC["sms_otp_mfa_setup"], data, headers + ) + return t.GenericResponse.from_dict(res or {}) + + async def totp_mfa_setup( + self, req: t.OtpMfaSetupRequest | None = None, headers: dict[str, str] | None = None + ) -> t.AuthToken: + data = req.to_dict() if req is not None else None + res = await self._invoke("totp_mfa_setup", d.PUBLIC["totp_mfa_setup"], data, headers) + return t.AuthToken.from_dict(res or {}) + + # -- WebAuthn / passkeys ------------------------------------------------ # + async def webauthn_registration_options( + self, + req: t.WebauthnRegistrationOptionsRequest | None = None, + headers: dict[str, str] | None = None, + ) -> t.WebauthnRegistrationOptionsResponse: + data = req.to_dict() if req is not None else None + res = await self._invoke( + "webauthn_registration_options", + d.PUBLIC["webauthn_registration_options"], + data, + headers, + ) + return t.WebauthnRegistrationOptionsResponse.from_dict(res or {}) + + async def webauthn_registration_verify( + self, req: t.WebauthnRegistrationVerifyRequest, headers: dict[str, str] | None = None + ) -> t.AuthToken: + res = await self._invoke( + "webauthn_registration_verify", + d.PUBLIC["webauthn_registration_verify"], + req.to_dict(), + headers, + ) + return t.AuthToken.from_dict(res or {}) + + async def webauthn_login_options( + self, + req: t.WebauthnLoginOptionsRequest | None = None, + headers: dict[str, str] | None = None, + ) -> t.WebauthnLoginOptionsResponse: + data = req.to_dict() if req is not None else None + res = await self._invoke( + "webauthn_login_options", d.PUBLIC["webauthn_login_options"], data, headers + ) + return t.WebauthnLoginOptionsResponse.from_dict(res or {}) + + async def webauthn_login_verify( + self, req: t.WebauthnLoginVerifyRequest, headers: dict[str, str] | None = None + ) -> t.AuthToken: + res = await self._invoke( + "webauthn_login_verify", d.PUBLIC["webauthn_login_verify"], req.to_dict(), headers + ) + return t.AuthToken.from_dict(res or {}) + + async def webauthn_delete_credential( + self, req: t.WebauthnDeleteCredentialRequest, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + """Destructive: permanently deletes the registered passkey.""" + res = await self._invoke( + "webauthn_delete_credential", + d.PUBLIC["webauthn_delete_credential"], + req.to_dict(), + headers, + ) + return t.GenericResponse.from_dict(res or {}) + + async def webauthn_credentials( + self, headers: dict[str, str] | None = None + ) -> list[t.WebauthnCredentialInfo]: + """List the authenticated caller's own registered passkeys.""" + res = await self._invoke( + "webauthn_credentials", d.PUBLIC["webauthn_credentials"], None, headers + ) + items: list[Any] = res if isinstance(res, list) else [] + return [t.WebauthnCredentialInfo.from_dict(x) for x in items if isinstance(x, dict)] + # -- OAuth REST ------------------------------------------------------- # async def get_token(self, req: t.GetTokenRequest) -> t.GetTokenResponse: """Exchange credentials for tokens at ``/oauth/token``. diff --git a/src/authorizer/client.py b/src/authorizer/client.py index 432c58a..9803ab9 100644 --- a/src/authorizer/client.py +++ b/src/authorizer/client.py @@ -229,6 +229,106 @@ def list_permissions( ) return t.ListPermissionsResponse.from_dict(res or {}) + # -- MFA setup / recovery ---------------------------------------------- # + def skip_mfa_setup( + self, req: t.SkipMfaSetupRequest, headers: dict[str, str] | None = None + ) -> t.AuthToken: + res = self._invoke("skip_mfa_setup", d.PUBLIC["skip_mfa_setup"], req.to_dict(), headers) + return t.AuthToken.from_dict(res or {}) + + def lock_mfa( + self, req: t.LockMfaRequest, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + """No OTP fallback? Locks the account; requires admin recovery afterward.""" + res = self._invoke("lock_mfa", d.PUBLIC["lock_mfa"], req.to_dict(), headers) + return t.GenericResponse.from_dict(res or {}) + + def email_otp_mfa_setup( + self, req: t.OtpMfaSetupRequest | None = None, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + data = req.to_dict() if req is not None else None + res = self._invoke("email_otp_mfa_setup", d.PUBLIC["email_otp_mfa_setup"], data, headers) + return t.GenericResponse.from_dict(res or {}) + + def sms_otp_mfa_setup( + self, req: t.OtpMfaSetupRequest | None = None, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + data = req.to_dict() if req is not None else None + res = self._invoke("sms_otp_mfa_setup", d.PUBLIC["sms_otp_mfa_setup"], data, headers) + return t.GenericResponse.from_dict(res or {}) + + def totp_mfa_setup( + self, req: t.OtpMfaSetupRequest | None = None, headers: dict[str, str] | None = None + ) -> t.AuthToken: + data = req.to_dict() if req is not None else None + res = self._invoke("totp_mfa_setup", d.PUBLIC["totp_mfa_setup"], data, headers) + return t.AuthToken.from_dict(res or {}) + + # -- WebAuthn / passkeys ------------------------------------------------ # + def webauthn_registration_options( + self, + req: t.WebauthnRegistrationOptionsRequest | None = None, + headers: dict[str, str] | None = None, + ) -> t.WebauthnRegistrationOptionsResponse: + data = req.to_dict() if req is not None else None + res = self._invoke( + "webauthn_registration_options", + d.PUBLIC["webauthn_registration_options"], + data, + headers, + ) + return t.WebauthnRegistrationOptionsResponse.from_dict(res or {}) + + def webauthn_registration_verify( + self, req: t.WebauthnRegistrationVerifyRequest, headers: dict[str, str] | None = None + ) -> t.AuthToken: + res = self._invoke( + "webauthn_registration_verify", + d.PUBLIC["webauthn_registration_verify"], + req.to_dict(), + headers, + ) + return t.AuthToken.from_dict(res or {}) + + def webauthn_login_options( + self, + req: t.WebauthnLoginOptionsRequest | None = None, + headers: dict[str, str] | None = None, + ) -> t.WebauthnLoginOptionsResponse: + data = req.to_dict() if req is not None else None + res = self._invoke( + "webauthn_login_options", d.PUBLIC["webauthn_login_options"], data, headers + ) + return t.WebauthnLoginOptionsResponse.from_dict(res or {}) + + def webauthn_login_verify( + self, req: t.WebauthnLoginVerifyRequest, headers: dict[str, str] | None = None + ) -> t.AuthToken: + res = self._invoke( + "webauthn_login_verify", d.PUBLIC["webauthn_login_verify"], req.to_dict(), headers + ) + return t.AuthToken.from_dict(res or {}) + + def webauthn_delete_credential( + self, req: t.WebauthnDeleteCredentialRequest, headers: dict[str, str] | None = None + ) -> t.GenericResponse: + """Destructive: permanently deletes the registered passkey.""" + res = self._invoke( + "webauthn_delete_credential", + d.PUBLIC["webauthn_delete_credential"], + req.to_dict(), + headers, + ) + return t.GenericResponse.from_dict(res or {}) + + def webauthn_credentials( + self, headers: dict[str, str] | None = None + ) -> list[t.WebauthnCredentialInfo]: + """List the authenticated caller's own registered passkeys.""" + res = self._invoke("webauthn_credentials", d.PUBLIC["webauthn_credentials"], None, headers) + items: list[Any] = res if isinstance(res, list) else [] + return [t.WebauthnCredentialInfo.from_dict(x) for x in items if isinstance(x, dict)] + # -- OAuth REST ------------------------------------------------------- # def get_token(self, req: t.GetTokenRequest) -> t.GetTokenResponse: """Exchange credentials for tokens at ``/oauth/token``. diff --git a/src/authorizer/types.py b/src/authorizer/types.py index 834f0fb..01fe8f6 100644 --- a/src/authorizer/types.py +++ b/src/authorizer/types.py @@ -279,6 +279,75 @@ class ListPermissionsRequest(_Request): user: str | None = None +# -- MFA setup / recovery ----------------------------------------------------- # +@dataclass +class SkipMfaSetupRequest(_Request): + # Either email or phone_number is required, to resolve which user's MFA + # session cookie this is. + email: str | None = None + phone_number: str | None = None + state: str | None = None + + +@dataclass +class LockMfaRequest(_Request): + # Either email or phone_number is required, to resolve which user's MFA + # session cookie this is — same pattern as SkipMfaSetupRequest. + email: str | None = None + phone_number: str | None = None + + +@dataclass +class OtpMfaSetupRequest(_Request): + """Shared request shape for email_otp_mfa_setup / sms_otp_mfa_setup / totp_mfa_setup. + + email/phone_number are only used in the MFA-session-cookie mode (no bearer + token yet); ignored when the caller has a valid bearer token/session. + """ + + email: str | None = None + phone_number: str | None = None + + +# -- WebAuthn / passkeys ------------------------------------------------------- # +@dataclass +class WebauthnRegistrationOptionsRequest(_Request): + email: str | None = None + phone_number: str | None = None + + +@dataclass +class WebauthnRegistrationVerifyRequest(_Request): + # JSON-encoded PublicKeyCredential attestation response from + # navigator.credentials.create(). + credential: str + # Optional human label for the passkey (e.g. "MacBook Touch ID"). + name: str | None = None + # Only used on the MFA-session-cookie path; ignored for a bearer-token caller. + email: str | None = None + phone_number: str | None = None + state: str | None = None + + +@dataclass +class WebauthnLoginOptionsRequest(_Request): + email: str | None = None + + +@dataclass +class WebauthnLoginVerifyRequest(_Request): + # JSON-encoded PublicKeyCredential assertion response from + # navigator.credentials.get(). + credential: str + # OAuth authorize state to continue an in-progress authorization, if any. + state: str | None = None + + +@dataclass +class WebauthnDeleteCredentialRequest(_Request): + id: str + + # --------------------------------------------------------------------------- # # Response types # --------------------------------------------------------------------------- # @@ -304,6 +373,15 @@ class User: is_multi_factor_auth_enabled: bool | None = None app_data: dict[str, Any] | None = None revoked_timestamp: int | None = None + # has_skipped_mfa_setup_at is set once the user explicitly skips the + # optional MFA setup prompt shown at login. None means never skipped. + has_skipped_mfa_setup_at: int | None = None + # mfa_locked_at is set once the user reports losing access to their only + # MFA factor(s) with no OTP fallback enrolled. None means not locked. + mfa_locked_at: int | None = None + # enrolled_mfa_methods lists verified MFA factors: any of "totp", + # "webauthn", "email_otp", "sms_otp". Empty list means nothing enrolled. + enrolled_mfa_methods: list[str] | None = None @classmethod def from_dict(cls, data: dict[str, Any]) -> User: @@ -320,6 +398,16 @@ class AuthToken: should_show_email_otp_screen: bool | None = None should_show_mobile_otp_screen: bool | None = None should_show_totp_screen: bool | None = None + # should_offer_webauthn_mfa_verify is true when a passkey-verify offer is + # available (see AuthResponse.should_offer_webauthn_mfa_verify in the + # server schema for the exact semantics). + should_offer_webauthn_mfa_verify: bool | None = None + # should_offer_webauthn_mfa_setup / should_offer_email_otp_mfa_setup / + # should_offer_sms_otp_mfa_setup are true, alongside should_show_totp_screen, + # during a first-time optional-MFA offer for that factor. + should_offer_webauthn_mfa_setup: bool | None = None + should_offer_email_otp_mfa_setup: bool | None = None + should_offer_sms_otp_mfa_setup: bool | None = None authenticator_scanner_image: str | None = None authenticator_secret: str | None = None authenticator_recovery_codes: list[str] | None = None @@ -477,6 +565,42 @@ def from_dict(cls, data: dict[str, Any]) -> ListPermissionsResponse: ) +@dataclass +class WebauthnRegistrationOptionsResponse: + # JSON-encoded PublicKeyCredentialCreationOptions to pass to + # navigator.credentials.create(). + options: str = "" + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> WebauthnRegistrationOptionsResponse: + return cls(**_known(cls, data)) + + +@dataclass +class WebauthnLoginOptionsResponse: + # JSON-encoded PublicKeyCredentialRequestOptions to pass to + # navigator.credentials.get(). + options: str = "" + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> WebauthnLoginOptionsResponse: + return cls(**_known(cls, data)) + + +@dataclass +class WebauthnCredentialInfo: + id: str = "" + name: str = "" + transports: list[str] | None = None + created_at: int | None = None + updated_at: int | None = None + last_used_at: int | None = None + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> WebauthnCredentialInfo: + return cls(**_known(cls, data)) + + # --------------------------------------------------------------------------- # # Admin request types # --------------------------------------------------------------------------- # @@ -492,6 +616,19 @@ class PaginatedRequest(_Request): pagination: PaginationRequest | None = None +@dataclass +class ListUsersRequest(_Request): + """Request for :meth:`AuthorizerAdminClient.users`. + + ``query`` is an optional case-insensitive substring filter matched + against email, given_name, family_name and nickname. Empty/absent + means no filter (full list). + """ + + pagination: PaginationRequest | None = None + query: str | None = None + + @dataclass class AdminLoginRequest(_Request): admin_secret: str @@ -519,6 +656,11 @@ class UpdateUserRequest(_Request): picture: str | None = None roles: list[str] | None = None is_multi_factor_auth_enabled: bool | None = None + # reset_mfa, when true, clears the user's entire MFA state: mfa_locked_at, + # is_multi_factor_auth_enabled, has_skipped_mfa_setup_at, and deletes all + # enrolled authenticators/passkeys. The user's next login lands back on + # the first-time setup screen, same as a brand-new account. + reset_mfa: bool | None = None app_data: dict[str, Any] | None = None @@ -854,6 +996,106 @@ class ScimEndpointRequest(_Request): org_id: str +# -- SAML IdP (Authorizer as Identity Provider for downstream SPs) ----------- # +@dataclass +class CreateSAMLServiceProviderRequest(_Request): + org_id: str + name: str + # entity_id: the SP entity ID (unique within the org). + entity_id: str + # acs_url: the SP Assertion Consumer Service URL (https recommended). + acs_url: str + sp_cert_pem: str | None = None + # name_id_format: default urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress. + name_id_format: str | None = None + # mapped_attributes: JSON, e.g. {"email":"email","given_name":"firstName"}. + mapped_attributes: str | None = None + # allow_idp_initiated: default false (SP-initiated only). + allow_idp_initiated: bool | None = None + + +@dataclass +class UpdateSAMLServiceProviderRequest(_Request): + id: str + name: str | None = None + entity_id: str | None = None + acs_url: str | None = None + sp_cert_pem: str | None = None + name_id_format: str | None = None + mapped_attributes: str | None = None + allow_idp_initiated: bool | None = None + is_active: bool | None = None + + +@dataclass +class SAMLServiceProviderRequest(_Request): + id: str + + +@dataclass +class ListSAMLServiceProvidersRequest(_Request): + org_id: str + pagination: PaginatedRequest | None = None + + +@dataclass +class RotateSAMLIDPCertRequest(_Request): + org_id: str + + +@dataclass +class RetireSAMLIDPKeyRequest(_Request): + id: str + + +@dataclass +class ListSAMLIDPKeysRequest(_Request): + org_id: str + + +@dataclass +class ImportSAMLSPMetadataRequest(_Request): + # metadata_xml: pasted SP metadata XML (NOT a URL — no remote fetch). + metadata_xml: str + + +# -- user organizations ------------------------------------------------------- # +@dataclass +class UserOrganizationsRequest(_Request): + user_id: str + pagination: PaginationRequest | None = None + + +# -- org domains (home-realm discovery) --------------------------------------- # +@dataclass +class RequestOrgDomainRequest(_Request): + org_id: str + domain: str + + +@dataclass +class VerifyOrgDomainRequest(_Request): + org_id: str + domain: str + + +@dataclass +class AddVerifiedOrgDomainRequest(_Request): + org_id: str + domain: str + + +@dataclass +class ListOrgDomainsRequest(_Request): + org_id: str + pagination: PaginatedRequest | None = None + + +@dataclass +class DeleteOrgDomainRequest(_Request): + domain: str + + # --------------------------------------------------------------------------- # # Admin response types # --------------------------------------------------------------------------- # @@ -1155,6 +1397,9 @@ def from_dict(cls, data: dict[str, Any]) -> FgaExpandResponse: @dataclass class Client: id: str = "" + # client_id is the public OAuth identifier presented at the authorize/token + # endpoints, distinct from id (internal surrogate key). + client_id: str = "" name: str = "" description: str | None = None allowed_scopes: list[str] = field(default_factory=list) @@ -1271,6 +1516,10 @@ class OrgMember: id: str = "" org_id: str = "" user_id: str = "" + # Resolved user identity for display; blank when the user no longer exists. + email: str | None = None + given_name: str | None = None + family_name: str | None = None # roles is the set of per-organization roles granted to this member. roles: list[str] = field(default_factory=list) created_at: int | None = None @@ -1368,3 +1617,149 @@ def from_dict(cls, data: dict[str, Any]) -> CreateScimEndpointResponse: scim_endpoint=ScimEndpoint.from_dict(raw) if isinstance(raw, dict) else ScimEndpoint(), token=str(data.get("token", "")), ) + + +# -- SAML IdP (Authorizer as Identity Provider for downstream SPs) ----------- # +@dataclass +class SAMLServiceProvider: + id: str = "" + org_id: str = "" + name: str = "" + entity_id: str = "" + acs_url: str = "" + sp_cert_pem: str | None = None + name_id_format: str | None = None + mapped_attributes: str | None = None + allow_idp_initiated: bool = False + is_active: bool = False + created_at: int | None = None + updated_at: int | None = None + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> SAMLServiceProvider: + return cls(**_known(cls, data)) + + +@dataclass +class SAMLServiceProvidersResponse: + saml_service_providers: list[SAMLServiceProvider] = field(default_factory=list) + pagination: Pagination = field(default_factory=Pagination) + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> SAMLServiceProvidersResponse: + raw = data.get("saml_service_providers") + items = raw if isinstance(raw, list) else [] + return cls( + saml_service_providers=[ + SAMLServiceProvider.from_dict(x) for x in items if isinstance(x, dict) + ], + pagination=_pagination(data), + ) + + +# SAMLIDPKey: per-org SAML IdP signing keypair. The private key is NEVER +# projected — only the certificate and rotation status. +@dataclass +class SAMLIDPKey: + id: str = "" + org_id: str = "" + cert_pem: str = "" + algorithm: str = "" + # status: "current" (signs new assertions), "active" (published, not + # signing), or "retired" (neither). + status: str = "" + created_at: int | None = None + updated_at: int | None = None + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> SAMLIDPKey: + return cls(**_known(cls, data)) + + +@dataclass +class SAMLSPMetadataParseResult: + entity_id: str = "" + acs_url: str = "" + certificate: str | None = None + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> SAMLSPMetadataParseResult: + return cls(**_known(cls, data)) + + +# -- user organizations ------------------------------------------------------- # +@dataclass +class UserOrganization: + organization: Organization = field(default_factory=Organization) + roles: list[str] = field(default_factory=list) + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> UserOrganization: + raw = data.get("organization") + raw_roles = data.get("roles") + return cls( + organization=Organization.from_dict(raw) if isinstance(raw, dict) else Organization(), + roles=list(raw_roles) if isinstance(raw_roles, list) else [], + ) + + +@dataclass +class UserOrganizationsResponse: + user_organizations: list[UserOrganization] = field(default_factory=list) + pagination: Pagination = field(default_factory=Pagination) + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> UserOrganizationsResponse: + raw = data.get("user_organizations") + items = raw if isinstance(raw, list) else [] + return cls( + user_organizations=[ + UserOrganization.from_dict(x) for x in items if isinstance(x, dict) + ], + pagination=_pagination(data), + ) + + +# -- org domains (home-realm discovery) --------------------------------------- # +@dataclass +class OrgDomain: + domain: str = "" + org_id: str = "" + verified_at: int | None = None + created_at: int | None = None + updated_at: int | None = None + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> OrgDomain: + return cls(**_known(cls, data)) + + +@dataclass +class OrgDomainsResponse: + org_domains: list[OrgDomain] = field(default_factory=list) + pagination: Pagination = field(default_factory=Pagination) + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> OrgDomainsResponse: + raw = data.get("org_domains") + items = raw if isinstance(raw, list) else [] + return cls( + org_domains=[OrgDomain.from_dict(x) for x in items if isinstance(x, dict)], + pagination=_pagination(data), + ) + + +# OrgDomainChallenge is the DNS TXT record a tenant must publish to prove +# control of a domain. Returned by request_org_domain; no durable row exists +# until the domain is verified. +@dataclass +class OrgDomainChallenge: + domain: str = "" + # record_type is always "TXT". + record_type: str = "" + record_name: str = "" + record_value: str = "" + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> OrgDomainChallenge: + return cls(**_known(cls, data)) diff --git a/tests/test_admin_client.py b/tests/test_admin_client.py index aec1000..1fced71 100644 --- a/tests/test_admin_client.py +++ b/tests/test_admin_client.py @@ -335,14 +335,17 @@ def test_rotate_scim_token_returns_token_once() -> None: assert out.token == "bearer-once" -def test_mai_methods_not_available_over_rest() -> None: +def test_org_methods_not_available_over_rest() -> None: + # Organizations/SSO/SCIM/user_organizations/org_domains have no proto RPC + # on the server (unlike clients/trusted issuers/SAML IdP, which do) -- + # graphql-only for now. with _admin("rest") as c: with pytest.raises(AuthorizerError) as ei: - c.create_client(t.CreateClientRequest(name="a", allowed_scopes=["s"])) + c.create_organization(t.CreateOrganizationRequest(name="acme")) assert "not available over rest" in str(ei.value) with _admin("rest") as c: with pytest.raises(AuthorizerError): - c.trusted_issuers() + c.organizations() @pytest.mark.asyncio diff --git a/tests/test_admin_parity.py b/tests/test_admin_parity.py index ae8571e..2b6c3da 100644 --- a/tests/test_admin_parity.py +++ b/tests/test_admin_parity.py @@ -1,4 +1,4 @@ -"""Admin sync/async parity + spec coverage of all 66 admin methods.""" +"""Admin sync/async parity + spec coverage of all admin methods.""" from __future__ import annotations @@ -6,7 +6,9 @@ from authorizer.admin_client import AuthorizerAdminClient from authorizer.async_admin_client import AsyncAuthorizerAdminClient -# 32 proto RPCs + 3 gql-only extras. +# Proto RPCs (clients/trusted issuers/SAML IdP now full graphql+rest+grpc, +# re-vendored from server HEAD ca628cee) + graphql-only extras (orgs/SSO/SCIM/ +# user_organizations/org_domains have no proto RPC on the server). ADMIN_METHODS = [ "admin_login", "admin_logout", @@ -43,8 +45,8 @@ "admin_signup", "update_env", "generate_jwt_keys", - # Machine-agent-identity ops (graphql-only until the vendored stubs are - # re-vendored; orgs/SSO/SCIM are graphql-only on the server too). + # Machine-agent-identity ops: clients + trusted issuers have proto RPCs + # (full graphql+rest+grpc); orgs/SSO/SCIM are graphql-only on the server. "create_client", "update_client", "delete_client", @@ -56,6 +58,23 @@ "delete_trusted_issuer", "get_trusted_issuer", "trusted_issuers", + # SAML IdP (Authorizer as Identity Provider for downstream SPs) — proto RPCs. + "create_saml_service_provider", + "update_saml_service_provider", + "delete_saml_service_provider", + "get_saml_service_provider", + "list_saml_service_providers", + "rotate_saml_idp_cert", + "retire_saml_idp_key", + "list_saml_idp_keys", + "import_saml_sp_metadata", + # graphql-only: no proto RPC on the server. + "user_organizations", + "request_org_domain", + "verify_org_domain", + "add_verified_org_domain", + "delete_org_domain", + "org_domains", "create_organization", "update_organization", "delete_organization", @@ -87,7 +106,7 @@ def test_both_admin_clients_expose_same_surface() -> None: def test_dispatch_table_covers_every_admin_method() -> None: assert set(d.ADMIN) == set(ADMIN_METHODS) - assert len(d.ADMIN) == 66 + assert len(d.ADMIN) == len(ADMIN_METHODS) def test_protocol_availability_matches_spec() -> None: @@ -99,6 +118,10 @@ def test_protocol_availability_matches_spec() -> None: assert d.ADMIN[name].protocols == ("rest", "grpc") # full coverage assert d.ADMIN["users"].protocols == ("graphql", "rest", "grpc") - # machine-agent-identity ops are graphql-only for now - for name in ("create_client", "trusted_issuers", "create_organization", "get_scim_endpoint"): + # machine-agent-identity ops (clients/trusted issuers/SAML IdP) have proto + # RPCs -- full coverage now that the stubs are re-vendored. + for name in ("create_client", "trusted_issuers", "create_saml_service_provider"): + assert d.ADMIN[name].protocols == ("graphql", "rest", "grpc") + # orgs/SSO/SCIM/user_organizations/org_domains are graphql-only on the server. + for name in ("create_organization", "get_scim_endpoint", "user_organizations", "org_domains"): assert d.ADMIN[name].protocols == ("graphql",) diff --git a/tests/test_parity.py b/tests/test_parity.py index 929132c..ca219c2 100644 --- a/tests/test_parity.py +++ b/tests/test_parity.py @@ -28,6 +28,17 @@ "get_token", "revoke_token", "graphql_query", + "skip_mfa_setup", + "lock_mfa", + "email_otp_mfa_setup", + "sms_otp_mfa_setup", + "totp_mfa_setup", + "webauthn_registration_options", + "webauthn_registration_verify", + "webauthn_login_options", + "webauthn_login_verify", + "webauthn_delete_credential", + "webauthn_credentials", ] From 19dc4d2ac3167a170b7e85b203148f5e1ddcdd9e Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Thu, 23 Jul 2026 10:56:55 +0530 Subject: [PATCH 2/2] chore: bump CI live-test image to 2.4.0-rc.7, disable MFA to match tests CI's live-integration job was pinned to quay.io/authorizer/authorizer:2.3.0, which predates the schema fields this PR's new coverage queries (e.g. should_offer_webauthn_mfa_verify on AuthResponse, ListUsersRequest) -- every one of those queries failed GraphQL validation against the old schema, breaking CI. Bumped to rc.7, and added --disable-mfa since rc.7's default MFA-methods-enabled-by-default behavior (a separate, unrelated server-side change) would otherwise gate signup/login behind an MFA offer instead of returning an immediate access_token, which is what the existing test suite assumes. Verified locally: the live suite passes end-to-end (63/63) against the rc.7 image with this config. --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 383fcee..3269eb8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,11 +44,11 @@ jobs: run: | docker run -d --name authorizer \ -p 8080:8080 -p 9091:9091 \ - quay.io/authorizer/authorizer:2.3.0 \ + quay.io/authorizer/authorizer:2.4.0-rc.7 \ --database-type=sqlite --database-url=test.db \ --jwt-type=HS256 --jwt-secret=test \ --admin-secret=admin --client-id=ci-client --client-secret=secret \ - --grpc-insecure=true + --grpc-insecure=true --disable-mfa for i in $(seq 1 30); do curl -fsS http://localhost:8080/health && break || sleep 2 done