| OLD | NEW |
| 1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
| 2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| 4 | 4 |
| 5 import base64 | 5 import base64 |
| 6 import ConfigParser | 6 import ConfigParser |
| 7 import json | 7 import json |
| 8 import os | 8 import os |
| 9 import re | 9 import re |
| 10 from urlparse import urlparse | 10 from urlparse import urlparse |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 popovers=parse_section('popovers'), | 93 popovers=parse_section('popovers'), |
| 94 developerIdentifier=params.get('developerIdentifier') | 94 developerIdentifier=params.get('developerIdentifier') |
| 95 ).encode('utf-8') | 95 ).encode('utf-8') |
| 96 | 96 |
| 97 | 97 |
| 98 def createInfoModule(params): | 98 def createInfoModule(params): |
| 99 template = getTemplate('safariInfo.js.tmpl') | 99 template = getTemplate('safariInfo.js.tmpl') |
| 100 return template.render(params).encode('utf-8') | 100 return template.render(params).encode('utf-8') |
| 101 | 101 |
| 102 | 102 |
| 103 def fixAbsoluteUrls(files): | |
| 104 for filename, content in files.iteritems(): | |
| 105 if os.path.splitext(filename)[1].lower() == '.html': | |
| 106 files[filename] = re.sub( | |
| 107 r'(<[^<>]*?\b(?:href|src)\s*=\s*["\']?)\/+', | |
| 108 r'\1' + '/'.join(['..'] * filename.count('/') + ['']), | |
| 109 content, re.S | re.I | |
| 110 ) | |
| 111 | |
| 112 | |
| 113 def _get_sequence(data): | 103 def _get_sequence(data): |
| 114 from Crypto.Util import asn1 | 104 from Crypto.Util import asn1 |
| 115 sequence = asn1.DerSequence() | 105 sequence = asn1.DerSequence() |
| 116 sequence.decode(data) | 106 sequence.decode(data) |
| 117 return sequence | 107 return sequence |
| 118 | 108 |
| 119 | 109 |
| 120 def get_developer_identifier(certs): | 110 def get_developer_identifier(certs): |
| 121 for cert in certs: | 111 for cert in certs: |
| 122 # See https://tools.ietf.org/html/rfc5280#section-4 | 112 # See https://tools.ietf.org/html/rfc5280#section-4 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 if keyFile: | 163 if keyFile: |
| 174 from buildtools import xarfile | 164 from buildtools import xarfile |
| 175 certs, key = xarfile.read_certificates_and_key(keyFile) | 165 certs, key = xarfile.read_certificates_and_key(keyFile) |
| 176 params['developerIdentifier'] = get_developer_identifier(certs) | 166 params['developerIdentifier'] = get_developer_identifier(certs) |
| 177 | 167 |
| 178 files['lib/info.js'] = createInfoModule(params) | 168 files['lib/info.js'] = createInfoModule(params) |
| 179 files['background.html'] = createScriptPage(params, 'background.html.tmpl', | 169 files['background.html'] = createScriptPage(params, 'background.html.tmpl', |
| 180 ('general', 'backgroundScripts')
) | 170 ('general', 'backgroundScripts')
) |
| 181 files['Info.plist'] = createManifest(params, files) | 171 files['Info.plist'] = createManifest(params, files) |
| 182 | 172 |
| 183 fixAbsoluteUrls(files) | |
| 184 | |
| 185 dirname = metadata.get('general', 'basename') + '.safariextension' | 173 dirname = metadata.get('general', 'basename') + '.safariextension' |
| 186 for filename in files.keys(): | 174 for filename in files.keys(): |
| 187 files[os.path.join(dirname, filename)] = files.pop(filename) | 175 files[os.path.join(dirname, filename)] = files.pop(filename) |
| 188 | 176 |
| 189 if not devenv and keyFile: | 177 if not devenv and keyFile: |
| 190 from buildtools import xarfile | 178 from buildtools import xarfile |
| 191 xarfile.create(outFile, files, keyFile) | 179 xarfile.create(outFile, files, keyFile) |
| 192 else: | 180 else: |
| 193 files.zip(outFile) | 181 files.zip(outFile) |
| OLD | NEW |