Bump version to v1.7.1
This commit is contained in:
parent
a46d919118
commit
d65c55d315
10 changed files with 1520 additions and 75 deletions
51
utils/config.py
Normal file
51
utils/config.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import os
|
||||
from typing import Dict, List
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
||||
def validate_env() -> Dict:
|
||||
"""Validiert sicherheitsrelevante .env-Variablen.
|
||||
|
||||
Returns dict with: ok: bool, errors: List[str], warnings: List[str], summary: Dict[str, bool]
|
||||
"""
|
||||
errors: List[str] = []
|
||||
warnings: List[str] = []
|
||||
|
||||
wp_base_url = os.getenv("WP_BASE_URL", "").strip()
|
||||
wp_user = os.getenv("WP_USERNAME", "").strip()
|
||||
wp_pass = os.getenv("WP_PASSWORD", "").strip()
|
||||
wp_b64 = os.getenv("WP_AUTH_BASE64", "").strip()
|
||||
openai_key = os.getenv("OPENAI_API_KEY", "").strip()
|
||||
|
||||
# WP_BASE_URL Pflicht
|
||||
if not wp_base_url:
|
||||
errors.append("WP_BASE_URL fehlt in .env")
|
||||
elif not (wp_base_url.startswith("http://") or wp_base_url.startswith("https://")):
|
||||
errors.append("WP_BASE_URL muss mit http:// oder https:// beginnen")
|
||||
|
||||
# Auth-Creds: entweder Base64 ODER Username+Password
|
||||
if not wp_b64 and not (wp_user and wp_pass):
|
||||
errors.append("Entweder WP_AUTH_BASE64 oder WP_USERNAME + WP_PASSWORD in .env setzen")
|
||||
|
||||
# Empfehlungen
|
||||
if not wp_b64 and (wp_user and wp_pass):
|
||||
warnings.append("WP_AUTH_BASE64 nicht gesetzt – Empfehlung: Base64 nutzen (Application Password)")
|
||||
|
||||
if not openai_key:
|
||||
warnings.append("OPENAI_API_KEY ist nicht gesetzt – Umschreibungsfunktion ist deaktiviert")
|
||||
|
||||
summary = {
|
||||
"WP_BASE_URL": bool(wp_base_url),
|
||||
"WP_USERNAME": bool(wp_user),
|
||||
"WP_PASSWORD": bool(wp_pass),
|
||||
"WP_AUTH_BASE64": bool(wp_b64),
|
||||
"OPENAI_API_KEY": bool(openai_key),
|
||||
}
|
||||
|
||||
return {"ok": len(errors) == 0, "errors": errors, "warnings": warnings, "summary": summary}
|
||||
|
||||
|
||||
__all__ = ["validate_env"]
|
||||
|
||||
|
|
@ -11,17 +11,16 @@ from dotenv import load_dotenv
|
|||
|
||||
load_dotenv()
|
||||
|
||||
# WordPress API Konfiguration
|
||||
WP_BASE_URL = os.getenv("WP_BASE_URL", "https://vanityontour.de")
|
||||
WP_USERNAME = os.getenv("WP_USERNAME", "ogiertz")
|
||||
WP_PASSWORD = os.getenv("WP_PASSWORD", "whNEx9aZCIUXViV89Z3e7Z03")
|
||||
WP_AUTH_BASE64 = os.getenv("WP_AUTH_BASE64", "b2dpZXJ0ejp3aE5FeDlhWkNJVVhWaVY4OVozZTdaMDM=")
|
||||
WP_API_ENDPOINT = f"{WP_BASE_URL}/wp-json/wp/v2"
|
||||
# WordPress API Konfiguration – ausschließlich aus .env
|
||||
WP_BASE_URL = os.getenv("WP_BASE_URL")
|
||||
WP_USERNAME = os.getenv("WP_USERNAME")
|
||||
WP_PASSWORD = os.getenv("WP_PASSWORD")
|
||||
WP_AUTH_BASE64 = os.getenv("WP_AUTH_BASE64")
|
||||
|
||||
# Request-Konfiguration
|
||||
REQUEST_TIMEOUT = 30
|
||||
MAX_RETRIES = 3
|
||||
USER_AGENT = 'RSS-Feed-Manager/1.6.1'
|
||||
USER_AGENT = 'RSS-Feed-Manager/1.7.x'
|
||||
|
||||
class WordPressUploader:
|
||||
"""
|
||||
|
|
@ -30,41 +29,43 @@ class WordPressUploader:
|
|||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.base_url = WP_BASE_URL
|
||||
self.api_endpoint = WP_API_ENDPOINT
|
||||
# Basis-URL validieren und Endpunkt bauen
|
||||
if not WP_BASE_URL:
|
||||
raise ValueError("WP_BASE_URL nicht gesetzt. Bitte .env konfigurieren.")
|
||||
self.base_url = WP_BASE_URL.rstrip('/')
|
||||
self.api_endpoint = f"{self.base_url}/wp-json/wp/v2"
|
||||
|
||||
# Zugangsdaten (aus .env)
|
||||
self.username = WP_USERNAME
|
||||
self.password = WP_PASSWORD
|
||||
self.auth_base64 = WP_AUTH_BASE64
|
||||
|
||||
|
||||
if not self.auth_base64 and not (self.username and self.password):
|
||||
raise ValueError("WordPress-Authentifizierung nicht konfiguriert. WP_AUTH_BASE64 oder WP_USERNAME + WP_PASSWORD setzen.")
|
||||
|
||||
# Session für bessere Performance
|
||||
self.session = requests.Session()
|
||||
|
||||
|
||||
# Authentifizierung über Authorization Header mit Base64
|
||||
if self.auth_base64:
|
||||
# Verwende bereitgestellten Base64-String
|
||||
self.session.headers.update({
|
||||
'Authorization': f'Basic {self.auth_base64}',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json'
|
||||
})
|
||||
logging.info("✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String")
|
||||
logging.info("✅ WordPress-Authentifizierung: Base64-String verwendet")
|
||||
else:
|
||||
# Fallback: Generiere Base64 aus Username/Password
|
||||
if self.username and self.password:
|
||||
credentials = f"{self.username}:{self.password}"
|
||||
encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8')
|
||||
self.session.headers.update({
|
||||
'Authorization': f'Basic {encoded_credentials}',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json'
|
||||
})
|
||||
logging.info("✅ WordPress-Authentifizierung: Base64 aus Username/Password generiert")
|
||||
else:
|
||||
logging.error("❌ WordPress-Authentifizierung: Weder Base64-String noch Username/Password verfügbar")
|
||||
raise ValueError("WordPress-Authentifizierung nicht konfiguriert")
|
||||
|
||||
credentials = f"{self.username}:{self.password}"
|
||||
encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8')
|
||||
self.session.headers.update({
|
||||
'Authorization': f'Basic {encoded_credentials}',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json'
|
||||
})
|
||||
logging.info("✅ WordPress-Authentifizierung: Base64 aus Username/Password generiert")
|
||||
|
||||
# Standard-Kategorie ID ermitteln
|
||||
self.default_category_id = self._get_default_category_id()
|
||||
|
||||
|
|
@ -335,11 +336,7 @@ class WordPressUploader:
|
|||
Testet die Verbindung zur WordPress API mit Base64-Authentifizierung
|
||||
"""
|
||||
try:
|
||||
logging.info("🔧 Teste WordPress-API-Verbindung mit Base64-Auth...")
|
||||
|
||||
# Debug: Auth-Header prüfen
|
||||
auth_header = self.session.headers.get('Authorization', 'Nicht gesetzt')
|
||||
logging.info(f"🔑 Authorization Header: {auth_header[:20]}..." if len(auth_header) > 20 else f"🔑 Authorization Header: {auth_header}")
|
||||
logging.info("🔧 Teste WordPress-API-Verbindung...")
|
||||
|
||||
# Einfache Abfrage der Kategorien als Test
|
||||
response = self.session.get(
|
||||
|
|
@ -349,7 +346,6 @@ class WordPressUploader:
|
|||
)
|
||||
|
||||
logging.info(f"📡 API-Response Status: {response.status_code}")
|
||||
logging.info(f"📡 API-Response Headers: {dict(response.headers)}")
|
||||
|
||||
if response.status_code == 200:
|
||||
logging.info("✅ WordPress-API-Verbindung erfolgreich")
|
||||
|
|
@ -465,4 +461,4 @@ def upload_single_article_to_wordpress(article: Dict) -> Tuple[bool, str, Option
|
|||
return False, connection_msg, None
|
||||
|
||||
# Artikel hochladen
|
||||
return uploader.upload_article(article)
|
||||
return uploader.upload_article(article)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue