diff options
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Cfg/CfgEncryptedGenshiGenerator.py')
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Cfg/CfgEncryptedGenshiGenerator.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgEncryptedGenshiGenerator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgEncryptedGenshiGenerator.py new file mode 100644 index 000000000..3845c438b --- /dev/null +++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgEncryptedGenshiGenerator.py @@ -0,0 +1,35 @@ +import logging +from Bcfg2.Bcfg2Py3k import StringIO +from Bcfg2.Server.Plugins.Cfg import SETUP +from Bcfg2.Server.Plugins.Cfg.CfgGenshiGenerator import CfgGenshiGenerator +from Bcfg2.Server.Plugins.Cfg.CfgEncryptedGenerator import decrypt, \ + CfgEncryptedGenerator + +logger = logging.getLogger(__name__) + +try: + from genshi.template import TemplateLoader, loader +except ImportError: + # CfgGenshiGenerator will raise errors if genshi doesn't exist + pass + +def crypted_loader(filename): + loadfunc = loader.directory(os.path.dirname(filename)) + filepath, filename, fileobj, uptodate = loadfunc(filename) + return (filepath, filename, StringIO(decrypt(fileobj.read())), uptodate) + + +class CfgEncryptedGenshiGenerator(CfgGenshiGenerator, CfgEncryptedGenerator): + __extensions__ = ['genshi.crypt', 'crypt.genshi'] + + def __init__(self, fname, spec, encoding): + CfgEncryptedGenerator.__init__(self, fname, spec, encoding) + CfgGenshiGenerator.__init__(self, fname, spec, encoding) + self.loader = TemplateLoader([crypted_loader]) + + def handle_event(self, event): + CfgEncryptedGenerator.handle_event(self, event) + CfgGenshiGenerator.handle_event(self, event) + + def get_data(self, entry, metadata): + CfgGenshiGenerator.get_data(self, entry, metadata) |