Add FlowId variable for use in Courier templates for use with API implementations and custom/native UI #3381
Description
Preflight checklist
- I could not find a solution in the existing issues, docs, nor discussions.
- I agree to follow this project's Code of Conduct.
- I have read and am following this repository's Contribution Guidelines.
- This issue affects my Ory Network project.
- I have joined the Ory Community Slack.
- I am signed up to the Ory Security Patch Newsletter.
Describe your problem
Existing VerificationURL and RecoveryURL variables assumes use of /self-serve/ endpoints, and not compatible with custom UI for native API implementations. Add VerificationFlowId / RecoveryFlowId (or just FlowId) variable for those who want to easily customize the templates.
Would also be nice to add a bank of additional variables that can be registered in the main kratos.yml file, that can be used for brand name, domains, URLs, disclaimers, etc. Variables from this config section could then easily be referenced by any Go template for email and later SMS, using dot notation like Identity.
Describe your ideal solution
Add additional variable(s) for FlowId that can be used when composing custom email templates.
See https://www.ory.sh/docs/kratos/emails-sms/custom-email-templates
Workarounds or alternatives
Use Go’s regex functions (see http://masterminds.github.io/sprig/strings.html#regexmatch-mustregexmatch) in the verification_code/valid/email.body.gotmpl and verification_code/valid/email.body.plaintext.gotmpl templates.
Example for verification_code/valid/email.body.gotmpl
Hello,
please verify your account by entering the following code:
{{ .VerificationCode }}
or clicking the following link:
{{ $flowParam := mustRegexFind "flow=([^&]+)" .VerificationURL }}
{{ $VerificationFlowId := mustRegexReplaceAll "flow=([^&]+)" $flowParam "${1}" }}
{{ $VerificationURL := print "http://127.0.0.1:8080/verify?code=" (urlquery .VerificationCode) "&id=" $VerificationFlowId }}
<a href="{{ $VerificationURL }}">{{ $VerificationURL }}</a>
Additional useful setup for testing/reproducing:
Download Courier templates locally:
OLD (Github no longer supports SVN)
brew install svn
svn export https://github.com/ory/kratos/trunk/courier/template/courier/builtin/templates $PWD/ory/kratos/courier-templates
NEW (more complicated process)
mkdir -p $PWD/ory/kratos/courier-templates
curl -L https://api.github.com/repos/ory/kratos/tarball --output kratos.tgz
MAIN_FOLDER=$(tar -tzf kratos.tgz | grep -o '^[^/]\+' | head -1)
tar -xzf kratos.tgz -C $PWD/ory/kratos/courier-templates --strip-components=6 "$MAIN_FOLDER/courier/template/courier/builtin/templates"
unset MAIN_FOLDER
rm kratos.tgz
Add template override path to ory/kratos/kratos.yml:
courier:
template_override_path: /etc/config/courier-templates
Map local templates folder into Kratos container:
docker run -it --rm --name kratos ... -v $PWD/ory/kratos/courier-templates:/etc/config/courier-templates oryd/kratos:v1.0.0 serve --config /home/ory/kratos.yml --watch-courier
Version
v1.0.0
Additional Context
No response