From 62edf51dbd92f834110b9821ab8ed8b274b14be3 Mon Sep 17 00:00:00 2001 From: Sergi Delgado Segura Date: Tue, 7 Apr 2020 12:10:49 +0200 Subject: [PATCH] Adds API HOST and PORT as configurable parameters. Renames them to API_CONNECT and API_PORT for consistency. --- cli/README.md | 8 ++++---- cli/__init__.py | 4 ++-- cli/help.py | 4 ++-- cli/template.conf | 4 ++-- cli/teos_cli.py | 12 ++++++------ teos/__init__.py | 4 ++-- teos/api.py | 8 +++++--- teos/template.conf | 2 ++ teos/teosd.py | 19 +++++++++++++++++-- test/cli/unit/test_teos_cli.py | 2 +- test/teos/e2e/test_basic_e2e.py | 2 +- test/teos/unit/test_api.py | 10 ++++------ 12 files changed, 48 insertions(+), 31 deletions(-) diff --git a/cli/README.md b/cli/README.md index ca9051c..9ba2e38 100644 --- a/cli/README.md +++ b/cli/README.md @@ -15,8 +15,8 @@ Refer to [INSTALL.md](INSTALL.md) #### Global options -- `-s, --server`: API server where to send the requests. Defaults to 'localhost' (modifiable in conf file). -- `-p, --port` : API port where to send the requests. Defaults to '9814' (modifiable in conf file). +- `--apiconnect`: API server where to send the requests. Defaults to 'localhost' (modifiable in conf file). +- `-apiport` : API port where to send the requests. Defaults to '9814' (modifiable in conf file). - `-h --help`: shows a list of commands or help for a specific command. #### Commands @@ -180,10 +180,10 @@ By default, `teos_cli` will connect to your local instance (running on localhost - mainnet endpoint = `teosmainnet.pisa.watch` ### Connecting to the mainnet instance -Add `-s https://teosmainnet.pisa.watch` to your calls, for example: +Add `--apiconnect https://teosmainnet.pisa.watch` to your calls, for example: ``` -python teos_cli.py -s https://teosmainnet.pisa.watch add_appointment -f dummy_appointment_data.json +python teos_cli.py --apiconnect https://teosmainnet.pisa.watch add_appointment -f dummy_appointment_data.json ``` You can also change the config file to avoid specifying the server every time: diff --git a/cli/__init__.py b/cli/__init__.py index dfc1301..9316550 100644 --- a/cli/__init__.py +++ b/cli/__init__.py @@ -6,8 +6,8 @@ LOG_PREFIX = "cli" # Load config fields DEFAULT_CONF = { - "TEOS_SERVER": {"value": "localhost", "type": str}, - "TEOS_PORT": {"value": 9814, "type": int}, + "API_CONNECT": {"value": "localhost", "type": str}, + "API_PORT": {"value": 9814, "type": int}, "LOG_FILE": {"value": "teos_cli.log", "type": str, "path": True}, "APPOINTMENTS_FOLDER_NAME": {"value": "appointment_receipts", "type": str, "path": True}, "CLI_PUBLIC_KEY": {"value": "cli_pk.der", "type": str, "path": True}, diff --git a/cli/help.py b/cli/help.py index 4ecf172..3635db7 100644 --- a/cli/help.py +++ b/cli/help.py @@ -8,8 +8,8 @@ def show_usage(): "\n\tget_appointment \tGets json formatted data about an appointment from the tower." "\n\thelp \t\t\tShows a list of commands or help for a specific command." "\n\nGLOBAL OPTIONS:" - "\n\t-s, --server \tAPI server where to send the requests. Defaults to 'localhost' (modifiable in conf file)." - "\n\t-p, --port \tAPI port where to send the requests. Defaults to '9814' (modifiable in conf file)." + "\n\t--apiconnect \tAPI server where to send the requests. Defaults to 'localhost' (modifiable in conf file)." + "\n\t--apiport \tAPI port where to send the requests. Defaults to '9814' (modifiable in conf file)." "\n\t-d, --debug \tshows debug information and stores it in teos_cli.log." "\n\t-h --help \tshows this message." ) diff --git a/cli/template.conf b/cli/template.conf index b53fb45..0a1e7a8 100644 --- a/cli/template.conf +++ b/cli/template.conf @@ -1,4 +1,4 @@ [teos] -TEOS_SERVER = localhost -TEOS_PORT = 9814 +api_connect = localhost +api_port = 9814 diff --git a/cli/teos_cli.py b/cli/teos_cli.py index c508379..7799e4e 100644 --- a/cli/teos_cli.py +++ b/cli/teos_cli.py @@ -373,7 +373,7 @@ def main(command, args, command_line_conf): setup_logging(config.get("LOG_FILE"), LOG_PREFIX) # Set the teos url - teos_url = "{}:{}".format(config.get("TEOS_SERVER"), config.get("TEOS_PORT")) + teos_url = "{}:{}".format(config.get("API_CONNECT"), config.get("API_PORT")) # If an http or https prefix if found, leaves the server as is. Otherwise defaults to http. if not teos_url.startswith("http"): teos_url = "http://" + teos_url @@ -438,17 +438,17 @@ if __name__ == "__main__": commands = ["register", "add_appointment", "get_appointment", "help"] try: - opts, args = getopt(argv[1:], "s:p:h", ["server", "port", "help"]) + opts, args = getopt(argv[1:], "h", ["apiconnect=", "apiport=", "help"]) for opt, arg in opts: - if opt in ["-s", "--server"]: + if opt in ["--apiconnect"]: if arg: - command_line_conf["TEOS_SERVER"] = arg + command_line_conf["API_CONNECT"] = arg - if opt in ["-p", "--port"]: + if opt in ["--apiport"]: if arg: try: - command_line_conf["TEOS_PORT"] = int(arg) + command_line_conf["API_PORT"] = int(arg) except ValueError: sys.exit("port must be an integer") diff --git a/teos/__init__.py b/teos/__init__.py index 811e16d..52ae177 100644 --- a/teos/__init__.py +++ b/teos/__init__.py @@ -1,13 +1,13 @@ import os -HOST = "localhost" -PORT = 9814 DATA_DIR = os.path.expanduser("~/.teos/") CONF_FILE_NAME = "teos.conf" LOG_PREFIX = "teos" # Default conf fields DEFAULT_CONF = { + "API_CONNECT": {"value": "localhost", "type": str}, + "API_PORT": {"value": 9814, "type": int}, "BTC_RPC_USER": {"value": "user", "type": str}, "BTC_RPC_PASSWORD": {"value": "passwd", "type": str}, "BTC_RPC_CONNECT": {"value": "127.0.0.1", "type": str}, diff --git a/teos/api.py b/teos/api.py index 0859c86..02bfb79 100644 --- a/teos/api.py +++ b/teos/api.py @@ -3,8 +3,8 @@ import logging from math import ceil from flask import Flask, request, abort, jsonify +from teos import LOG_PREFIX import teos.errors as errors -from teos import HOST, PORT, LOG_PREFIX from teos.inspector import InspectionFailed from teos.gatekeeper import NotEnoughSlots, IdentificationFailure @@ -79,7 +79,9 @@ class API: access. """ - def __init__(self, inspector, watcher, gatekeeper): + def __init__(self, host, port, inspector, watcher, gatekeeper): + self.host = host + self.port = port self.inspector = inspector self.watcher = watcher self.gatekeeper = gatekeeper @@ -341,4 +343,4 @@ class API: logging.getLogger("werkzeug").setLevel(logging.ERROR) os.environ["WERKZEUG_RUN_MAIN"] = "true" - app.run(host=HOST, port=PORT) + app.run(host=self.host, port=self.port) diff --git a/teos/template.conf b/teos/template.conf index 1989de6..035ce8b 100644 --- a/teos/template.conf +++ b/teos/template.conf @@ -11,6 +11,8 @@ feed_connect = 127.0.0.1 feed_port = 28332 [teos] +api_connect = localhost +api_port = 9814 subscription_slots = 100 max_appointments = 1000000 expiry_delta = 6 diff --git a/teos/teosd.py b/teos/teosd.py index 3287581..c7d04ba 100644 --- a/teos/teosd.py +++ b/teos/teosd.py @@ -154,7 +154,8 @@ def main(command_line_conf): # FIXME: 92-block-data-during-bootstrap-db chain_monitor.monitor_chain() gatekeeper = Gatekeeper(UsersDBM(config.get("USERS_DB_PATH")), config.get("DEFAULT_SLOTS")) - API(Inspector(block_processor, config.get("MIN_TO_SELF_DELAY")), watcher, gatekeeper).start() + inspector = Inspector(block_processor, config.get("MIN_TO_SELF_DELAY")) + API(config.get("API_CONNECT"), config.get("API_PORT"), inspector, watcher, gatekeeper).start() except Exception as e: logger.error("An error occurred: {}. Shutting down".format(e)) exit(1) @@ -167,9 +168,23 @@ if __name__ == "__main__": opts, _ = getopt( argv[1:], "h", - ["btcnetwork=", "btcrpcuser=", "btcrpcpassword=", "btcrpcconnect=", "btcrpcport=", "datadir=", "help"], + [ + "apiconnect=", + "apiport=", + "btcnetwork=", + "btcrpcuser=", + "btcrpcpassword=", + "btcrpcconnect=", + "btcrpcport=", + "datadir=", + "help", + ], ) for opt, arg in opts: + if opt in ["--apiconnect"]: + command_line_conf["API_CONNECT"] = arg + if opt in ["--apiport"]: + command_line_conf["API_PORT"] = arg if opt in ["--btcnetwork"]: command_line_conf["BTC_NETWORK"] = arg if opt in ["--btcrpcuser"]: diff --git a/test/cli/unit/test_teos_cli.py b/test/cli/unit/test_teos_cli.py index fc6419b..1f11ed1 100644 --- a/test/cli/unit/test_teos_cli.py +++ b/test/cli/unit/test_teos_cli.py @@ -30,7 +30,7 @@ dummy_teos_sk = PrivateKey.from_int(2) dummy_teos_pk = dummy_teos_sk.public_key another_sk = PrivateKey.from_int(3) -teos_url = "http://{}:{}".format(config.get("TEOS_SERVER"), config.get("TEOS_PORT")) +teos_url = "http://{}:{}".format(config.get("API_CONNECT"), config.get("API_PORT")) add_appointment_endpoint = "{}/add_appointment".format(teos_url) register_endpoint = "{}/register".format(teos_url) get_appointment_endpoint = "{}/get_appointment".format(teos_url) diff --git a/test/teos/e2e/test_basic_e2e.py b/test/teos/e2e/test_basic_e2e.py index 5c1dc86..b4db1aa 100644 --- a/test/teos/e2e/test_basic_e2e.py +++ b/test/teos/e2e/test_basic_e2e.py @@ -26,7 +26,7 @@ from test.teos.e2e.conftest import ( cli_config = get_config(DATA_DIR, CONF_FILE_NAME, DEFAULT_CONF) common.cryptographer.logger = Logger(actor="Cryptographer", log_name_prefix="") -teos_base_endpoint = "http://{}:{}".format(cli_config.get("TEOS_SERVER"), cli_config.get("TEOS_PORT")) +teos_base_endpoint = "http://{}:{}".format(cli_config.get("API_CONNECT"), cli_config.get("API_PORT")) teos_add_appointment_endpoint = "{}/add_appointment".format(teos_base_endpoint) teos_get_appointment_endpoint = "{}/get_appointment".format(teos_base_endpoint) diff --git a/test/teos/unit/test_api.py b/test/teos/unit/test_api.py index 210240f..db59a3b 100644 --- a/test/teos/unit/test_api.py +++ b/test/teos/unit/test_api.py @@ -3,7 +3,6 @@ from shutil import rmtree from binascii import hexlify from teos.api import API -from teos import HOST, PORT import teos.errors as errors from teos.watcher import Watcher from teos.inspector import Inspector @@ -22,8 +21,9 @@ from common.constants import ( ENCRYPTED_BLOB_MAX_SIZE_HEX, ) +config = get_config() -TEOS_API = "http://{}:{}".format(HOST, PORT) +TEOS_API = "http://{}:{}".format(config.get("API_HOST"), config.get("API_PORT")) register_endpoint = "{}/register".format(TEOS_API) add_appointment_endpoint = "{}/add_appointment".format(TEOS_API) get_appointment_endpoint = "{}/get_appointment".format(TEOS_API) @@ -38,8 +38,6 @@ TWO_SLOTS_BLOTS = "A" * ENCRYPTED_BLOB_MAX_SIZE_HEX + "AA" appointments = {} locator_dispute_tx_map = {} -config = get_config() - client_sk, client_pk = generate_keypair() compressed_client_pk = hexlify(client_pk.format(compressed=True)).decode("utf-8") @@ -62,8 +60,8 @@ def api(db_manager, carrier, block_processor, gatekeeper, run_bitcoind): responder = Responder(db_manager, carrier, block_processor) watcher = Watcher(db_manager, block_processor, responder, sk.to_der(), MAX_APPOINTMENTS, config.get("EXPIRY_DELTA")) - - api = API(Inspector(block_processor, config.get("MIN_TO_SELF_DELAY")), watcher, gatekeeper) + inspector = Inspector(block_processor, config.get("MIN_TO_SELF_DELAY")) + api = API(config.get("API_HOST"), config.get("API_PORT"), inspector, watcher, gatekeeper) return api