from __future__ import annotations
from typing import Any
from .base import AuthenticationBase
[docs]class Database(AuthenticationBase):
"""Database & Active Directory / LDAP Authentication.
Args:
domain (str): Your auth0 domain (e.g: username.auth0.com)
"""
[docs] def signup(
self,
email: str,
password: str,
connection: str,
username: str | None = None,
user_metadata: dict[str, Any] | None = None,
given_name: str | None = None,
family_name: str | None = None,
name: str | None = None,
nickname: str | None = None,
picture: str | None = None,
) -> dict[str, Any]:
"""Signup using email and password.
Args:
email (str): The user's email address.
password (str): The user's desired password.
connection (str): The name of the database connection where this user should be created.
username (str, optional): The user's username, if required by the database connection.
user_metadata (dict, optional): Additional key-value information to store for the user.
Some limitations apply, see: https://auth0.com/docs/metadata#metadata-restrictions
given_name (str, optional): The user's given name(s).
family_name (str, optional): The user's family name(s).
name (str, optional): The user's full name.
nickname (str, optional): The user's nickname.
picture (str, optional): A URI pointing to the user's picture.
See: https://auth0.com/docs/api/authentication#signup
"""
body: dict[str, Any] = {
"client_id": self.client_id,
"email": email,
"password": password,
"connection": connection,
}
if username:
body.update({"username": username})
if user_metadata:
body.update({"user_metadata": user_metadata})
if given_name:
body.update({"given_name": given_name})
if family_name:
body.update({"family_name": family_name})
if name:
body.update({"name": name})
if nickname:
body.update({"nickname": nickname})
if picture:
body.update({"picture": picture})
data: dict[str, Any] = self.post(
f"{self.protocol}://{self.domain}/dbconnections/signup", data=body
)
return data
[docs] def change_password(
self,
email: str,
connection: str,
password: str | None = None,
organization: str | None = None,
) -> str:
"""Asks to change a password for a given user.
email (str): The user's email address.
connection (str): The name of the database connection where this user should be created.
organization (str, optional): The id of the Organization associated with the user.
"""
body = {
"client_id": self.client_id,
"email": email,
"connection": connection,
}
if organization:
body["organization"] = organization
data: str = self.post(
f"{self.protocol}://{self.domain}/dbconnections/change_password",
data=body,
)
return data