exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 70aac6857983ce6aaf1efff2e4f194f83f7e3525
parent 2ad078803a2960455949d2f1de2925c006b53d7a
Author: Florian Dold <dold@taler.net>
Date:   Tue, 28 Jul 2026 12:37:49 +0200

kyclogic: fall back to the default rules when current_rules is absent

An account on the exchange's default rules has no rule set of its own, and
the helpers either crashed on the null or silently emitted rules without any
limits; now they request default_rules as well and fail safe if given neither.

Diffstat:
Msrc/kyclogic/taler-exchange-helper-measure-challenger-email-context-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-challenger-postal-context-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-challenger-sms-context-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-clear-continue | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-inform-investigate | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-preserve-but-investigate | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-preserve-set-expiration | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-tops-3rdparty-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-tops-address-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-tops-kyx-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-tops-postal-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-tops-sms-check | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-update-from-context | 3++-
Msrc/kyclogic/taler-exchange-helper-measure-validate-accepted-tos | 3++-
14 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/src/kyclogic/taler-exchange-helper-measure-challenger-email-context-check b/src/kyclogic/taler-exchange-helper-measure-challenger-email-context-check @@ -56,6 +56,7 @@ do # Need attributes, context and current_rules. echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -84,7 +85,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"context":.context}') # Get address data CONTACT_EMAIL=$(echo "$INPUTS" | jq -r '.context.CONTACT_EMAIL') diff --git a/src/kyclogic/taler-exchange-helper-measure-challenger-postal-context-check b/src/kyclogic/taler-exchange-helper-measure-challenger-postal-context-check @@ -55,6 +55,7 @@ do # Need attributes, context and current_rules. echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -85,7 +86,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"context":.context}') # Get address data J_CONTACT_NAME=$(echo "$INPUTS" | jq '.context.FULL_NAME') diff --git a/src/kyclogic/taler-exchange-helper-measure-challenger-sms-context-check b/src/kyclogic/taler-exchange-helper-measure-challenger-sms-context-check @@ -56,6 +56,7 @@ do # Need attributes, context and current_rules. echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -84,7 +85,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"context":.context}') # Get address data CONTACT_PHONE=$(echo "$INPUTS" | jq -r '.context.CONTACT_PHONE') diff --git a/src/kyclogic/taler-exchange-helper-measure-clear-continue b/src/kyclogic/taler-exchange-helper-measure-clear-continue @@ -56,6 +56,7 @@ do # Need context and current_rules. echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -89,7 +90,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"attributes":.attributes,"context":.context}') # Get current rules. CURRENT_RULES=$(echo "$INPUTS" | jq '.current_rules // null') diff --git a/src/kyclogic/taler-exchange-helper-measure-inform-investigate b/src/kyclogic/taler-exchange-helper-measure-inform-investigate @@ -57,6 +57,7 @@ do i) # Need current rules. echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -85,7 +86,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -CURRENT_RULES=$(jq '.current_rules') +CURRENT_RULES=$(jq '.current_rules // .default_rules // error("neither current_rules nor default_rules provided")') # Finally, output the new rules. # See https://docs.taler.net/taler-kyc-manual.html#tsref-type-AmlOutcome diff --git a/src/kyclogic/taler-exchange-helper-measure-preserve-but-investigate b/src/kyclogic/taler-exchange-helper-measure-preserve-but-investigate @@ -57,6 +57,7 @@ do i) # Need current rules. echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -85,7 +86,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -CURRENT_RULES=$(jq '.current_rules') +CURRENT_RULES=$(jq '.current_rules // .default_rules // error("neither current_rules nor default_rules provided")') # Finally, output the new rules. # See https://docs.taler.net/taler-kyc-manual.html#tsref-type-AmlOutcome diff --git a/src/kyclogic/taler-exchange-helper-measure-preserve-set-expiration b/src/kyclogic/taler-exchange-helper-measure-preserve-set-expiration @@ -58,6 +58,7 @@ do # Need context and current_rules. echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -88,7 +89,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"context":.context}') # Get context values. EXPIRATION_TIME=$(echo "$INPUTS" | jq '.context.expiration_time // null') diff --git a/src/kyclogic/taler-exchange-helper-measure-tops-3rdparty-check b/src/kyclogic/taler-exchange-helper-measure-tops-3rdparty-check @@ -58,6 +58,7 @@ do # Need context and current_rules. echo "attributes" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -86,7 +87,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"attributes":.attributes}') # Check form ID, must be 'vqf-902.11' FORM_ID=$(echo "$INPUTS" | jq -r '.attributes.FORM_ID') diff --git a/src/kyclogic/taler-exchange-helper-measure-tops-address-check b/src/kyclogic/taler-exchange-helper-measure-tops-address-check @@ -58,6 +58,7 @@ do # Need context and current_rules. echo "attributes" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -86,7 +87,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"attributes":.attributes}') # Get address data CUSTOMER_TYPE=$(echo "$INPUTS" | jq -r '.attributes.CUSTOMER_TYPE // null') diff --git a/src/kyclogic/taler-exchange-helper-measure-tops-kyx-check b/src/kyclogic/taler-exchange-helper-measure-tops-kyx-check @@ -59,6 +59,7 @@ do # Need context and current_rules. echo "attributes" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -87,7 +88,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"attributes":.attributes}') # Check form ID, must be 'vqf-902.11' diff --git a/src/kyclogic/taler-exchange-helper-measure-tops-postal-check b/src/kyclogic/taler-exchange-helper-measure-tops-postal-check @@ -60,6 +60,7 @@ do echo "attributes" echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -87,7 +88,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"attributes":.attributes,"context":.context}') # Get country number. COUNTRY=$(echo "$INPUTS" | jq -r '.attributes.ADDRESS_COUNTRY // null') diff --git a/src/kyclogic/taler-exchange-helper-measure-tops-sms-check b/src/kyclogic/taler-exchange-helper-measure-tops-sms-check @@ -58,6 +58,7 @@ do echo "attributes" echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -85,7 +86,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"attributes":.attributes,"context":.context}') # Get phone number. PHONE_NUMBER=$(echo "$INPUTS" | jq -r '.attributes.CONTACT_PHONE // null') diff --git a/src/kyclogic/taler-exchange-helper-measure-update-from-context b/src/kyclogic/taler-exchange-helper-measure-update-from-context @@ -58,6 +58,7 @@ do # Need context and current_rules. echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -90,7 +91,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"context":.context,"current_rules":.current_rules}') +INPUTS=$(jq '{"context":.context,"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided"))}') # Get context values. EXPIRATION_TIME=$(echo "$INPUTS" | jq '.context.expiration_time // .current_rules.expiration_time // null') diff --git a/src/kyclogic/taler-exchange-helper-measure-validate-accepted-tos b/src/kyclogic/taler-exchange-helper-measure-validate-accepted-tos @@ -59,6 +59,7 @@ do echo "attributes" echo "context" echo "current_rules" + echo "default_rules" exit 0 ;; r) @@ -89,7 +90,7 @@ fi # for the full JSON with possible inputs. # First, extract inputs we need -INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes,"context":.context}') +INPUTS=$(jq '{"current_rules":(.current_rules // .default_rules // error("neither current_rules nor default_rules provided")),"attributes":.attributes,"context":.context}') # Check form ID, must be 'accept-tos' FORM_ID=$(echo "$INPUTS" | jq -r '.attributes.FORM_ID')