Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions kinde_fastapi/examples/example_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import logging
from kinde_sdk.auth.oauth import OAuth
from kinde_sdk.auth import claims, feature_flags, permissions, tokens
from kinde_sdk.management import ManagementClient;

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -38,6 +39,35 @@ async def home(request: Request):
"""
if kinde_oauth.is_authenticated():
user = kinde_oauth.get_user_info()

# Validate environment variables
domain = os.getenv("KINDE_DOMAIN")
client_id = os.getenv("KINDE_MANAGEMENT_CLIENT_ID")
client_secret = os.getenv("KINDE_MANAGEMENT_CLIENT_SECRET")

if not all([domain, client_id, client_secret]):
return """
<html>
<body>
<h1>Configuration Error</h1>
<p>Missing required environment variables for management client.</p>
<a href="/logout">Logout</a>
</body>
</html>
"""

management_client = ManagementClient(
domain=domain,
client_id=client_id,
client_secret=client_secret
)
try:
api_response = management_client.get_users()
user_count = len(api_response.users) if hasattr(api_response, 'users') else 0
except Exception as e:
logger.error(f"Failed to fetch users: {e}")
user_count = 0

return f"""
<html>
<body>
Expand All @@ -46,6 +76,7 @@ async def home(request: Request):
<p>feature flags: {await feature_flags.get_all_flags()}</p>
<p>permissions: {await permissions.get_permissions()}</p>
<p>tokens: {tokens.get_token_manager().get_access_token()}</p>
<p>users: {user_count} user(s) found</p>
<p>You are logged in.</p>
<a href="/logout">Logout</a>
</body>
Expand Down
16 changes: 8 additions & 8 deletions kinde_sdk/management/management_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,8 @@ class ManagementClient:
# Define response types for each endpoint
RESPONSE_TYPES = {
'users': {
'list': {'200': 'GetUsersResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'get': {'200': 'GetUserResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'list': {'200': 'UsersResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'get': {'200': 'User', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'create': {'201': 'CreateUserResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'update': {'200': 'UpdateUserResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'delete': {'200': 'SuccessResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
Expand All @@ -130,16 +130,16 @@ class ManagementClient:
},
'permissions': {
'list': {'200': 'GetPermissionsResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'get': {'200': 'GetPermissionResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'create': {'201': 'CreatePermissionResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'update': {'200': 'UpdatePermissionResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'get': {'200': 'Permissions', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'create': {'201': 'SuccessResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'update': {'200': 'SuccessResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'delete': {'200': 'SuccessResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
},
'feature_flags': {
'list': {'200': 'GetFeatureFlagsResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'get': {'200': 'GetFeatureFlagResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'create': {'201': 'CreateFeatureFlagResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'update': {'200': 'UpdateFeatureFlagResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'get': {'200': 'GetFeatureFlagsResponseDataFeatureFlagsInner', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'create': {'201': 'SuccessResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '429': 'ErrorResponse'},
'update': {'200': 'SuccessResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
'delete': {'200': 'SuccessResponse', '400': 'ErrorResponse', '403': 'ErrorResponse', '404': 'ErrorResponse', '429': 'ErrorResponse'},
},
'subscribers': {
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "kinde-python-sdk"
version = "2.0.2"
version = "2.0.6"
authors = [
{ name = "Kinde Engineering", email = "engineering@kinde.com" },
]
Expand Down