(Captiveportal, new) overlay user template content in fetch_template

This commit is contained in:
Ad Schellevis 2015-10-18 12:35:57 +00:00
parent cb08c27509
commit 8455fef593
2 changed files with 30 additions and 4 deletions

View File

@ -29,21 +29,47 @@
fetch template files as base64 encoded zipfile
"""
import os
import sys
import ujson
import binascii
import zipfile
import StringIO
from lib import OPNSenseConfig
response = dict()
source_directory = '/usr/local/opnsense/scripts/OPNsense/CaptivePortal/htdocs_default'
output_data = StringIO.StringIO()
with zipfile.ZipFile(output_data, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
# overlay user template data
user_filenames = list()
if len(sys.argv) > 1:
# search for user template, using fileid
cnf = OPNSenseConfig()
template_content = cnf.get_template(sys.argv[1])
if template_content is not None:
try:
input_data = StringIO.StringIO(template_content.decode('base64'))
with zipfile.ZipFile(input_data, mode='r', compression=zipfile.ZIP_DEFLATED) as zf_in:
for zf_info in zf_in.infolist():
user_filenames.append(zf_info.filename)
zf.writestr(zf_info.filename, zf_in.read(zf_info.filename))
except zipfile.BadZipfile:
# not in zip format
response['error'] = 'internal xml data not in zip format, user data discarded'
except binascii.Error:
# not base64 encoded
response['error'] = 'internal xml data not in base64 format, user data discarded'
# read standard template from disk
for root, dirs, files in os.walk(source_directory):
for filename in files:
filename = '%s/%s' % (root,filename)
output_filename = filename[len(source_directory)+1:]
zf.writestr(output_filename, open(filename,'rb').read())
if output_filename not in user_filenames:
zf.writestr(output_filename, open(filename,'rb').read())
response = {'payload': output_data.getvalue().encode('base64')}
response['payload'] = output_data.getvalue().encode('base64')
response['size'] = len(response['payload'])
print(ujson.dumps(response))

View File

@ -36,9 +36,9 @@ message:restarting captiveportal services
[fetch_template]
command:/usr/local/opnsense/scripts/OPNsense/CaptivePortal/fetch_template.py
parameters:
parameters:%s
type:script_output
message:fetch captiveportal web template package
message:fetch captiveportal web template package %s
[strip_template]
command:/usr/local/opnsense/scripts/OPNsense/CaptivePortal/strip_template.py