Commit 4cf4784a authored by Ad Schellevis's avatar Ad Schellevis Committed by Franco Fichtner

(Captiveportal, new) overlay user template content in fetch_template

(cherry picked from commit 8455fef5)
parent f992f1b7
......@@ -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))
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment