#!/usr/bin/env python3 import requests from os import environ from sys import exit from urllib.parse import urljoin MERCHANT_BACKEND_BASE_URL = environ.get("TALER_ENV_MERCHANT_BACKEND") if not MERCHANT_BACKEND_BASE_URL: print("TALER_ENV_MERCHANT_BACKEND not defined. Please source the ~/activate file.") exit(1) TALER_ENV_NAME = environ.get("TALER_ENV_NAME") if not TALER_ENV_NAME: print("TALER_ENV_NAME not defined. Please source the ~/activate file.") exit(1) TALER_PATCH_INSTANCES = environ.get("TALER_PATCH_INSTANCES") TALER_CONFIG_CURRENCY = environ.get("TALER_CONFIG_CURRENCY", "EUR") def expectResponse(response, expected_status_codes): if response.status_code not in expected_status_codes: print("Configuration failed on URL: {}".format(response.url)) print(response.text) exit(1) # Allows for finer grained checks. return response class Instance: def __init__(self, instance_id, config_data, backend_url, is_patch=False): self.instance_id = instance_id self.config_data = config_data self.backend_url = backend_url if not is_patch: # First time instance configuration. self.config_data.update(id=instance_id) self.is_patch = is_patch def get_config_data(self): return self.config_data def get_config_url(self): if not self.is_patch: return urljoin(self.backend_url, "/private/instances") return urljoin(self.backend_url, "/private/instances/{}".format(self.instance_id)) def get_http_method(self): if not self.is_patch: return requests.post return requests.patch blog = Instance( "blog", dict( payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/blog"], name="Blog", address=dict(), jurisdiction=dict(), default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_fee_amortization=3, default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_transfer_delay=dict(d_ms="forever"), default_pay_delay=dict(d_ms="forever") ), MERCHANT_BACKEND_BASE_URL, TALER_PATCH_INSTANCES ) donations = Instance( "donations", dict( payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/donations"], name="Donations", address=dict(), jurisdiction=dict(), default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_fee_amortization=3, default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_transfer_delay=dict(d_ms="forever"), default_pay_delay=dict(d_ms="forever") ), MERCHANT_BACKEND_BASE_URL, TALER_PATCH_INSTANCES ) survey = Instance( "survey", dict( payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/survey"], name="Survey", address=dict(), jurisdiction=dict(), default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_fee_amortization=3, default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_transfer_delay=dict(d_ms="forever"), default_pay_delay=dict(d_ms="forever") ), MERCHANT_BACKEND_BASE_URL, TALER_PATCH_INSTANCES ) pos = Instance( "pos", dict( payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/pos"], name="PoS", address=dict(), jurisdiction=dict(), default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_fee_amortization=3, default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_transfer_delay=dict(d_ms="forever"), default_pay_delay=dict(d_ms="forever") ), MERCHANT_BACKEND_BASE_URL, TALER_PATCH_INSTANCES ) gnunet = Instance( "GNUnet", dict( payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/GNUnet"], name="GNUnet", address=dict(), jurisdiction=dict(), default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_fee_amortization=3, default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_transfer_delay=dict(d_ms="forever"), default_pay_delay=dict(d_ms="forever") ), MERCHANT_BACKEND_BASE_URL, TALER_PATCH_INSTANCES ) taler = Instance( "Taler", dict( payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Taler"], name="Taler", address=dict(), jurisdiction=dict(), default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_fee_amortization=3, default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_transfer_delay=dict(d_ms="forever"), default_pay_delay=dict(d_ms="forever") ), MERCHANT_BACKEND_BASE_URL, TALER_PATCH_INSTANCES ) tor = Instance( "Tor", dict( payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Tor"], name="Tor", address=dict(), jurisdiction=dict(), default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_fee_amortization=3, default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1", default_wire_transfer_delay=dict(d_ms="forever"), default_pay_delay=dict(d_ms="forever") ), MERCHANT_BACKEND_BASE_URL, TALER_PATCH_INSTANCES ) for instance in [blog, donations, pos, tor, taler, gnunet, survey]: expectResponse( instance.get_http_method()( instance.get_config_url(), json=instance.get_config_data(), headers={"Authorization": "apikey sandbox"} ), [204, 409] )