Page MenuHomePhorge

module_footer.py
No OneTemporary

Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None

module_footer.py

# -*- coding: utf-8 -*-
# Copyright 2010-2013 Kolab Systems AG (http://www.kolabsys.com)
#
# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import os
import tempfile
import time
from email import message_from_file
import modules
import pykolab
from pykolab.translate import _
log = pykolab.getLogger('pykolab.wallace')
conf = pykolab.getConf()
mybasepath = '/var/spool/pykolab/wallace/footer/'
def __init__():
modules.register('footer', execute, description=description())
def description():
return """Append a footer to messages."""
def execute(*args, **kw):
if not os.path.isdir(mybasepath):
os.makedirs(mybasepath)
for stage in ['incoming', 'ACCEPT' ]:
if not os.path.isdir(os.path.join(mybasepath, stage)):
os.makedirs(os.path.join(mybasepath, stage))
# TODO: Test for correct call.
filepath = args[0]
if kw.has_key('stage'):
log.debug(_("Issuing callback after processing to stage %s") % (kw['stage']), level=8)
log.debug(_("Testing cb_action_%s()") % (kw['stage']), level=8)
if hasattr(modules, 'cb_action_%s' % (kw['stage'])):
log.debug(_("Attempting to execute cb_action_%s()") % (kw['stage']), level=8)
exec('modules.cb_action_%s(%r, %r)' % (kw['stage'],'optout',filepath))
return
log.debug(_("Executing module footer for %r, %r") % (args, kw), level=8)
new_filepath = os.path.join('/var/spool/pykolab/wallace/footer/incoming', os.path.basename(filepath))
os.rename(filepath, new_filepath)
filepath = new_filepath
# parse message
message = message_from_file(open(filepath, 'r'))
# Possible footer answers are limited to ACCEPT only
answers = [ 'ACCEPT' ]
footer = {}
footer_html_file = conf.get('wallace', 'footer_html')
footer_text_file = conf.get('wallace', 'footer_text')
if not os.path.isfile(footer_text_file) and not os.path.isfile(footer_html_file):
log.warning(_("No contents configured for footer module"))
exec('modules.cb_action_%s(%r, %r)' % ('ACCEPT','footer', filepath))
return
if os.path.isfile(footer_text_file):
footer['plain'] = open(footer_text_file, 'r').read()
if not os.path.isfile(footer_html_file):
footer['html'] = '<p>' + footer['plain'] + '</p>'
else:
footer['html'] = open(footer_html_file, 'r').read()
if footer['html'] == "":
footer['html'] = '<p>' + footer['plain'] + '</p>'
if footer['plain'] == "" and footer['html'] == "<p></p>":
exec('modules.cb_action_%s(%r, %r)' % ('ACCEPT','footer', filepath))
return
footer_added = False
try:
_footer_added = message.get("X-Wallace-Footer")
except:
pass
if _footer_added == "YES":
exec('modules.cb_action_%s(%r, %r)' % ('ACCEPT','footer', filepath))
return
for part in message.walk():
disposition = None
try:
content_type = part.get_content_type()
except:
continue
try:
disposition = part.get("Content-Disposition")
except:
pass
log.debug("Walking message part: %s; disposition = %r" % (content_type, disposition), level=8)
if not disposition == None:
continue
if content_type == "text/plain":
content = part.get_payload()
content += "\n\n-- \n%s" % (footer['plain'])
part.set_payload(content)
footer_added = True
log.debug("Text footer attached.", level=6)
elif content_type == "text/html":
content = part.get_payload()
append = "\n<!-- footer appended by Wallace -->\n" + footer['html']
if "</body>" in content:
part.set_payload(content.replace("</body>", append + "</body>"))
else:
part.set_payload("<html><body>" + content + append + "</body></html>")
footer_added = True
log.debug("HTML footer attached.", level=6)
if footer_added:
log.debug("Footer attached.")
message.add_header("X-Wallace-Footer", "YES")
(fp, new_filepath) = tempfile.mkstemp(dir="/var/spool/pykolab/wallace/footer/ACCEPT")
os.write(fp, message.as_string())
os.close(fp)
os.unlink(filepath)
exec('modules.cb_action_%s(%r, %r)' % ('ACCEPT','footer', new_filepath))

File Metadata

Mime Type
text/x-script.python
Expires
Mon, Apr 6, 1:26 AM (2 d, 23 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
f9/ad/fa5b1d20793d66670a53cdd446ba
Default Alt Text
module_footer.py (4 KB)

Event Timeline