From 76418eec1bae3112530a722b4483c1b1e73fb5ea Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Tue, 9 Jul 2019 00:01:16 +0300 Subject: [PATCH] Add server version api --- server/config/info.py | 20 ++++++++++ server/init_data.py | 85 ++++++++++++++++++++++++++++++++----------- 2 files changed, 83 insertions(+), 22 deletions(-) create mode 100644 server/config/info.py diff --git a/server/config/info.py b/server/config/info.py new file mode 100644 index 0000000..b77297c --- /dev/null +++ b/server/config/info.py @@ -0,0 +1,20 @@ +from functools import lru_cache +from pathlib import Path + +root = Path(__file__).parent.parent + + +@lru_cache() +def get_build_number(): + try: + return (root / "BUILD").read_text().strip() + except FileNotFoundError: + return "" + + +@lru_cache() +def get_version(): + try: + return (root / "VERSION").read_text().strip() + except FileNotFoundError: + return "" diff --git a/server/init_data.py b/server/init_data.py index 7880bce..7e0b7f6 100644 --- a/server/init_data.py +++ b/server/init_data.py @@ -1,11 +1,14 @@ from datetime import datetime +import attr from furl import furl -from database.model.auth import User, Credentials +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.company import Company from elastic.apply_mappings import apply_mappings_to_host +from service_repo.auth.fixed_user import FixedUser log = config.logger(__file__) @@ -44,22 +47,28 @@ def _ensure_company(): return company_id -def _ensure_user(user_data, company_id): - user = User.objects( - credentials__match=Credentials(key=user_data["key"], secret=user_data["secret"]) - ).first() - if user: - return user.id +def _ensure_auth_user(user_data, company_id): + ensure_credentials = {"key", "secret"}.issubset(user_data.keys()) + if ensure_credentials: + user = AuthUser.objects( + credentials__match=Credentials( + key=user_data["key"], secret=user_data["secret"] + ) + ).first() + if user: + return user.id log.info(f"Creating user: {user_data['name']}") - user = User( - id=f"__{user_data['name']}__", + user = AuthUser( + id=user_data.get("id", f"__{user_data['name']}__"), name=user_data["name"], company=company_id, role=user_data["role"], email=user_data["email"], created=datetime.utcnow(), - credentials=[Credentials(key=user_data["key"], secret=user_data["secret"])], + credentials=[Credentials(key=user_data["key"], secret=user_data["secret"])] + if ensure_credentials + else None, ) user.save() @@ -67,16 +76,48 @@ def _ensure_user(user_data, company_id): return user.id -def init_mongo_data(): - company_id = _ensure_company() - users = [ - {"name": "apiserver", "role": Role.system, "email": "apiserver@example.com"}, - {"name": "webserver", "role": Role.system, "email": "webserver@example.com"}, - {"name": "tests", "role": Role.user, "email": "tests@example.com"}, - ] +def _ensure_user(user: FixedUser, company_id: str): + if User.objects(id=user.user_id).first(): + return - for user in users: - credentials = config.get(f"secure.credentials.{user['name']}") - user["key"] = credentials.user_key - user["secret"] = credentials.user_secret - _ensure_user(user, company_id) + data = attr.asdict(user) + data["id"] = user.user_id + data["email"] = f"{user.user_id}@example.com" + data["role"] = Role.user + + _ensure_auth_user( + user_data=data, + company_id=company_id, + ) + + given_name, _, family_name = user.name.partition(" ") + + User( + id=user.user_id, + company=company_id, + name=user.name, + given_name=given_name, + family_name=family_name, + ).save() + + +def init_mongo_data(): + try: + company_id = _ensure_company() + users = [ + {"name": "apiserver", "role": Role.system, "email": "apiserver@example.com"}, + {"name": "webserver", "role": Role.system, "email": "webserver@example.com"}, + {"name": "tests", "role": Role.user, "email": "tests@example.com"}, + ] + + for user in users: + credentials = config.get(f"secure.credentials.{user['name']}") + user["key"] = credentials.user_key + user["secret"] = credentials.user_secret + _ensure_auth_user(user, company_id) + + if FixedUser.enabled(): + for user in FixedUser.from_config(): + _ensure_user(user, company_id) + except Exception as ex: + pass