Files
CyberPanel/userManagment/homeDirectoryUtils.py

149 lines
5.1 KiB
Python
Raw Normal View History

#!/usr/local/CyberCP/bin/python
import os
import sys
from django.db import models
from loginSystem.models import Administrator
from .models import HomeDirectory, UserHomeMapping
from .homeDirectoryManager import HomeDirectoryManager
class HomeDirectoryUtils:
"""
Utility functions for getting user home directories
"""
@staticmethod
def getUserHomeDirectory(username):
"""
Get the home directory path for a specific user
Returns the home directory path or None if not found
"""
try:
user = Administrator.objects.get(userName=username)
try:
mapping = UserHomeMapping.objects.get(user=user)
return mapping.home_directory.path
except UserHomeMapping.DoesNotExist:
# Fallback to default home directory
default_home = HomeDirectory.objects.filter(is_default=True).first()
if default_home:
return default_home.path
else:
return HomeDirectoryManager.getBestHomeDirectory()
except Administrator.DoesNotExist:
return None
@staticmethod
def getUserHomeDirectoryObject(username):
"""
Get the home directory object for a specific user
Returns the HomeDirectory object or None if not found
"""
try:
user = Administrator.objects.get(userName=username)
try:
mapping = UserHomeMapping.objects.get(user=user)
return mapping.home_directory
except UserHomeMapping.DoesNotExist:
# Fallback to default home directory
return HomeDirectory.objects.filter(is_default=True).first()
except Administrator.DoesNotExist:
return None
@staticmethod
def getWebsitePath(domain, username=None):
"""
Get the website path for a domain, using the user's home directory
"""
if username:
home_path = HomeDirectoryUtils.getUserHomeDirectory(username)
else:
home_path = HomeDirectoryManager.getBestHomeDirectory()
if not home_path:
home_path = '/home' # Fallback
return os.path.join(home_path, domain)
@staticmethod
def getPublicHtmlPath(domain, username=None):
"""
Get the public_html path for a domain
"""
website_path = HomeDirectoryUtils.getWebsitePath(domain, username)
return os.path.join(website_path, 'public_html')
@staticmethod
def getLogsPath(domain, username=None):
"""
Get the logs path for a domain
"""
website_path = HomeDirectoryUtils.getWebsitePath(domain, username)
return os.path.join(website_path, 'logs')
@staticmethod
def updateUserHomeDirectory(username, new_home_directory_id):
"""
Update a user's home directory
"""
try:
user = Administrator.objects.get(userName=username)
home_dir = HomeDirectory.objects.get(id=new_home_directory_id)
# Update or create mapping
mapping, created = UserHomeMapping.objects.get_or_create(
user=user,
defaults={'home_directory': home_dir}
)
if not created:
mapping.home_directory = home_dir
mapping.save()
return True, "Home directory updated successfully"
except Administrator.DoesNotExist:
return False, "User not found"
except HomeDirectory.DoesNotExist:
return False, "Home directory not found"
except Exception as e:
return False, str(e)
@staticmethod
def getAllUsersInHomeDirectory(home_directory_id):
"""
Get all users assigned to a specific home directory
"""
try:
home_dir = HomeDirectory.objects.get(id=home_directory_id)
mappings = UserHomeMapping.objects.filter(home_directory=home_dir)
return [mapping.user for mapping in mappings]
except HomeDirectory.DoesNotExist:
return []
@staticmethod
def getHomeDirectoryUsageStats():
"""
Get usage statistics for all home directories
"""
home_dirs = HomeDirectory.objects.filter(is_active=True)
stats = []
for home_dir in home_dirs:
user_count = UserHomeMapping.objects.filter(home_directory=home_dir).count()
available_space = home_dir.get_available_space()
total_space = home_dir.get_total_space()
usage_percentage = home_dir.get_usage_percentage()
stats.append({
'id': home_dir.id,
'name': home_dir.name,
'path': home_dir.path,
'user_count': user_count,
'available_space': available_space,
'total_space': total_space,
'usage_percentage': usage_percentage,
'is_default': home_dir.is_default
})
return stats