send out a recovery email after a new user is created.

This commit is contained in:
Maarten de Waard 2022-07-21 10:47:08 +02:00
parent 72f54df155
commit 685ddeff00
No known key found for this signature in database
GPG key ID: 1D3E893A657CC8DA
2 changed files with 36 additions and 8 deletions

View file

@ -1,8 +1,17 @@
import ory_kratos_client
from ory_kratos_client.model.submit_self_service_recovery_flow_body \
import SubmitSelfServiceRecoveryFlowBody
from ory_kratos_client.api import v0alpha2_api as kratos_api
from config import KRATOS_ADMIN_URL
from database import db
from areas.apps.models import App, AppRole
from areas.roles.role_service import RoleService
from helpers import KratosApi
tmp = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
KRATOS_ADMIN = kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(tmp))
class UserService:
@staticmethod
def get_users():
@ -22,7 +31,10 @@ class UserService:
def post_user(data):
kratos_data = {
"schema_id": "default",
"traits": {"email": data["email"], "name": data["name"]},
"traits": {
"name": data["name"],
"email": data["email"],
},
}
res = KratosApi.post("/admin/identities", kratos_data).json()
@ -39,8 +51,31 @@ class UserService:
db.session.add(app_role)
db.session.commit()
UserService.__start_user_recovery_flow(data["email"])
return UserService.get_user(res["id"])
@staticmethod
def __start_user_recovery_flow(email):
"""
Start a Kratos recovery flow for the user's email address.
This sends out an email to the user that explains to them how they can
set their password.
:param email: Email to send recovery link to
:type email: str
"""
api_response = KRATOS_ADMIN.initialize_self_service_recovery_flow_without_browser()
flow = api_response['id']
# Submit the recovery flow to send an email to the new user.
submit_self_service_recovery_flow_body = \
SubmitSelfServiceRecoveryFlowBody(method="link", email=email)
api_response = KRATOS_ADMIN.submit_self_service_recovery_flow(flow,
submit_self_service_recovery_flow_body=
submit_self_service_recovery_flow_body)
@staticmethod
def put_user(id, user_editing_id, data):
kratos_data = {

View file

@ -1,5 +1,3 @@
/* base.js
This is the base JS file to render the user interfaces of kratos and provide
the end user with flows for login, recovery etc.
@ -433,8 +431,3 @@ $.urlParam = function(name) {
}
return decodeURI(results[1]) || 0;
};