summaryrefslogtreecommitdiff
path: root/bin/taler-deployment-config-instances
blob: 65cebc8e04f1950ab06505e6dfa7359af6c7d54d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python3

"""
This script makes sure that the merchant backend instances used by the
test/demo environment are created.

We assume that the merchant backend is running, and that the "~/activate"
file has been sourced to provide the right environment variables.
"""

import requests
from os import environ
from sys import exit
from urllib.parse import urljoin

def expect_env(name):
    val = environ.get(name)
    if not val:
        print(f"{name} not defined.  Please source the ~/activate file.")
        exit(1)
    return val


MERCHANT_BACKEND_BASE_URL = expect_env("TALER_ENV_MERCHANT_BACKEND")
TALER_ENV_NAME = expect_env("TALER_ENV_NAME")
TALER_CONFIG_CURRENCY = expect_env("TALER_CONFIG_CURRENCY")
TALER_ENV_FRONTENDS_APITOKEN = expect_env("TALER_ENV_FRONTENDS_APITOKEN")

def ensure_instance(instance_id, name, payto_uris, auth):
    # FIXME: Use auth once the default instance also uses token auth
    instance_response = requests.get(
        urljoin(MERCHANT_BACKEND_BASE_URL, f"private/instances/${instance_id}")
    )
    if instance_response.status_code == 200:
        return
    req = dict(
        id=instance_id,
        name=name,
        payto_uris=payto_uris,
        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"),
        # FIXME: Eventually, this should be an actual secret token
        auth=auth,
    )
    create_resp = requests.post(
        urljoin(MERCHANT_BACKEND_BASE_URL, "private/instances"), json=req
    )
    if create_resp.status_code < 200 or create_resp.status_code >= 300:
        print(f"failed to create instance {instance_id}")
        print(create_resp.text)
        print("trying with PATCH")
        patch_resp = requests.patch(
            urljoin(MERCHANT_BACKEND_BASE_URL, f"private/instances/{instance_id}"), json=req
        )
    if patch_resp.status_code < 200 or patch_resp.status_code >= 300:
        print(f"failed to patch instance {instance_id}")
        print(patch_resp.text)
        exit(1)

ensure_instance(
    "blog",
    name="Blog",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/blog"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "donations",
    name="Donations",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/donations"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "survey",
    name="Survey",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/survey"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "pos",
    name="PoS",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/pos"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "GNUnet",
    name="GNUnet",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/GNUnet"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "Taler",
    name="Taler",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Taler"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "Tor",
    name="Tor",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Tor"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

# Note: this instance has a fixed secret-token, so as to allow anyone to easily
# run their tutorial.
ensure_instance(
    "Tutorial",
    name="Tutorial",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Tutorial"],
    auth=dict(method="token", token="secret-token:sandbox"),
)