84 lines
3.5 KiB
Python
84 lines
3.5 KiB
Python
from django.views import View
|
|
from django.shortcuts import render, redirect
|
|
from django.contrib import messages
|
|
from .forms import ArrSettingsForm, MailSettingsForm, AccountForm
|
|
from .models import AppSettings
|
|
from django.http import JsonResponse
|
|
import requests
|
|
|
|
def test_connection(request):
|
|
kind = request.GET.get("kind") # "sonarr" | "radarr"
|
|
url = (request.GET.get("url") or "").strip()
|
|
key = (request.GET.get("key") or "").strip()
|
|
if kind not in ("sonarr", "radarr"):
|
|
return JsonResponse({"ok": False, "error": "Ungültiger Typ"}, status=400)
|
|
if not url or not key:
|
|
return JsonResponse({"ok": False, "error": "URL und API-Key erforderlich"}, status=400)
|
|
|
|
try:
|
|
r = requests.get(
|
|
f"{url.rstrip('/')}/api/v3/system/status",
|
|
headers={"X-Api-Key": key},
|
|
timeout=5
|
|
)
|
|
if r.status_code == 200:
|
|
return JsonResponse({"ok": True})
|
|
return JsonResponse({"ok": False, "error": f"HTTP {r.status_code}"})
|
|
except requests.RequestException as e:
|
|
return JsonResponse({"ok": False, "error": str(e)})
|
|
|
|
class SettingsView(View):
|
|
template_name = "settingspanel/settings.html"
|
|
|
|
def get(self, request):
|
|
cfg = AppSettings.current()
|
|
return render(request, self.template_name, {
|
|
"arr_form": ArrSettingsForm(initial={
|
|
"sonarr_url": cfg.sonarr_url or "",
|
|
"sonarr_api_key": cfg.sonarr_api_key or "",
|
|
"radarr_url": cfg.radarr_url or "",
|
|
"radarr_api_key": cfg.radarr_api_key or "",
|
|
}),
|
|
"mail_form": MailSettingsForm(initial={
|
|
"mail_host": cfg.mail_host or "",
|
|
"mail_port": cfg.mail_port or "",
|
|
"mail_secure": cfg.mail_secure or "",
|
|
"mail_user": cfg.mail_user or "",
|
|
"mail_password": cfg.mail_password or "",
|
|
"mail_from": cfg.mail_from or "",
|
|
}),
|
|
"account_form": AccountForm(initial={
|
|
"username": cfg.acc_username or "",
|
|
"email": cfg.acc_email or "",
|
|
}),
|
|
})
|
|
|
|
def post(self, request):
|
|
arr_form = ArrSettingsForm(request.POST)
|
|
mail_form = MailSettingsForm(request.POST)
|
|
acc_form = AccountForm(request.POST)
|
|
if not (arr_form.is_valid() and mail_form.is_valid() and acc_form.is_valid()):
|
|
return render(request, self.template_name, {
|
|
"arr_form": arr_form, "mail_form": mail_form, "account_form": acc_form
|
|
})
|
|
|
|
cfg = AppSettings.current()
|
|
cfg.sonarr_url = arr_form.cleaned_data["sonarr_url"] or None
|
|
cfg.sonarr_api_key = arr_form.cleaned_data["sonarr_api_key"] or None
|
|
cfg.radarr_url = arr_form.cleaned_data["radarr_url"] or None
|
|
cfg.radarr_api_key = arr_form.cleaned_data["radarr_api_key"] or None
|
|
|
|
cfg.mail_host = mail_form.cleaned_data["mail_host"] or None
|
|
cfg.mail_port = mail_form.cleaned_data["mail_port"] or None
|
|
cfg.mail_secure = mail_form.cleaned_data["mail_secure"] or ""
|
|
cfg.mail_user = mail_form.cleaned_data["mail_user"] or None
|
|
cfg.mail_password = mail_form.cleaned_data["mail_password"] or None
|
|
cfg.mail_from = mail_form.cleaned_data["mail_from"] or None
|
|
|
|
cfg.acc_username = acc_form.cleaned_data["username"] or None
|
|
cfg.acc_email = acc_form.cleaned_data["email"] or None
|
|
|
|
cfg.save()
|
|
messages.success(request, "Einstellungen gespeichert (DB).")
|
|
return redirect("settingspanel:index")
|