mirror of
https://github.com/Dictionarry-Hub/profilarr.git
synced 2026-01-02 11:47:46 -05:00
203 lines
7.1 KiB
Python
203 lines
7.1 KiB
Python
from datetime import timedelta
|
|
import os
|
|
import subprocess
|
|
import logging
|
|
import logging.config
|
|
from .config import config
|
|
from .db import get_secret_key, update_pat_status
|
|
|
|
|
|
def setup_logging():
|
|
log_config = {
|
|
'version': 1,
|
|
'disable_existing_loggers': False,
|
|
'formatters': {
|
|
'detailed': {
|
|
'format':
|
|
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
'datefmt': '%Y-%m-%d %H:%M:%S'
|
|
}
|
|
},
|
|
'handlers': {
|
|
'console': {
|
|
'class': 'logging.StreamHandler',
|
|
'level': 'DEBUG',
|
|
'formatter': 'detailed',
|
|
'stream': 'ext://sys.stdout'
|
|
},
|
|
|
|
# general_file handler
|
|
'file': {
|
|
'class': 'logging.handlers.RotatingFileHandler',
|
|
'level': 'INFO',
|
|
'formatter': 'detailed',
|
|
'filename': config.GENERAL_LOG_FILE,
|
|
'maxBytes': 1048576, # 1MB
|
|
'backupCount': 20
|
|
},
|
|
|
|
# importarr_file handler
|
|
'importarr_file': {
|
|
'class': 'logging.handlers.RotatingFileHandler',
|
|
'level': 'DEBUG',
|
|
'formatter': 'detailed',
|
|
'filename': config.IMPORTARR_LOG_FILE,
|
|
'maxBytes': 1048576,
|
|
'backupCount': 20
|
|
},
|
|
|
|
# hash_file handler
|
|
'hash_file': {
|
|
'class': 'logging.handlers.RotatingFileHandler',
|
|
'level': 'INFO',
|
|
'formatter': 'detailed',
|
|
'filename': config.HASH_LOG_FILE,
|
|
'maxBytes': 1048576, # 1MB
|
|
'backupCount': 20
|
|
}
|
|
},
|
|
'root': {
|
|
'level': 'DEBUG',
|
|
'handlers': ['console', 'file']
|
|
},
|
|
'loggers': {
|
|
# The 'importarr' logger uses all three handlers
|
|
'importarr': {
|
|
'level': 'DEBUG',
|
|
'handlers': ['console', 'file', 'importarr_file'],
|
|
'propagate': False
|
|
},
|
|
# The 'importer' logger (new import module) - reduce verbosity
|
|
'importer': {
|
|
'level': 'WARNING',
|
|
'handlers': ['file'],
|
|
'propagate': False
|
|
},
|
|
|
|
# The 'hash' logger uses all three handlers
|
|
'hash': {
|
|
'level': 'INFO',
|
|
'handlers': ['console', 'file', 'hash_file'],
|
|
'propagate': False
|
|
},
|
|
|
|
# Example: Keep these if you want separate loggers
|
|
'werkzeug': {
|
|
'level': 'INFO',
|
|
'handlers': ['console', 'file'],
|
|
'propagate': False
|
|
},
|
|
'flask': {
|
|
'level': 'INFO',
|
|
'handlers': ['console', 'file'],
|
|
'propagate': False
|
|
},
|
|
'git': {
|
|
'level': 'ERROR',
|
|
'handlers': ['console', 'file'],
|
|
'propagate': False
|
|
},
|
|
'urllib3': {
|
|
'level': 'WARNING',
|
|
'handlers': ['console', 'file'],
|
|
'propagate': False
|
|
},
|
|
'urllib3.connectionpool': {
|
|
'level': 'WARNING',
|
|
'handlers': ['console', 'file'],
|
|
'propagate': False
|
|
}
|
|
}
|
|
}
|
|
|
|
# Make sure the log directory exists
|
|
os.makedirs(os.path.dirname(config.GENERAL_LOG_FILE), exist_ok=True)
|
|
|
|
# Apply the configuration
|
|
logging.config.dictConfig(log_config)
|
|
|
|
# Create a logger for this module
|
|
logger = logging.getLogger(__name__)
|
|
logger.info("Logging system initialized")
|
|
|
|
return logger
|
|
|
|
|
|
def init_git_user():
|
|
"""Initialize Git user configuration for the repository and update PAT status."""
|
|
logger = logging.getLogger(__name__)
|
|
logger.info("Starting Git user configuration")
|
|
|
|
try:
|
|
from .config import config
|
|
repo_path = config.DB_DIR
|
|
|
|
git_name = os.environ.get('GIT_USER_NAME', 'Profilarr')
|
|
git_email = os.environ.get('GIT_USER_EMAIL',
|
|
'profilarr@dictionarry.com')
|
|
|
|
logger.debug(
|
|
f"Retrieved Git config - Name: {git_name}, Email: {git_email}")
|
|
|
|
if git_name == 'Profilarr' or git_email == 'profilarr@dictionarry.com':
|
|
logger.info("Using default Git user configuration")
|
|
|
|
# Set repository-level Git configuration if repo exists
|
|
if os.path.exists(os.path.join(repo_path, '.git')):
|
|
logger.info(f"Setting git config for repository at {repo_path}")
|
|
subprocess.run(['git', '-C', repo_path, 'config', '--local', 'user.name', git_name],
|
|
check=True)
|
|
subprocess.run(['git', '-C', repo_path, 'config', '--local', 'user.email', git_email],
|
|
check=True)
|
|
# Add safe.directory to prevent ownership issues
|
|
subprocess.run(['git', '-C', repo_path, 'config', '--local', '--add', 'safe.directory', repo_path],
|
|
check=True)
|
|
else:
|
|
logger.warning(f"No git repository found at {repo_path}, skipping git config")
|
|
|
|
# Update PAT status in database
|
|
update_pat_status()
|
|
|
|
# Verify configuration if repository exists
|
|
if os.path.exists(os.path.join(repo_path, '.git')):
|
|
configured_name = subprocess.run(
|
|
['git', '-C', repo_path, 'config', '--local', 'user.name'],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True).stdout.strip()
|
|
configured_email = subprocess.run(
|
|
['git', '-C', repo_path, 'config', '--local', 'user.email'],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True).stdout.strip()
|
|
|
|
if configured_name != git_name or configured_email != git_email:
|
|
logger.error("Git configuration verification failed")
|
|
return False, "Git configuration verification failed"
|
|
|
|
logger.info("Git user configuration completed successfully")
|
|
return True, "Git configuration successful"
|
|
|
|
except subprocess.CalledProcessError as e:
|
|
logger.error(f"Error configuring git: {str(e)}", exc_info=True)
|
|
return False, f"Failed to configure git: {str(e)}"
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error configuring git: {str(e)}",
|
|
exc_info=True)
|
|
return False, f"Unexpected error configuring git: {str(e)}"
|
|
|
|
|
|
def init_app_config(app):
|
|
"""Initialize Flask app configuration."""
|
|
logger = logging.getLogger(__name__)
|
|
|
|
logger.info("Initializing app configuration")
|
|
app.config['SECRET_KEY'] = get_secret_key()
|
|
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(
|
|
days=config.SESSION_LIFETIME_DAYS)
|
|
app.config['SESSION_COOKIE_SECURE'] = config.SESSION_COOKIE_SECURE
|
|
app.config['SESSION_COOKIE_HTTPONLY'] = config.SESSION_COOKIE_HTTPONLY
|
|
app.config['SESSION_COOKIE_SAMESITE'] = config.SESSION_COOKIE_SAMESITE
|
|
|
|
logger.info("App configuration initialized")
|