mirror of https://github.com/jumpserver/jumpserver
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
# coding: utf-8
|
|
#
|
|
|
|
import json
|
|
from django import forms
|
|
from django.db import transaction
|
|
from django.conf import settings
|
|
|
|
from ..models import Setting
|
|
from common.fields import FormEncryptMixin
|
|
|
|
__all__ = ['BaseForm']
|
|
|
|
|
|
class BaseForm(forms.Form):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
for name, field in self.fields.items():
|
|
value = getattr(settings, name, None)
|
|
if value is None: # and django_value is None:
|
|
continue
|
|
|
|
if value is not None:
|
|
if isinstance(value, dict):
|
|
value = json.dumps(value)
|
|
initial_value = value
|
|
else:
|
|
initial_value = ''
|
|
field.initial = initial_value
|
|
|
|
def save(self, category="default"):
|
|
if not self.is_bound:
|
|
raise ValueError("Form is not bound")
|
|
|
|
# db_settings = Setting.objects.all()
|
|
if not self.is_valid():
|
|
raise ValueError(self.errors)
|
|
|
|
with transaction.atomic():
|
|
for name, value in self.cleaned_data.items():
|
|
field = self.fields[name]
|
|
if isinstance(field.widget, forms.PasswordInput) and not value:
|
|
continue
|
|
# if value == getattr(settings, name):
|
|
# continue
|
|
|
|
encrypted = True if isinstance(field, FormEncryptMixin) else False
|
|
try:
|
|
setting = Setting.objects.get(name=name)
|
|
except Setting.DoesNotExist:
|
|
setting = Setting()
|
|
setting.name = name
|
|
setting.category = category
|
|
setting.encrypted = encrypted
|
|
setting.cleaned_value = value
|
|
setting.save()
|
|
|