def test_put_ok(self): with tempfile.TemporaryFile() as fp: storage.put_signed_apk(fp, self.key_path) self.bkt.new_key.assert_called_with(self.key_path) self.new_key.set_contents_from_file.assert_called_with(fp) self.new_key.set_acl.assert_called_with('public-read')
def post(self, request): form = SignForm(request.POST) if not form.is_valid(): return self.form_errors([form]) src = form.cleaned_data['unsigned_apk_s3_path'] dest = form.cleaned_data['signed_apk_s3_path'] log.info('about to sign APK ID={id} from {src} to {dest}'.format( src=src, dest=dest, id=form.cleaned_data['apk_id'])) with storage.get_apk(src) as fp: real_hash = checksum_hash(fp) claimed_hash = form.cleaned_data['unsigned_apk_s3_hash'] log.info('Unsigned APK hash check: ' '{src} real={real} claimed={claimed}'.format( src=src, real=real_hash, claimed=claimed_hash)) if real_hash != claimed_hash: raise BadRequestError('unsigned APK content ' 'hash check failed') with signer.sign(form.cleaned_data['apk_id'], fp) as signed_fp: storage.put_signed_apk(signed_fp, dest) return Response({'signed_apk_s3_url': storage.signed_apk_url(dest)})
def post(self, request): form = SignForm(request.POST) if not form.is_valid(): return self.form_errors([form]) src = form.cleaned_data['unsigned_apk_s3_path'] dest = form.cleaned_data['signed_apk_s3_path'] log.info('about to sign APK ID={id} from {src} to {dest}' .format(src=src, dest=dest, id=form.cleaned_data['apk_id'])) with storage.get_apk(src) as fp: real_hash = checksum_hash(fp) claimed_hash = form.cleaned_data['unsigned_apk_s3_hash'] log.info('Unsigned APK hash check: ' '{src} real={real} claimed={claimed}' .format(src=src, real=real_hash, claimed=claimed_hash)) if real_hash != claimed_hash: raise BadRequestError('unsigned APK content ' 'hash check failed') with signer.sign(form.cleaned_data['apk_id'], fp) as signed_fp: storage.put_signed_apk(signed_fp, dest) return Response({'signed_apk_s3_url': storage.signed_apk_url(dest)})
def post(self, request): form = SignForm(request.POST) if not form.is_valid(): return self.form_errors([form]) src = form.cleaned_data['unsigned_apk_s3_path'] dest = form.cleaned_data['signed_apk_s3_path'] with storage.get_apk(src) as fp: fp.seek(0) m = hashlib.sha256() while 1: stuff = fp.read(buf_size) if stuff: m.update(stuff) else: break real_hash = m.hexdigest() claimed_hash = form.cleaned_data['unsigned_apk_s3_hash'] log.info('Unsigned APK hash check: ' '{src} real={real} claimed={claimed}' .format(src=src, real=real_hash, claimed=claimed_hash)) if real_hash != claimed_hash: raise BadRequestError('unsigned APK content ' 'hash check failed') log.info('about to sign APK from {src} to {dest}' .format(src=src, dest=dest)) fp.seek(0) # TODO: sign the raw APK and put the signed APK on S3. storage.put_signed_apk(fp, dest) return Response({'signed_apk_s3_url': 'not implemented'})