Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 # coding: utf-8 | 1 # coding: utf-8 |
2 | 2 |
3 # This Source Code Form is subject to the terms of the Mozilla Public | 3 # This Source Code Form is subject to the terms of the Mozilla Public |
4 # License, v. 2.0. If a copy of the MPL was not distributed with this | 4 # License, v. 2.0. If a copy of the MPL was not distributed with this |
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
6 | 6 |
7 import os | 7 import os |
8 import re | 8 import re |
9 import json | 9 import json |
10 import ConfigParser | 10 import ConfigParser |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
107 | 107 |
108 def fixAbsoluteUrls(files): | 108 def fixAbsoluteUrls(files): |
109 for filename, content in files.iteritems(): | 109 for filename, content in files.iteritems(): |
110 if os.path.splitext(filename)[1].lower() == '.html': | 110 if os.path.splitext(filename)[1].lower() == '.html': |
111 files[filename] = re.sub( | 111 files[filename] = re.sub( |
112 r'(<[^<>]*?\b(?:href|src)\s*=\s*["\']?)\/+', | 112 r'(<[^<>]*?\b(?:href|src)\s*=\s*["\']?)\/+', |
113 r'\1' + '/'.join(['..'] * filename.count('/') + ['']), | 113 r'\1' + '/'.join(['..'] * filename.count('/') + ['']), |
114 content, re.S | re.I | 114 content, re.S | re.I |
115 ) | 115 ) |
116 | 116 |
117 def get_certificates_and_key(keyfile): | 117 def get_certificates_and_key(keyfile): |
kzar
2015/07/16 15:39:53
Nit: Use camel case to match the other function na
Sebastian Noack
2015/07/16 15:50:48
I think we should move to PEP-8 for new code.
kzar
2015/07/16 15:56:35
From PEP-8:
"A style guide is about consistency.
Wladimir Palant
2015/07/16 19:16:23
I agree with Sebastian - we are never going to tak
kzar
2015/07/17 08:51:18
Acknowledged.
| |
118 import M2Crypto | 118 import M2Crypto |
119 | 119 |
120 certs = [] | 120 certs = [] |
121 bio = M2Crypto.BIO.openfile(keyfile) | 121 bio = M2Crypto.BIO.openfile(keyfile) |
122 | 122 |
123 try: | 123 try: |
124 key = M2Crypto.RSA.load_key_bio(bio) | 124 key = M2Crypto.RSA.load_key_bio(bio) |
125 bio.reset() | 125 bio.reset() |
126 while True: | 126 while True: |
127 try: | 127 try: |
128 certs.append(M2Crypto.X509.load_cert_bio(bio)) | 128 certs.append(M2Crypto.X509.load_cert_bio(bio)) |
129 except M2Crypto.X509.X509Error: | 129 except M2Crypto.X509.X509Error: |
130 break | 130 break |
131 finally: | 131 finally: |
132 bio.close() | 132 bio.close() |
133 | 133 |
134 return certs, key | 134 return certs, key |
135 | 135 |
136 def get_developer_identifier(certs): | 136 def get_developer_identifier(certs): |
137 for cert in certs: | 137 for cert in certs: |
138 subject = cert.get_subject() | 138 subject = cert.get_subject() |
139 for entry in subject.get_entries_by_nid(subject.nid['CN']): | 139 for entry in subject.get_entries_by_nid(subject.nid['CN']): |
140 m = re.match(r'Safari Developer: \((.*?)\)', entry.get_data().as_text()) | 140 m = re.match(r'Safari Developer: \((.*?)\)', entry.get_data().as_text()) |
141 if m: | 141 if m: |
142 return m.group(1) | 142 return m.group(1) |
143 | 143 |
144 raise Exception('No safari developer certificate found in chain') | 144 raise Exception('No Safari developer certificate found in chain') |
kzar
2015/07/16 15:39:53
Nit: Capitalise Safari?
Sebastian Noack
2015/07/16 15:50:48
This code where merely copied from sitescripts. Bu
| |
145 | 145 |
146 def createSignedXarArchive(outFile, files, certs, key): | 146 def createSignedXarArchive(outFile, files, certs, key): |
147 import subprocess | 147 import subprocess |
148 import tempfile | 148 import tempfile |
149 import shutil | 149 import shutil |
150 import M2Crypto | 150 import M2Crypto |
151 | 151 |
152 # write files to temporary directory and create a xar archive | 152 # write files to temporary directory and create a xar archive |
153 dirname = tempfile.mkdtemp() | 153 dirname = tempfile.mkdtemp() |
154 try: | 154 try: |
(...skipping 10 matching lines...) Expand all Loading... | |
165 | 165 |
166 subprocess.check_output( | 166 subprocess.check_output( |
167 ['xar', '-czf', os.path.abspath(outFile), '--distribution'] + os.listdir(d irname), | 167 ['xar', '-czf', os.path.abspath(outFile), '--distribution'] + os.listdir(d irname), |
168 cwd=dirname | 168 cwd=dirname |
169 ) | 169 ) |
170 finally: | 170 finally: |
171 shutil.rmtree(dirname) | 171 shutil.rmtree(dirname) |
172 | 172 |
173 certificate_filenames = [] | 173 certificate_filenames = [] |
174 try: | 174 try: |
175 # write each certificate in DER format to a seperate | 175 # write each certificate in DER format to a separate |
176 # temporary file, that they can be passed to xar | 176 # temporary file, that they can be passed to xar |
177 for cert in certs: | 177 for cert in certs: |
178 fd, filename = tempfile.mkstemp() | 178 fd, filename = tempfile.mkstemp() |
179 try: | 179 try: |
180 certificate_filenames.append(filename) | 180 certificate_filenames.append(filename) |
181 os.write(fd, cert.as_der()) | 181 os.write(fd, cert.as_der()) |
182 finally: | 182 finally: |
183 os.close(fd) | 183 os.close(fd) |
184 | 184 |
185 # add certificates and placeholder signature | 185 # add certificates and placeholder signature |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
269 fixAbsoluteUrls(files) | 269 fixAbsoluteUrls(files) |
270 | 270 |
271 dirname = metadata.get('general', 'basename') + '.safariextension' | 271 dirname = metadata.get('general', 'basename') + '.safariextension' |
272 for filename in files.keys(): | 272 for filename in files.keys(): |
273 files[os.path.join(dirname, filename)] = files.pop(filename) | 273 files[os.path.join(dirname, filename)] = files.pop(filename) |
274 | 274 |
275 if not devenv and keyFile: | 275 if not devenv and keyFile: |
276 createSignedXarArchive(outFile, files, certs, key) | 276 createSignedXarArchive(outFile, files, certs, key) |
277 else: | 277 else: |
278 files.zip(outFile) | 278 files.zip(outFile) |
LEFT | RIGHT |