Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c77c52271c |
@@ -54,10 +54,34 @@ def _clean_name_fragment(value):
|
||||
return cleaned
|
||||
|
||||
|
||||
def _get_tenant_db(client):
|
||||
def _get_tenant_db(client, tenant_id=None):
|
||||
"""Return the current tenant database for the request, or fall back to default."""
|
||||
try:
|
||||
from tenant import get_tenant_db
|
||||
if tenant_id is None:
|
||||
return get_tenant_db(client)
|
||||
|
||||
tenant_id = str(tenant_id).strip()
|
||||
if tenant_id:
|
||||
try:
|
||||
from tenant import get_tenant_config
|
||||
|
||||
config = get_tenant_config(tenant_id)
|
||||
if isinstance(config, dict):
|
||||
explicit_db = config.get('db') or config.get('db_name')
|
||||
if explicit_db:
|
||||
db_name = str(explicit_db).strip()
|
||||
if db_name and not db_name.startswith('inventar_'):
|
||||
db_name = f'inventar_{db_name}'
|
||||
if db_name:
|
||||
return client[db_name]
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
sanitized = ''.join(c for c in tenant_id.lower() if c.isalnum() or c == '_')
|
||||
if sanitized:
|
||||
return client[f'inventar_{sanitized}']
|
||||
|
||||
return get_tenant_db(client)
|
||||
except Exception:
|
||||
return client[cfg.MONGODB_DB]
|
||||
@@ -479,8 +503,45 @@ def check_nm_pwd(username, password):
|
||||
query = {'$or': [{'Username': username}, {'username': username}]}
|
||||
user_record_fallback = users.find_one(query)
|
||||
if user_record_fallback is None:
|
||||
logger.warning("Kein Benutzer für %r in DB %r gefunden.", dp.encrypt_text(username), db_name)
|
||||
return None
|
||||
if db_name != cfg.MONGODB_DB:
|
||||
default_users = client[cfg.MONGODB_DB]['users']
|
||||
user_record_fallback = default_users.find_one(
|
||||
{'$or': [
|
||||
{'Username': dp.encrypt_text(username)},
|
||||
{'username': dp.encrypt_text(username)},
|
||||
{'Username': username},
|
||||
{'username': username},
|
||||
]}
|
||||
)
|
||||
if user_record_fallback is not None:
|
||||
migrated_record = dict(user_record_fallback)
|
||||
migrated_record.pop('_id', None)
|
||||
users.replace_one(
|
||||
{'$or': [
|
||||
{'Username': migrated_record.get('Username')},
|
||||
{'username': migrated_record.get('username')},
|
||||
]},
|
||||
migrated_record,
|
||||
upsert=True,
|
||||
)
|
||||
logger.warning(
|
||||
"Tenant user %r migrated from default DB %r to tenant DB %r.",
|
||||
dp.encrypt_text(username),
|
||||
cfg.MONGODB_DB,
|
||||
db_name,
|
||||
)
|
||||
user_record = users.find_one(
|
||||
{'$or': [
|
||||
{'Username': migrated_record.get('Username')},
|
||||
{'username': migrated_record.get('username')},
|
||||
]}
|
||||
) or migrated_record
|
||||
else:
|
||||
logger.warning("Kein Benutzer für %r in DB %r gefunden.", dp.encrypt_text(username), db_name)
|
||||
return None
|
||||
else:
|
||||
logger.warning("Kein Benutzer für %r in DB %r gefunden.", dp.encrypt_text(username), db_name)
|
||||
return None
|
||||
else:
|
||||
user_record = user_record_fallback
|
||||
|
||||
@@ -506,6 +567,7 @@ def add_admin(
|
||||
permission_preset='full_access',
|
||||
action_permissions=None,
|
||||
page_permissions=None,
|
||||
tenant_id=None,
|
||||
):
|
||||
"""
|
||||
Add a new user to the database.
|
||||
@@ -515,7 +577,7 @@ def add_admin(
|
||||
|
||||
client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT)
|
||||
try:
|
||||
db = _get_tenant_db(client)
|
||||
db = _get_tenant_db(client, tenant_id)
|
||||
users = db['users']
|
||||
|
||||
permission_defaults = build_default_permission_payload(permission_preset)
|
||||
@@ -561,6 +623,7 @@ def add_user(
|
||||
permission_preset='standard_user',
|
||||
action_permissions=None,
|
||||
page_permissions=None,
|
||||
tenant_id=None,
|
||||
):
|
||||
"""
|
||||
Add a new user to the database.
|
||||
@@ -570,7 +633,7 @@ def add_user(
|
||||
|
||||
client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT)
|
||||
try:
|
||||
db = _get_tenant_db(client)
|
||||
db = _get_tenant_db(client, tenant_id)
|
||||
users = db['users']
|
||||
|
||||
permission_defaults = build_default_permission_payload(permission_preset)
|
||||
|
||||
+22
-2
@@ -206,12 +206,30 @@ import Web.modules.database.user as us
|
||||
tenant_id = sys.argv[1].lower()
|
||||
mode = sys.argv[2]
|
||||
sanitized = "".join(c for c in tenant_id if c.isalnum() or c == "_")
|
||||
db_name = f"inventar_{sanitized}" if sanitized else settings.MONGODB_DB
|
||||
|
||||
us.add_admin("admin", "admin123", "admin", "admin")
|
||||
us.make_admin("admin")
|
||||
client = MongoClient(settings.MONGODB_HOST, settings.MONGODB_PORT)
|
||||
db = client[db_name]
|
||||
users = db["users"]
|
||||
permission_defaults = us.build_default_permission_payload("full_access")
|
||||
admin_doc = {
|
||||
"Username": "admin",
|
||||
"Password": us.hashing("admin123"),
|
||||
"Admin": True,
|
||||
"active_ausleihung": None,
|
||||
"name": dp.encrypt_text("admin"),
|
||||
"last_name": dp.encrypt_text("admin"),
|
||||
"IsStudent": False,
|
||||
"PermissionPreset": permission_defaults["preset"],
|
||||
"ActionPermissions": permission_defaults["actions"],
|
||||
"PagePermissions": permission_defaults["pages"],
|
||||
}
|
||||
users.replace_one({"Username": "admin"}, admin_doc, upsert=True)
|
||||
print("Fallback successfully applied")
|
||||
|
||||
if mode == "trial":
|
||||
client = MongoClient(settings.MONGODB_HOST, settings.MONGODB_PORT)
|
||||
db = client[db_name]
|
||||
db.settings.update_one(
|
||||
{"setting_type": "tenant_trial"},
|
||||
{"$set": {
|
||||
@@ -224,6 +242,8 @@ if mode == "trial":
|
||||
upsert=True,
|
||||
)
|
||||
|
||||
client.close()
|
||||
|
||||
print(f"Tenant {sys.argv[1]} database initialized. Default admin: admin / admin123")
|
||||
PY
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user