"""
认证服务 - 处理用户认证和安全验证相关功能
"""
import logging
from urllib.parse import urlparse, urljoin
from flask import request
from flask_login import current_user, login_user

from src.clients import db
from src.models import User

logger = logging.getLogger(__name__)


def is_safe_url(target):
    """
    当前未被使用，保留接口。

    检查目标 URL 是否安全(同源)
    
    用于防止开放重定向攻击
    
    Args:
        target: 目标 URL 字符串
    
    Returns:
        bool: 如果 URL 安全返回 True,否则返回 False
    """
    ref_url = urlparse(request.host_url)
    test_url = urlparse(urljoin(request.host_url, target))
    return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc


def auto_login():
    """
    自动登录默认用户
    
    仅当没有其他用户已登录时执行自动登录。
    如果默认用户 'admin' 不存在,则自动创建。
    
    Returns:
        User: 登录的用户对象
    """
    from src.flask_ext import bcrypt
    
    if current_user.is_authenticated:
        return current_user
        
    user = User.query.filter_by(username='admin').first()
    if not user:
        # 如果默认用户不存在,则创建
        hashed_password = bcrypt.generate_password_hash('changeme').decode('utf-8')
        user = User(
            id=str(__import__('uuid').uuid4()),
            username='admin',
            email='259908888@qq.com',
            password=hashed_password,
            is_admin=True  # 设置为管理员以获得完全访问权限
        )
        db.session.add(user)
        db.session.commit()
        logger.info("已创建默认用户 'admin',密码为 'changeme'")
    
    # 登录用户
    login_user(user)
    return user
