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
188 changes: 171 additions & 17 deletions propelauth_flask/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,16 +269,13 @@ def create_magic_link(
self,
email: str,
redirect_to_url: Optional[str] = None,
expires_in_hours: Optional[str] = None,
expires_in_hours: Optional[int] = None,
create_new_user_if_one_doesnt_exist: Optional[bool] = None,
user_signup_query_parameters: Optional[Dict[str, Any]] = None,
expire_after_first_use: Optional[bool] = None
):
return self.auth.create_magic_link(
email,
redirect_to_url,
expires_in_hours,
create_new_user_if_one_doesnt_exist,
user_signup_query_parameters,
email, redirect_to_url, expires_in_hours, create_new_user_if_one_doesnt_exist, user_signup_query_parameters, expire_after_first_use
)

def create_access_token(
Expand Down Expand Up @@ -460,13 +457,8 @@ def create_api_key(
):
return self.auth.create_api_key(org_id, user_id, expires_at_seconds, metadata)

def update_api_key(
self,
api_key_id: str,
expires_at_seconds: Optional[str] = None,
metadata: Optional[Dict[str, Any]] = None,
):
return self.auth.update_api_key(api_key_id, expires_at_seconds, metadata)
def update_api_key(self, api_key_id: str, expires_at_seconds: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None, set_to_never_expire: Optional[bool] = None):
return self.auth.update_api_key(api_key_id, expires_at_seconds, metadata, set_to_never_expire)

def delete_api_key(self, api_key_id: str):
return self.auth.delete_api_key(api_key_id)
Expand Down Expand Up @@ -508,6 +500,80 @@ def verify_step_up_totp_challenge(

def verify_step_up_grant(self, action_type: str, user_id: str, grant: str) -> bool:
return self.auth.verify_step_up_grant(action_type, user_id, grant)

def fetch_user_mfa_methods(self, user_id: str):
return self.auth.fetch_user_mfa_methods(user_id)

def invite_user_to_org_by_user_id(
self, user_id: str, org_id: str, role: str, additional_roles: List[str] = []
):
return self.auth.invite_user_to_org_by_user_id(
user_id,
org_id,
role,
additional_roles,
)

def validate_imported_api_key(self, api_key_token: str):
return self.auth.validate_imported_api_key(api_key_token)

def fetch_api_key_usage(
self,
date: str,
org_id: Optional[str] = None,
user_id: Optional[str] = None,
api_key_id: Optional[str] = None
):
return self.auth.fetch_api_key_usage(
date, org_id, user_id, api_key_id
)

def import_api_key(
self,
api_key_token: str,
org_id: Optional[str] = None,
user_id: Optional[str] = None,
expires_at_seconds: Optional[str] = None,
metadata: Optional[Dict[str, Any]] = None,
):
return self.auth.import_api_key(
api_key_token,
org_id,
user_id,
expires_at_seconds,
metadata,
)

def send_sms_mfa_code(
self,
action_type: str,
user_id: str,
mfa_phone_id: str,
grant_type: StepUpMfaGrantType,
valid_for_seconds: int,
):
return self.auth.send_sms_mfa_code(
action_type,
user_id,
mfa_phone_id,
grant_type,
valid_for_seconds
)

def verify_sms_challenge(
self,
challenge_id: str,
user_id: str,
code: str,
):
return self.auth.verify_sms_challenge(
challenge_id,
user_id,
code
)

def fetch_employee_by_id(self, employee_id: str):
return self.auth.fetch_employee_by_id(employee_id)


class FlaskAuthAsync():
Expand Down Expand Up @@ -672,12 +738,13 @@ async def create_magic_link(
self,
email: str,
redirect_to_url: Optional[str] = None,
expires_in_hours: Optional[str] = None,
expires_in_hours: Optional[int] = None,
create_new_user_if_one_doesnt_exist: Optional[bool] = None,
user_signup_query_parameters: Optional[Dict[str, Any]] = None,
expire_after_first_use: Optional[bool] = None
):
return await self.auth.create_magic_link(
email, redirect_to_url, expires_in_hours, create_new_user_if_one_doesnt_exist, user_signup_query_parameters
email, redirect_to_url, expires_in_hours, create_new_user_if_one_doesnt_exist, user_signup_query_parameters, expire_after_first_use
)

async def create_access_token(self, user_id: str, duration_in_minutes: int, active_org_id: Optional[str] = None):
Expand Down Expand Up @@ -824,8 +891,8 @@ async def create_api_key(
):
return await self.auth.create_api_key(org_id, user_id, expires_at_seconds, metadata)

async def update_api_key(self, api_key_id: str, expires_at_seconds: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None):
return await self.auth.update_api_key(api_key_id, expires_at_seconds, metadata)
async def update_api_key(self, api_key_id: str, expires_at_seconds: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None, set_to_never_expire: Optional[bool] = None):
return await self.auth.update_api_key(api_key_id, expires_at_seconds, metadata, set_to_never_expire)

async def delete_api_key(self, api_key_id: str):
return await self.auth.delete_api_key(api_key_id)
Expand Down Expand Up @@ -865,6 +932,93 @@ async def verify_step_up_totp_challenge(

async def verify_step_up_grant(self, action_type: str, user_id: str, grant: str) -> bool:
return await self.auth.verify_step_up_grant(action_type, user_id, grant)

async def validate_imported_api_key(self, api_key_token: str):
return await self.auth.validate_imported_api_key(
api_key_token=api_key_token
)

async def fetch_api_key_usage(
self,
date: str,
org_id: Optional[str] = None,
user_id: Optional[str] = None,
api_key_id: Optional[str] = None
):
return await self.auth.fetch_api_key_usage(
date,
org_id,
user_id,
api_key_id
)

async def import_api_key(
self,
api_key_token: str,
org_id: Optional[str] = None,
user_id: Optional[str] = None,
expires_at_seconds: Optional[str] = None,
metadata: Optional[Dict[str, Any]] = None,
):
return await self.auth.import_api_key(
api_key_token,
org_id,
user_id,
expires_at_seconds,
metadata,
)

async def invite_user_to_org_by_user_id(
self,
user_id: str,
org_id: str,
role: str,
additional_roles: List[str] = []
):
return await self.auth.invite_user_to_org_by_user_id(
user_id,
org_id,
role,
additional_roles,
)

async def fetch_user_mfa_methods(self, user_id: str):
return await self.auth.fetch_user_mfa_methods(
user_id,
)

async def send_sms_mfa_code(
self,
action_type: str,
user_id: str,
mfa_phone_id: str,
grant_type: StepUpMfaGrantType,
valid_for_seconds: int,
):
return await self.auth.send_sms_mfa_code(
action_type,
user_id,
mfa_phone_id,
grant_type,
valid_for_seconds
)

async def verify_sms_challenge(
self,
challenge_id: str,
user_id: str,
code: str,
):
return await self.auth.verify_sms_challenge(
challenge_id,
user_id,
code
)

async def fetch_employee_by_id(self, employee_id: str):
return await self.auth.fetch_employee_by_id(
employee_id
)

def init_auth(
auth_url: str,
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
flask<4
propelauth-py==4.2.8
propelauth-py==4.2.9
pytest
requests-mock
httpx
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

setup(
name="propelauth-flask",
version="4.2.8",
version="4.2.9",
description="A library for managing authentication in Flask",
long_description=README,
long_description_content_type="text/markdown",
Expand All @@ -21,7 +21,7 @@
author="PropelAuth",
author_email="[email protected]",
license="MIT",
install_requires=["flask<4", "propelauth-py==4.2.8", "requests", "httpx>=0.28.1"],
install_requires=["flask<4", "propelauth-py==4.2.9", "requests", "httpx>=0.28.1"],
setup_requires=pytest_runner,
tests_require=["pytest==4.4.1"],
test_suite="tests",
Expand Down