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'})
def test_get_apk_fail(self): self.bkt.get_key.return_value = None with self.assertRaises(NoSuchKey): storage.get_apk(self.key_path)
def test_get_apk(self): storage.get_apk(self.key_path) self.bkt.get_key.assert_called_with(self.key_path) assert self.key.get_contents_to_file.called