Example #1
0
    def validate(self):
        if not self.ecosystem or not self.os or not self.name or not self.version:
            self.config.logger.error(
                'Not a valid os configuration. For more information on project configuration, view '
                'the full docs here: https://docs.bymason.com/project-config/.')
            raise click.Abort()

        validate_artifact_version(self.config, self.version, self.get_type())
Example #2
0
    def validate(self):
        # If not parsed well by apk_parse
        if not self.apk.is_valid_APK():
            self.config.logger.error('Not a valid APK.')
            raise click.Abort()

        validate_artifact_version(self.config, self.version, self.get_type())

        min_sdk = int(self.apk.get_min_sdk_version())
        # We don't support anything higher right now
        if min_sdk > 30:
            self.config.logger.error(
                inspect.cleandoc("""
                File Name: {}

                Mason Platform does not currently support applications with a minimum sdk greater
                than API 30. Please lower the minimum sdk value in your manifest or
                gradle file.
            """.format(self.binary)))
            raise click.Abort()

        is_debug = False
        if self.apk.is_signed_v1():
            for cert_name in self.apk.get_signature_names():
                cert = self.apk.get_certificate(cert_name)
                is_debug = is_debug or cert.subject.native.get(
                    'common_name', '') == 'Android Debug'
        elif min_sdk >= 25 and self.apk.is_signed_v2():
            for cert in self.apk.get_certificates_v2():
                is_debug = is_debug or cert.subject.native.get(
                    'common_name', '') == 'Android Debug'
        elif min_sdk >= 28 and self.apk.is_signed_v3():
            for cert in self.apk.get_certificates_v3():
                is_debug = is_debug or cert.subject.native.get(
                    'common_name', '') == 'Android Debug'
        else:
            self.config.logger.error(
                inspect.cleandoc("""
                File Name: {}

                A signing certificate was not detected.
                The Mason Platform requires your app to be signed with a signing scheme.
                For more details on app signing, visit https://s.android.com/security/apksigning.
            """.format(self.binary)))
            raise click.Abort()

        if is_debug:
            self.config.logger.error(
                inspect.cleandoc("""
                Apps signed with debug keys are not allowed.
                Please sign the APK with your release keys and try again.
            """))
            raise click.Abort()
Example #3
0
 def test__validate_version__number_succeeds(self):
     self.assertIsNone(validate_artifact_version(MagicMock(), 321, 'foo'))
Example #4
0
 def test__validate_version__negative_number_fails(self):
     with self.assertRaises(click.Abort):
         validate_artifact_version(MagicMock(), -1, 'foo')
Example #5
0
 def test__validate_version__huge_number_fails(self):
     with self.assertRaises(click.Abort):
         validate_artifact_version(MagicMock(),
                                   3498738943789379832389423942983, 'foo')
Example #6
0
 def test__validate_version__latest_keyword_succeeds(self):
     self.assertIsNone(
         validate_artifact_version(MagicMock(), 'latest', 'foo'))
Example #7
0
 def test__validate_version__text_string_fails(self):
     with self.assertRaises(click.Abort):
         validate_artifact_version(MagicMock(), 'foo', 'foo')
Example #8
0
 def test__validate_version__object_fails(self):
     with self.assertRaises(click.Abort):
         validate_artifact_version(MagicMock(), {}, 'foo')