mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 11:16:47 +00:00
The TCP and TLS compute forms never show the stored password, so the field is empty on every edit. Saving the form without typing the password again replaced it with nothing, and the next connection to the host failed to authenticate. An empty password field on an edit now keeps the stored password; a new value replaces it.
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
from django import forms
|
|
from django.utils.translation import gettext_lazy as _
|
|
from vrtManager.connection import CONN_SOCKET, CONN_SSH, CONN_TCP, CONN_TLS
|
|
|
|
from computes.models import Compute
|
|
|
|
from .validators import validate_hostname
|
|
|
|
|
|
class KeepPasswordMixin:
|
|
"""The form never shows the stored password: left empty on an edit, it
|
|
stays as it is."""
|
|
|
|
def clean_password(self):
|
|
return self.cleaned_data["password"] or self.instance.password
|
|
|
|
|
|
class TcpComputeForm(KeepPasswordMixin, forms.ModelForm):
|
|
hostname = forms.CharField(validators=[validate_hostname])
|
|
type = forms.IntegerField(widget=forms.HiddenInput, initial=CONN_TCP)
|
|
|
|
class Meta:
|
|
model = Compute
|
|
widgets = {"password": forms.PasswordInput()}
|
|
fields = "__all__"
|
|
|
|
|
|
class SshComputeForm(forms.ModelForm):
|
|
hostname = forms.CharField(validators=[validate_hostname], label=_("FQDN/IP"))
|
|
type = forms.IntegerField(widget=forms.HiddenInput, initial=CONN_SSH)
|
|
|
|
class Meta:
|
|
model = Compute
|
|
exclude = ["password"]
|
|
|
|
|
|
class TlsComputeForm(KeepPasswordMixin, forms.ModelForm):
|
|
hostname = forms.CharField(validators=[validate_hostname])
|
|
type = forms.IntegerField(widget=forms.HiddenInput, initial=CONN_TLS)
|
|
|
|
class Meta:
|
|
model = Compute
|
|
widgets = {"password": forms.PasswordInput()}
|
|
fields = "__all__"
|
|
|
|
|
|
class SocketComputeForm(forms.ModelForm):
|
|
hostname = forms.CharField(widget=forms.HiddenInput, initial="localhost")
|
|
type = forms.IntegerField(widget=forms.HiddenInput, initial=CONN_SOCKET)
|
|
|
|
class Meta:
|
|
model = Compute
|
|
fields = ["name", "details", "hostname", "type"]
|