From: Rob Crittenden Date: Fri, 17 Jul 2015 18:07:16 +0000 (-0400) Subject: Mark the service as readonly in the UI in authpam plugin X-Git-Tag: v1.1.0~46 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=commitdiff_plain;h=bfa0e5d352ea0d6217d31c952f35cd527264e4fa Mark the service as readonly in the UI in authpam plugin Update the Option class to take a readonly keyword argument, defaulting to False. Extend its subclasses to pass this value along. The page template will add the disabled keyword to input and textarea if a config option is marked as readonly. https://fedorahosted.org/ipsilon/ticket/6 Signed-off-by: Rob Crittenden Reviewed-by: Patrick Uiterwijk --- diff --git a/ipsilon/login/authpam.py b/ipsilon/login/authpam.py index 1a34f8f..ed2e72b 100644 --- a/ipsilon/login/authpam.py +++ b/ipsilon/login/authpam.py @@ -65,7 +65,9 @@ for authentication. """ pconfig.String( 'service name', 'The name of the PAM service used to authenticate.', - 'remote'), + 'remote', + readonly=True, + ), pconfig.String( 'username text', 'Text used to ask for the username at login time.', diff --git a/ipsilon/util/config.py b/ipsilon/util/config.py index 622820c..18349a4 100644 --- a/ipsilon/util/config.py +++ b/ipsilon/util/config.py @@ -70,18 +70,21 @@ class Config(Log): class Option(Log): - def __init__(self, name, description): + def __init__(self, name, description, readonly=False): self.name = name self.description = description self._default_value = None self._assigned_value = None + self._readonly = readonly def __repr__(self): - return "%s: %s {%s}, value = %s [def: %s]" % (self.__class__, - self.name, - self.description, - self._assigned_value, - self._default_value) + return "%s: %s {%s}, value = %s [def: %s] readonly=%s" % ( + self.__class__, + self.name, + self.description, + self._assigned_value, + self._default_value, + self._readonly) def __str__(self): return '%s=%s' % (self.name, self.get_value()) @@ -113,11 +116,14 @@ class Option(Log): raise ValueError('Value must be string') self._assigned_value = value + def is_readonly(self): + return self._readonly + class String(Option): - def __init__(self, name, description, default_value=None): - super(String, self).__init__(name, description) + def __init__(self, name, description, default_value=None, readonly=False): + super(String, self).__init__(name, description, readonly=readonly) self._default_value = str(default_value) def set_value(self, value): @@ -132,8 +138,9 @@ class String(Option): class Template(Option): - def __init__(self, name, description, default_template=None): - super(Template, self).__init__(name, description) + def __init__(self, name, description, default_template=None, + readonly=False): + super(Template, self).__init__(name, description, readonly=readonly) self._default_value = str(default_template) def set_value(self, value): @@ -154,8 +161,8 @@ class Template(Option): class List(Option): - def __init__(self, name, description, default_list=None): - super(List, self).__init__(name, description) + def __init__(self, name, description, default_list=None, readonly=False): + super(List, self).__init__(name, description, readonly=readonly) if default_list: self._default_value = default_list else: @@ -226,8 +233,9 @@ class MappingList(ComplexList): class Choice(Option): - def __init__(self, name, description, allowed=None, default=None): - super(Choice, self).__init__(name, description) + def __init__(self, name, description, allowed=None, default=None, + readonly=False): + super(Choice, self).__init__(name, description, readonly=readonly) if allowed: self._allowed_values = list(allowed) else: @@ -295,8 +303,9 @@ class Choice(Option): class Pick(Option): - def __init__(self, name, description, allowed, default_value): - super(Pick, self).__init__(name, description) + def __init__(self, name, description, allowed, default_value, + readonly=False): + super(Pick, self).__init__(name, description, readonly=readonly) self._allowed_values = list(allowed) if default_value not in self._allowed_values: raise ValueError('The default value is not in the allowed list') @@ -320,9 +329,11 @@ class Pick(Option): class Condition(Pick): - def __init__(self, name, description, default_value=False): + def __init__(self, name, description, default_value=False, + readonly=False): super(Condition, self).__init__(name, description, - [True, False], default_value) + [True, False], default_value, + readonly=readonly) def import_value(self, value): self._assigned_value = value == 'True' diff --git a/templates/admin/option_config.html b/templates/admin/option_config.html index 74eede5..1f921f6 100644 --- a/templates/admin/option_config.html +++ b/templates/admin/option_config.html @@ -59,9 +59,16 @@ {%- if value %} value="{{ value }}" {%- endif -%} + {% if v.is_readonly() -%} + disabled + {%- endif -%} > {% elif v.__class__.__name__ == 'List' -%} -