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 database import db
from areas.apps.models import App, AppRole from areas.apps.models import App, AppRole
from areas.roles.role_service import RoleService from areas.roles.role_service import RoleService
from helpers import KratosApi 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: class UserService:
@staticmethod @staticmethod
def get_users(): def get_users():
@ -22,7 +31,10 @@ class UserService:
def post_user(data): def post_user(data):
kratos_data = { kratos_data = {
"schema_id": "default", "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() res = KratosApi.post("/admin/identities", kratos_data).json()
@ -39,8 +51,31 @@ class UserService:
db.session.add(app_role) db.session.add(app_role)
db.session.commit() db.session.commit()
UserService.__start_user_recovery_flow(data["email"])
return UserService.get_user(res["id"]) 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 @staticmethod
def put_user(id, user_editing_id, data): def put_user(id, user_editing_id, data):
kratos_data = { kratos_data = {

View file

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