From d24f633a8e49bc003d648953efcbb222e3074c3f Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Wed, 17 Jul 2019 18:17:27 +0300 Subject: [PATCH] Add easier sub-domains configuration --- server/es_factory.py | 16 ++++++++++++++-- server/init_data.py | 17 +++++++++++------ server/server.py | 7 +++++-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/server/es_factory.py b/server/es_factory.py index 1303bc8..6cfd939 100644 --- a/server/es_factory.py +++ b/server/es_factory.py @@ -1,4 +1,5 @@ from datetime import datetime +from os import getenv from elasticsearch import Elasticsearch, Transport @@ -6,6 +7,12 @@ from config import config log = config.logger(__file__) +OVERRIDE_HOST_ENV_KEY = "ELASTIC_SERVICE_SERVICE_HOST" + +OVERRIDE_HOST = getenv(OVERRIDE_HOST_ENV_KEY) +if OVERRIDE_HOST: + log.info(f"Using override elastic host {OVERRIDE_HOST}") + _instances = {} @@ -33,17 +40,18 @@ def connect(cluster_name): :raises InvalidClusterConfiguration: in case cluster config section misses needed properties """ if cluster_name not in _instances: - cluster_config = _get_cluster_config(cluster_name) + cluster_config = get_cluster_config(cluster_name) hosts = cluster_config.get('hosts', None) if not hosts: raise InvalidClusterConfiguration(cluster_name) + args = cluster_config.get('args', {}) _instances[cluster_name] = Elasticsearch(hosts=hosts, transport_class=Transport, **args) return _instances[cluster_name] -def _get_cluster_config(cluster_name): +def get_cluster_config(cluster_name): """ Returns cluster config for the specified cluster path :param cluster_name: Dot separated cluster path in the configuration file @@ -55,6 +63,10 @@ def _get_cluster_config(cluster_name): if not cluster_config: raise MissingClusterConfiguration(cluster_name) + if OVERRIDE_HOST: + for host in cluster_config.get('hosts', []): + host["host"] = OVERRIDE_HOST + return cluster_config diff --git a/server/init_data.py b/server/init_data.py index 7e0b7f6..85fd3b3 100644 --- a/server/init_data.py +++ b/server/init_data.py @@ -1,13 +1,15 @@ from datetime import datetime + import attr from furl import furl -from database.model.user import User -from database.model.auth import User as AuthUser, Credentials from config import config from database.model.auth import Role +from database.model.auth import User as AuthUser, Credentials from database.model.company import Company +from database.model.user import User from elastic.apply_mappings import apply_mappings_to_host +from es_factory import get_cluster_config from service_repo.auth.fixed_user import FixedUser log = config.logger(__file__) @@ -22,10 +24,9 @@ class MissingElasticConfiguration(Exception): def init_es_data(): - hosts_key = "hosts.elastic.events.hosts" - hosts_config = config.get(hosts_key, None) + hosts_config = get_cluster_config("events").get("hosts") if not hosts_config: - raise MissingElasticConfiguration(hosts_key) + raise MissingElasticConfiguration("for cluster 'events'") for conf in hosts_config: host = furl(scheme="http", host=conf["host"], port=conf["port"]).url @@ -117,7 +118,11 @@ def init_mongo_data(): _ensure_auth_user(user, company_id) if FixedUser.enabled(): + log.info("Fixed users mode is enabled") for user in FixedUser.from_config(): - _ensure_user(user, company_id) + try: + _ensure_user(user, company_id) + except Exception as ex: + log.error(f"Failed creating fixed user {user['name']}: {ex}") except Exception as ex: pass diff --git a/server/server.py b/server/server.py index 3d4cbbf..d8f5d7d 100644 --- a/server/server.py +++ b/server/server.py @@ -16,7 +16,7 @@ from utilities import json from init_data import init_es_data, init_mongo_data app = Flask(__name__, static_url_path="/static") -CORS(app, supports_credentials=True, **config.get("apiserver.cors")) +CORS(app, **config.get("apiserver.cors")) Compress(app) log = config.logger(__file__) @@ -63,7 +63,10 @@ def before_request(): if call.result.cookies: for key, value in call.result.cookies.items(): - response.set_cookie(key, value, **config.get("apiserver.auth.cookies")) + if value is None: + response.set_cookie(key, "", expires=0) + else: + response.set_cookie(key, value, **config.get("apiserver.auth.cookies")) return response except Exception as ex: