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())
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()
def test__validate_version__number_succeeds(self): self.assertIsNone(validate_artifact_version(MagicMock(), 321, 'foo'))
def test__validate_version__negative_number_fails(self): with self.assertRaises(click.Abort): validate_artifact_version(MagicMock(), -1, 'foo')
def test__validate_version__huge_number_fails(self): with self.assertRaises(click.Abort): validate_artifact_version(MagicMock(), 3498738943789379832389423942983, 'foo')
def test__validate_version__latest_keyword_succeeds(self): self.assertIsNone( validate_artifact_version(MagicMock(), 'latest', 'foo'))
def test__validate_version__text_string_fails(self): with self.assertRaises(click.Abort): validate_artifact_version(MagicMock(), 'foo', 'foo')
def test__validate_version__object_fails(self): with self.assertRaises(click.Abort): validate_artifact_version(MagicMock(), {}, 'foo')