Example #1
0
    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')
Example #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)})
Example #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']

        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)})
Example #4
0
    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')
Example #5
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'})