2020-03-05 12:54:34 +00:00
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
from config import config
|
|
|
|
from database.model.auth import Role
|
|
|
|
from service_repo.auth.fixed_user import FixedUser
|
|
|
|
from .migration import _apply_migrations
|
|
|
|
from .pre_populate import PrePopulate
|
|
|
|
from .user import ensure_fixed_user, _ensure_auth_user, _ensure_backend_user
|
|
|
|
from .util import _ensure_company, _ensure_default_queue, _ensure_uuid
|
|
|
|
|
|
|
|
log = config.logger(__package__)
|
|
|
|
|
|
|
|
|
|
|
|
def init_mongo_data():
|
|
|
|
try:
|
|
|
|
empty_dbs = _apply_migrations(log)
|
|
|
|
|
|
|
|
_ensure_uuid()
|
|
|
|
|
|
|
|
company_id = _ensure_company(log)
|
|
|
|
|
|
|
|
_ensure_default_queue(company_id)
|
|
|
|
|
|
|
|
if empty_dbs and config.get("apiserver.mongo.pre_populate.enabled", False):
|
|
|
|
zip_file = config.get("apiserver.mongo.pre_populate.zip_file")
|
|
|
|
if not zip_file or not Path(zip_file).is_file():
|
|
|
|
msg = f"Failed pre-populating database: invalid zip file {zip_file}"
|
|
|
|
if config.get("apiserver.mongo.pre_populate.fail_on_error", False):
|
|
|
|
log.error(msg)
|
|
|
|
raise ValueError(msg)
|
|
|
|
else:
|
|
|
|
log.warning(msg)
|
|
|
|
else:
|
|
|
|
|
|
|
|
user_id = _ensure_backend_user(
|
|
|
|
"__allegroai__", company_id, "Allegro.ai"
|
|
|
|
)
|
|
|
|
|
|
|
|
PrePopulate.import_from_zip(zip_file, user_id=user_id)
|
|
|
|
|
2020-06-01 08:41:43 +00:00
|
|
|
fixed_mode = FixedUser.enabled()
|
|
|
|
|
2020-06-01 08:55:40 +00:00
|
|
|
for user, credentials in config.get("secure.credentials", {}).items():
|
|
|
|
user_data = {
|
|
|
|
"name": user,
|
|
|
|
"role": credentials.role,
|
|
|
|
"email": f"{user}@example.com",
|
|
|
|
"key": credentials.user_key,
|
|
|
|
"secret": credentials.user_secret,
|
|
|
|
}
|
|
|
|
revoke = fixed_mode and credentials.get("revoke_in_fixed_mode", False)
|
|
|
|
user_id = _ensure_auth_user(user_data, company_id, log=log, revoke=revoke)
|
|
|
|
if credentials.role == Role.user:
|
|
|
|
_ensure_backend_user(user_id, company_id, credentials.display_name)
|
2020-03-05 12:54:34 +00:00
|
|
|
|
2020-06-01 08:41:43 +00:00
|
|
|
if fixed_mode:
|
2020-03-05 12:54:34 +00:00
|
|
|
log.info("Fixed users mode is enabled")
|
|
|
|
FixedUser.validate()
|
|
|
|
for user in FixedUser.from_config():
|
|
|
|
try:
|
|
|
|
ensure_fixed_user(user, company_id, log=log)
|
|
|
|
except Exception as ex:
|
|
|
|
log.error(f"Failed creating fixed user {user.name}: {ex}")
|
|
|
|
except Exception as ex:
|
|
|
|
log.exception("Failed initializing mongodb")
|