kratos icon indicating copy to clipboard operation
kratos copied to clipboard

Add FlowId variable for use in Courier templates for use with API implementations and custom/native UI

Open kulogix opened this issue 1 year ago • 1 comments

Preflight checklist

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

<I>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

kulogix avatar Jul 18 '23 04:07 kulogix

That makes sense to me!

aeneasr avatar Jul 18 '23 07:07 aeneasr