X-Git-Url: https://git.llucax.com/software/pymin.git/blobdiff_plain/7d2f3da6aee023c991c9669a6a4664bd8be53a97..24e0b139acf9ed84e1b9331f7629c77c6adf1cf8:/pymin/services/proxy/__init__.py diff --git a/pymin/services/proxy/__init__.py b/pymin/services/proxy/__init__.py index 399eba1..1e24cd4 100644 --- a/pymin/services/proxy/__init__.py +++ b/pymin/services/proxy/__init__.py @@ -1,96 +1,49 @@ # vim: set encoding=utf-8 et sw=4 sts=4 : from os import path +import logging ; log = logging.getLogger('pymin.services.proxy') 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 -__ALL__ = ('ProxyHandler', 'Error', 'HostError', 'HostAlreadyExistsError', - 'HostNotFoundError') - -class Error(HandlerError): - r""" - Error(command) -> Error instance :: Base DnsHandler exception class. - - All exceptions raised by the DnsHandler inherits from this one, so you can - easily catch any DnsHandler exception. - - message - A descriptive error message. - """ - 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. - """ - - def __init__(self, hostname): - r"Initialize the object. See class documentation for more info." - self.message = u'Host not found: "%s"' % hostname +import crypt +__ALL__ = ('ProxyHandler',) class Host(Sequence): - def __init__(self,ip): self.ip = ip - def as_tuple(self): - return (self.ip) + return (self.ip,) -class HostHandler(Handler): +# TODO convert to a SetSubHandler - handler_help = u"Manage proxy hosts" +class HostHandler(DictSubHandler): - def __init__(self, hosts): - self.hosts = hosts + handler_help = u"Manage proxy hosts" - @handler(u'Adds a host') - def add(self, ip): - if ip in self.hosts: - raise HostAlreadyExistsError(ip) - self.hosts[ip] = Host(ip) + _cont_subhandler_attr = 'hosts' + _cont_subhandler_class = Host - @handler(u'Deletes a host') - def delete(self, ip): - if not ip in self.hosts: - raise HostNotFoundError(ip) - del self.hosts[ip] +class User(Sequence): + def __init__(self, name, password): + self.name = name + self.password = crypt.crypt(password,'BA') + def as_tuple(self): + return (self.name, self.password) + def update(self, password=None): + if password is not None: + self.password = crypt.crypt(password,'BA') - @handler(u'Shows all hosts') - def list(self): - return self.hosts.keys() +class UserHandler(DictSubHandler): - @handler(u'Get information about all hosts') - def show(self): - return self.hosts.items() + handler_help = u"Manage proxy users" + _cont_subhandler_attr = 'users' + _cont_subhandler_class = User class ProxyHandler(Restorable, ConfigWriter, InitdHandler, TransactionalHandler, ParametersHandler): @@ -99,7 +52,7 @@ class ProxyHandler(Restorable, ConfigWriter, InitdHandler, _initd_name = 'squid' - _persistent_attrs = ('params', 'hosts') + _persistent_attrs = ('params', 'hosts', 'users') _restorable_defaults = dict( hosts = dict(), @@ -107,25 +60,36 @@ class ProxyHandler(Restorable, ConfigWriter, InitdHandler, ip = '192.168.0.1', port = '8080', ), + users = dict(), ) - _config_writer_files = 'squid.conf' + _config_writer_files = ('squid.conf','users.conf') _config_writer_tpl_dir = path.join(path.dirname(__file__), 'templates') def __init__(self, pickle_dir='.', config_dir='.'): r"Initialize DhcpHandler object, see class documentation for details." + log.debug(u'ProxyHandler(%r, %r)', pickle_dir, config_dir) self._persistent_dir = pickle_dir self._config_writer_cfg_dir = config_dir self._config_build_templates() - self._restore() - self.host = HostHandler(self.hosts) + InitdHandler.__init__(self) + self.host = HostHandler(self) + self.user = UserHandler(self) def _get_config_vars(self, config_file): - return dict(hosts=self.hosts.values(), **self.params) + if config_file == 'squid.conf': + return dict(hosts=self.hosts.values(), **self.params) + return dict(users=self.users) if __name__ == '__main__': + logging.basicConfig( + level = logging.DEBUG, + format = '%(asctime)s %(levelname)-8s %(message)s', + datefmt = '%H:%M:%S', + ) + px = ProxyHandler() px.set('ip','192.66.66.66') px.set('port','666') @@ -133,4 +97,6 @@ if __name__ == '__main__': px.host.add('192.168.0.25.26') px.host.add('192.168.0.25.27') px.host.delete('192.168.0.25.27') - px.commit() \ No newline at end of file + px.user.add('lala','soronga') + px.user.add('culo','sarasa') + px.commit()