qwen_agent/webdav_production.py
2025-11-08 00:48:01 +08:00

111 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
生产环境WebDAV配置支持域名部署
"""
import os
from pathlib import Path
from wsgidav.wsgidav_app import WsgiDAVApp
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.http_authenticator import HTTPAuthenticator
class DomainDomainController:
"""支持域名的域控制器"""
def __init__(self, wsgidav_app, config):
self.wsgidav_app = wsgidav_app
self.config = config
def get_domain_realm(self, path_info, environ):
return "WebDAV"
def require_authentication(self, realm, environ):
# 生产环境可以启用认证,开发环境暂时关闭
return False
def is_authenticated_user(self, realm, user_name, environ):
return True
def auth_user(self, realm, user_name, password, environ):
return True
def supports_http_digest_auth(self):
return True
def is_share_anonymous(self, share):
return True
def create_production_webdav_app(domain=None, ssl=False):
"""
创建生产环境WebDAV应用
Args:
domain: 域名,如 'yourdomain.com'
ssl: 是否使用HTTPS
"""
# 确保projects目录存在
projects_dir = Path("projects")
projects_dir.mkdir(exist_ok=True)
# 根据域名配置host
if domain:
host = "0.0.0.0" # 生产环境监听所有接口
scheme = "https" if ssl else "http"
server_url = f"{scheme}://{domain}"
else:
host = "localhost"
server_url = "http://localhost"
# 配置WebDAV
config = {
"host": host,
"port": 8001,
"provider_mapping": {
"/": FilesystemProvider(str(projects_dir))
},
"http_authenticator": {
"domain_controller": DomainDomainController,
"accept_basic": True,
"accept_digest": True,
"default_to_digest": False,
},
"verbose": 2 if domain else 1, # 生产环境更详细日志
"dir_browser": {
"enable": True,
"response_trailer": True,
"davmount_path": "/webdav",
"ms_mount_path": "/webdav",
},
# 添加CORS支持
"middleware": [
{
"class": "wsgidav.middleware.cors.CorsMiddleware",
"options": {
"cors_origin": "*",
"cors_methods": "GET, POST, PUT, DELETE, OPTIONS, PROPFIND, MKCOL, COPY, MOVE",
"cors_headers": "Authorization, Content-Type, Depth, Destination, Overwrite",
}
}
]
}
# 创建应用
app = WsgiDAVApp(config)
print(f"WebDAV Server configured for domain: {domain or 'localhost'}")
print(f"Server URL: {server_url}:8001/webdav")
return app
if __name__ == "__main__":
# 可以通过环境变量配置域名
domain = os.environ.get("WEBDAV_DOMAIN")
ssl_enabled = os.environ.get("WEBDAV_SSL", "false").lower() == "true"
app = create_production_webdav_app(domain, ssl_enabled)
from wsgidav.server.run_server import run_server
run_server(app)