changes to the manage-tenant.sh
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user