ansible-taler-exchange

Ansible playbook to deploy a production Taler Exchange
Log | Files | Refs | README | LICENSE

mock-mfa-email (1590B)


      1 #!/bin/sh
      2 # Development-only email challenger delivery helper.  Challenger provides the
      3 # address as a JSON object in $1 and the MFA message on standard input.
      4 set -eu
      5 
      6 if [ "$#" -ne 1 ]; then
      7   echo "usage: mock-mfa-email ADDRESS_JSON" >&2
      8   exit 64
      9 fi
     10 
     11 # Challenger passes the complete address object to AUTH_COMMAND, for example
     12 # {"CONTACT_EMAIL":"test-01@taler.net"}, rather than just the field value.
     13 # Invalid input is left to the real helper so this wrapper does not change its
     14 # normal error handling.
     15 if ! email_address=$(
     16   printf '%s\n' "$1" |
     17     jq -er \
     18       'if type == "object" and ((.CONTACT_EMAIL | type) == "string") then .CONTACT_EMAIL else empty end' \
     19       2>/dev/null
     20 ); then
     21   exec challenger-send-email "$@"
     22 fi
     23 
     24 # Keep real deliveries real.  Only the reserved staging email addresses
     25 # documented for MyTOPS development testing are captured locally.
     26 case "$email_address" in
     27   test-[0-9][0-9]@taler.net)
     28     ;;
     29   *)
     30     exec challenger-send-email "$@"
     31     ;;
     32 esac
     33 
     34 message_dir=/var/www/mock-mfa
     35 # Keep email-address filenames readable while preventing a supplied address
     36 # from escaping the message directory.
     37 filename=$(LC_ALL=C printf '%s' "$email_address" | tr -c '[:alnum:]@+._-' '_')
     38 
     39 # Files must be readable by nginx through the challenger-mock-mfa group.  Write
     40 # atomically so the web server never exposes a partially-written MFA message.
     41 umask 007
     42 tmpfile=$(mktemp "$message_dir/.${filename}.XXXXXX")
     43 trap 'rm -f "$tmpfile"' EXIT HUP INT TERM
     44 chmod 0640 "$tmpfile"
     45 cat >"$tmpfile"
     46 mv -f "$tmpfile" "$message_dir/$filename.txt"
     47 trap - EXIT HUP INT TERM