jumpserver/apps/assets/forms.py

141 lines
5.6 KiB
Python
Raw Normal View History

2016-08-14 14:10:10 +00:00
# coding:utf-8
from django import forms
2016-09-08 10:12:53 +00:00
from .models import IDC, Asset, AssetGroup, AdminUser, SystemUser
2016-09-04 11:12:31 +00:00
from django.utils.translation import gettext_lazy as _
2016-08-14 14:10:10 +00:00
class AssetForm(forms.ModelForm):
class Meta:
model = Asset
fields = [
2016-09-04 10:06:14 +00:00
"ip", "other_ip", "remote_card_ip", "hostname", "port", "groups", "username", "password",
2016-09-08 10:12:53 +00:00
"idc", "mac_address", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos",
2016-08-14 14:10:10 +00:00
"number", "status", "type", "env", "sn", "is_active", "comment"
]
2016-09-04 11:12:31 +00:00
widgets = {
2016-09-06 07:09:00 +00:00
'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select asset groups')}),
2016-09-04 11:12:31 +00:00
}
2016-08-14 14:10:10 +00:00
class AssetGroupForm(forms.ModelForm):
2016-09-08 14:54:05 +00:00
# See AdminUserForm comment same it
2016-09-05 17:09:03 +00:00
assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(),
label=_('Asset'),
required=False,
widget=forms.SelectMultiple(
attrs={'class': 'select2', 'data-placeholder': _('Select assets')})
)
2016-09-05 16:49:42 +00:00
def __init__(self, *args, **kwargs):
if kwargs.get('instance'):
initial = kwargs.get('initial', {})
initial['assets'] = kwargs['instance'].assets.all()
super(AssetGroupForm, self).__init__(*args, **kwargs)
def _save_m2m(self):
super(AssetGroupForm, self)._save_m2m()
assets = self.cleaned_data['assets']
self.instance.assets.clear()
self.instance.assets.add(*tuple(assets))
2016-08-14 14:10:10 +00:00
class Meta:
model = AssetGroup
fields = [
"name", "comment"
]
2016-09-07 12:05:42 +00:00
help_texts = {
'name': '* required',
}
2016-08-14 14:10:10 +00:00
2016-09-07 12:51:33 +00:00
class IDCForm(forms.ModelForm):
2016-09-08 14:54:05 +00:00
# See AdminUserForm comment same it
2016-09-07 12:51:33 +00:00
assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(),
label=_('Asset'),
required=False,
widget=forms.SelectMultiple(
attrs={'class': 'select2', 'data-placeholder': _('Select assets')})
)
def __init__(self, *args, **kwargs):
if kwargs.get('instance'):
initial = kwargs.get('initial', {})
initial['assets'] = kwargs['instance'].assets.all()
super(IDCForm, self).__init__(*args, **kwargs)
def _save_m2m(self):
super(IDCForm, self)._save_m2m()
assets = self.cleaned_data['assets']
self.instance.assets.clear()
self.instance.assets.add(*tuple(assets))
2016-08-14 14:10:10 +00:00
class Meta:
model = IDC
fields = ['name', "bandwidth", "operator", 'contact', 'phone', 'address', 'network', 'comment']
widgets = {
2016-09-07 12:51:33 +00:00
'name': forms.TextInput(attrs={'placeholder': _('Name')}),
2016-08-14 14:10:10 +00:00
'network': forms.Textarea(
attrs={'placeholder': '192.168.1.0/24\n192.168.2.0/24'})
}
2016-09-07 16:59:00 +00:00
2016-09-08 10:12:53 +00:00
class AdminUserForm(forms.ModelForm):
2016-09-08 14:54:05 +00:00
# Admin user assets define, let user select, save it in form not in view
2016-09-07 16:59:00 +00:00
assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(),
label=_('Asset'),
required=False,
widget=forms.SelectMultiple(
attrs={'class': 'select2', 'data-placeholder': _('Select assets')})
)
2016-09-08 14:54:05 +00:00
# Form field name can not start with `_`, so redefine it,
2016-09-08 10:12:53 +00:00
password = forms.CharField(widget=forms.PasswordInput, max_length=100, min_length=8, strip=True,
help_text=_('If also set private key, use that first'), required=False)
2016-09-08 14:54:05 +00:00
# Need use upload private key file except paste private key content
2016-09-08 10:12:53 +00:00
private_key_file = forms.FileField(required=False)
2016-09-07 16:59:00 +00:00
def __init__(self, *args, **kwargs):
2016-09-08 14:54:05 +00:00
# When update a admin user instance, initial it
2016-09-07 16:59:00 +00:00
if kwargs.get('instance'):
initial = kwargs.get('initial', {})
initial['assets'] = kwargs['instance'].assets.all()
2016-09-08 10:12:53 +00:00
super(AdminUserForm, self).__init__(*args, **kwargs)
2016-09-07 16:59:00 +00:00
def _save_m2m(self):
2016-09-08 14:54:05 +00:00
# Save assets relation with admin user
2016-09-08 10:12:53 +00:00
super(AdminUserForm, self)._save_m2m()
2016-09-07 16:59:00 +00:00
assets = self.cleaned_data['assets']
self.instance.assets.clear()
self.instance.assets.add(*tuple(assets))
2016-09-08 10:12:53 +00:00
def save(self, commit=True):
2016-09-08 14:54:05 +00:00
# Because we define custom field, so we need rewrite :method: `save`
2016-09-08 10:12:53 +00:00
admin_user = super(AdminUserForm, self).save(commit=commit)
password = self.cleaned_data['password']
private_key_file = self.cleaned_data['private_key_file']
if password:
admin_user.password = password
print(password)
2016-09-08 14:54:05 +00:00
# Todo: Validate private key file, and generate public key
2016-09-08 10:12:53 +00:00
if private_key_file:
print(private_key_file)
admin_user.private_key = private_key_file.read()
admin_user.save()
return self.instance
2016-09-07 16:59:00 +00:00
class Meta:
2016-09-08 10:12:53 +00:00
model = AdminUser
fields = ['name', 'username', 'password', 'private_key_file', 'as_default', 'comment']
2016-09-07 16:59:00 +00:00
widgets = {
'name': forms.TextInput(attrs={'placeholder': _('Name')}),
2016-09-08 10:12:53 +00:00
'username': forms.TextInput(attrs={'placeholder': _('Username')}),
}
help_texts = {
'name': '* required',
'username': '* required',
}