Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: packagerSafari.py

Issue 29349885: Issue 4340 - Drop dependency on external xar tool (Closed)
Left Patch Set: Created Aug. 16, 2016, 7:44 p.m.
Right Patch Set: Addressed more nits Created Aug. 17, 2016, 7:21 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | xarfile.py » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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 ConfigParser 6 import ConfigParser
6 import json 7 import json
7 import os 8 import os
8 import re 9 import re
9 from urlparse import urlparse 10 from urlparse import urlparse
10 11
11 from packager import readMetadata, getDefaultFileName, getBuildVersion, getTempl ate, Files 12 from packager import readMetadata, getDefaultFileName, getBuildVersion, getTempl ate, Files
12 from packagerChrome import convertJS, importGeckoLocales, getIgnoredFiles, getPa ckageFiles, defaultLocale, createScriptPage 13 from packagerChrome import convertJS, importGeckoLocales, getIgnoredFiles, getPa ckageFiles, defaultLocale, createScriptPage
13 14
14 15
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 def fixAbsoluteUrls(files): 103 def fixAbsoluteUrls(files):
103 for filename, content in files.iteritems(): 104 for filename, content in files.iteritems():
104 if os.path.splitext(filename)[1].lower() == '.html': 105 if os.path.splitext(filename)[1].lower() == '.html':
105 files[filename] = re.sub( 106 files[filename] = re.sub(
106 r'(<[^<>]*?\b(?:href|src)\s*=\s*["\']?)\/+', 107 r'(<[^<>]*?\b(?:href|src)\s*=\s*["\']?)\/+',
107 r'\1' + '/'.join(['..'] * filename.count('/') + ['']), 108 r'\1' + '/'.join(['..'] * filename.count('/') + ['']),
108 content, re.S | re.I 109 content, re.S | re.I
109 ) 110 )
110 111
111 112
113 def _get_sequence(data):
114 from Crypto.Util import asn1
115 sequence = asn1.DerSequence()
116 sequence.decode(data)
117 return sequence
118
119
112 def get_developer_identifier(certs): 120 def get_developer_identifier(certs):
113 from Crypto.Util import asn1
114 def get_sequence(data):
115 sequence = asn1.DerSequence()
116 sequence.decode(data)
117 return sequence
118
119 for cert in certs: 121 for cert in certs:
120 # See https://tools.ietf.org/html/rfc5280#section-4 122 # See https://tools.ietf.org/html/rfc5280#section-4
121 tbsCertificate = get_sequence(cert)[0] 123 tbscertificate = _get_sequence(base64.b64decode(cert))[0]
122 subject = get_sequence(tbsCertificate)[5] 124 subject = _get_sequence(tbscertificate)[5]
123 125
124 # We could decode the subject but since we have to apply a regular 126 # We could decode the subject but since we have to apply a regular
125 # expression on CN entry anyway we can just skip that. 127 # expression on CN entry anyway we can just skip that.
126 m = re.search(r'Safari Developer: \((\S*?)\)', subject) 128 m = re.search(r'Safari Developer: \((\S*?)\)', subject)
127 if m: 129 if m:
128 return m.group(1) 130 return m.group(1)
129 131
130 raise Exception('No Safari developer certificate found in chain') 132 raise Exception('No Safari developer certificate found in chain')
131 133
132 134
(...skipping 30 matching lines...) Expand all
163 165
164 if metadata.has_section('import_locales'): 166 if metadata.has_section('import_locales'):
165 importGeckoLocales(params, files) 167 importGeckoLocales(params, files)
166 168
167 if metadata.has_option('general', 'testScripts'): 169 if metadata.has_option('general', 'testScripts'):
168 files['qunit/index.html'] = createScriptPage(params, 'testIndex.html.tmp l', 170 files['qunit/index.html'] = createScriptPage(params, 'testIndex.html.tmp l',
169 ('general', 'testScripts')) 171 ('general', 'testScripts'))
170 172
171 if keyFile: 173 if keyFile:
172 from buildtools import xarfile 174 from buildtools import xarfile
173 certs = xarfile.read_certificates(keyFile) 175 certs, key = xarfile.read_certificates_and_key(keyFile)
174 params['developerIdentifier'] = get_developer_identifier(certs) 176 params['developerIdentifier'] = get_developer_identifier(certs)
175 177
176 files['lib/info.js'] = createInfoModule(params) 178 files['lib/info.js'] = createInfoModule(params)
177 files['background.html'] = createScriptPage(params, 'background.html.tmpl', 179 files['background.html'] = createScriptPage(params, 'background.html.tmpl',
178 ('general', 'backgroundScripts') ) 180 ('general', 'backgroundScripts') )
179 files['Info.plist'] = createManifest(params, files) 181 files['Info.plist'] = createManifest(params, files)
180 182
181 fixAbsoluteUrls(files) 183 fixAbsoluteUrls(files)
182 184
183 dirname = metadata.get('general', 'basename') + '.safariextension' 185 dirname = metadata.get('general', 'basename') + '.safariextension'
184 for filename in files.keys(): 186 for filename in files.keys():
185 files[os.path.join(dirname, filename)] = files.pop(filename) 187 files[os.path.join(dirname, filename)] = files.pop(filename)
186 188
187 if not devenv and keyFile: 189 if not devenv and keyFile:
188 from buildtools import xarfile 190 from buildtools import xarfile
189 xarfile.create(outFile, files, keyFile) 191 xarfile.create(outFile, files, keyFile)
190 else: 192 else:
191 files.zip(outFile) 193 files.zip(outFile)
LEFTRIGHT
« no previous file | xarfile.py » ('j') | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld