Beispiel #1
0
    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)})
Beispiel #2
0
    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)})
Beispiel #3
0
    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'})
Beispiel #4
0
    def test_get_apk_fail(self):
        self.bkt.get_key.return_value = None

        with self.assertRaises(NoSuchKey):
            storage.get_apk(self.key_path)
Beispiel #5
0
    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
Beispiel #6
0
    def test_get_apk_fail(self):
        self.bkt.get_key.return_value = None

        with self.assertRaises(NoSuchKey):
            storage.get_apk(self.key_path)
Beispiel #7
0
    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