X-Git-Url: https://git.llucax.com/software/pymin.git/blobdiff_plain/f01930169323ca7519e41cf898e0b8143ac7a3f5..b9f71ad8a238ed93c7e515cc9602d11700f183ae:/pymin/services/proxy/__init__.py diff --git a/pymin/services/proxy/__init__.py b/pymin/services/proxy/__init__.py index 54ff379..0577938 100644 --- a/pymin/services/proxy/__init__.py +++ b/pymin/services/proxy/__init__.py @@ -5,12 +5,12 @@ from os import path from pymin.seqtools import Sequence from pymin.dispatcher import Handler, handler, HandlerError from pymin.services.util import Restorable, ConfigWriter, InitdHandler, \ - TransactionalHandler, ParametersHandler + TransactionalHandler, ParametersHandler, \ + DictSubHandler import crypt -__ALL__ = ('ProxyHandler', 'Error', 'HostError', 'HostAlreadyExistsError', - 'HostNotFoundError') +__ALL__ = ('ProxyHandler', 'Error') class Error(HandlerError): r""" @@ -23,93 +23,37 @@ class Error(HandlerError): """ pass -class HostError(Error, KeyError): - r""" - HostError(hostname) -> HostError instance - - This is the base exception for all host related errors. - """ - - def __init__(self, hostname): - r"Initialize the object. See class documentation for more info." - self.message = u'Host error: "%s"' % hostname - -class HostAlreadyExistsError(HostError): - r""" - HostAlreadyExistsError(hostname) -> HostAlreadyExistsError instance - - This exception is raised when trying to add a hostname that already exists. - """ - - def __init__(self, hostname): - r"Initialize the object. See class documentation for more info." - self.message = u'Host already exists: "%s"' % hostname - -class HostNotFoundError(HostError): - r""" - HostNotFoundError(hostname) -> HostNotFoundError instance - - This exception is raised when trying to operate on a hostname that doesn't - exists. - """ +class Host(Sequence): + def __init__(self,ip): + self.ip = ip + def as_tuple(self): + return (self.ip,) - def __init__(self, hostname): - r"Initialize the object. See class documentation for more info." - self.message = u'Host not found: "%s"' % hostname +# TODO convert to a SetSubHandler +class HostHandler(DictSubHandler): -class Host(Sequence): + handler_help = u"Manage proxy hosts" - def __init__(self,ip): - self.ip = ip + _dict_subhandler_attr = 'hosts' + _dict_subhandler_class = Host +class User(Sequence): + def __init__(self, name, password): + self.name = name + self.password = crypt.crypt(password,'BA') def as_tuple(self): - return (self.ip) + return (self.name, self.password) + def update(self, password=None): + if password is not None: + self.password = crypt.crypt(password,'BA') -class HostHandler(Handler): +class UserHandler(DictSubHandler): - handler_help = u"Manage proxy hosts" + handler_help = u"Manage proxy users" - def __init__(self, hosts): - self.hosts = hosts - - @handler(u'Adds a host') - def add(self, ip): - if ip in self.hosts: - raise HostAlreadyExistsError(ip) - self.hosts[ip] = Host(ip) - - @handler(u'Deletes a host') - def delete(self, ip): - if not ip in self.hosts: - raise HostNotFoundError(ip) - del self.hosts[ip] - - @handler(u'Shows all hosts') - def list(self): - return self.hosts.keys() - - @handler(u'Get information about all hosts') - def show(self): - return self.hosts.items() - - -class UserHandler(Handler): - - def __init__(self, users): - self.users = users - - @handler('Adds a user') - def add(self, user, password): - if user in self.users: - raise UserAlreadyExistsError(user) - self.users[user] = crypt.crypt(password,'BA') - - @handler('Deletes a user') - def delete(self, user): - if not user in self.users: - raise UserNotFound(user) - del self.users[user] + _dict_subhandler_attr = 'users' + _dict_subhandler_class = User class ProxyHandler(Restorable, ConfigWriter, InitdHandler, TransactionalHandler, ParametersHandler): @@ -138,8 +82,8 @@ class ProxyHandler(Restorable, ConfigWriter, InitdHandler, self._config_writer_cfg_dir = config_dir self._config_build_templates() self._restore() - self.host = HostHandler(self.hosts) - self.user = UserHandler(self.users) + self.host = HostHandler(self) + self.user = UserHandler(self) def _get_config_vars(self, config_file): if config_file == 'squid.conf':