Compare commits
10 Commits
899bd8cdf4
...
d803eea7fd
Author | SHA1 | Date |
---|---|---|
linsui | d803eea7fd | |
linsui | 7104411296 | |
Hans-Christoph Steiner | 99bd544ab9 | |
Hans-Christoph Steiner | 5df3d27126 | |
Hans-Christoph Steiner | 1b65e33835 | |
Hans-Christoph Steiner | 299e3e5f4c | |
Hans-Christoph Steiner | 1cb1394de3 | |
Hans-Christoph Steiner | 9a9b5beeaa | |
Hans-Christoph Steiner | 14c8647909 | |
linsui | d243cbd030 |
|
@ -285,9 +285,7 @@ black:
|
|||
- black --check --diff --color $CI_PROJECT_DIR
|
||||
|
||||
fedora_latest:
|
||||
image: fedora:latest
|
||||
only:
|
||||
- master@fdroid/fdroidserver
|
||||
image: fedora:39 # support ends on 2024-11-12
|
||||
script:
|
||||
# tricks to hopefully make runs more reliable
|
||||
- echo "timeout=600" >> /etc/dnf/dnf.conf
|
||||
|
|
|
@ -2354,6 +2354,8 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
|
|||
gradlefile = build_gradle
|
||||
elif os.path.exists(build_gradle_kts):
|
||||
gradlefile = build_gradle_kts
|
||||
else:
|
||||
raise BuildException("No gradle file found")
|
||||
regsub_file(r'compileSdkVersion[ =]+[0-9]+',
|
||||
r'compileSdkVersion %s' % n,
|
||||
gradlefile)
|
||||
|
|
|
@ -722,7 +722,13 @@ def check_updates_ucm_http_aum_pattern(app): # noqa: D403
|
|||
|
||||
|
||||
def check_certificate_pinned_binaries(app):
|
||||
if len(app.get('AllowedAPKSigningKeys')) > 0:
|
||||
keys = app.get('AllowedAPKSigningKeys')
|
||||
known_keys = common.config.get('apk_signing_key_block_list', [])
|
||||
if keys:
|
||||
if known_keys:
|
||||
for key in keys:
|
||||
if key in known_keys:
|
||||
yield _('Known debug key is used in AllowedAPKSigningKeys: ') + key
|
||||
return
|
||||
if app.get('Binaries') is not None:
|
||||
yield _(
|
||||
|
|
|
@ -701,8 +701,14 @@ class IndexTest(unittest.TestCase):
|
|||
app = apps[appid]
|
||||
metadata = index.package_metadata(app, 'repo')
|
||||
# files
|
||||
self.assertEqual(36027, metadata['featureGraphic']['en-US']['size'])
|
||||
self.assertEqual(1413, metadata['icon']['en-US']['size'])
|
||||
self.assertEqual(
|
||||
os.path.getsize(f'repo/{appid}/en-US/featureGraphic.png'),
|
||||
metadata['featureGraphic']['en-US']['size'],
|
||||
)
|
||||
self.assertEqual(
|
||||
os.path.getsize(f'repo/{appid}/en-US/icon.png'),
|
||||
metadata['icon']['en-US']['size'],
|
||||
)
|
||||
# localized strings
|
||||
self.assertEqual({'en-US': 'title'}, metadata['name'])
|
||||
self.assertEqual({'en-US': 'video'}, metadata['video'])
|
||||
|
|
|
@ -438,6 +438,45 @@ class LintTest(unittest.TestCase):
|
|||
with self.assertRaises(TypeError):
|
||||
fdroidserver.lint.lint_config('mirrors.yml')
|
||||
|
||||
def test_check_certificate_pinned_binaries_empty(self):
|
||||
fdroidserver.common.config = {}
|
||||
app = fdroidserver.metadata.App()
|
||||
app.AllowedAPKSigningKeys = [
|
||||
'a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc'
|
||||
]
|
||||
self.assertEqual(
|
||||
[],
|
||||
list(fdroidserver.lint.check_certificate_pinned_binaries(app)),
|
||||
"when the config is empty, any signing key should be allowed",
|
||||
)
|
||||
|
||||
def test_lint_known_debug_keys_no_match(self):
|
||||
fdroidserver.common.config = {
|
||||
"apk_signing_key_block_list": "a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc"
|
||||
}
|
||||
app = fdroidserver.metadata.App()
|
||||
app.AllowedAPKSigningKeys = [
|
||||
'2fd4fd5f54babba4bcb21237809bb653361d0d2583c80964ec89b28a26e9539e'
|
||||
]
|
||||
self.assertEqual(
|
||||
[],
|
||||
list(fdroidserver.lint.check_certificate_pinned_binaries(app)),
|
||||
"A signing key that does not match one in the config should be allowed",
|
||||
)
|
||||
|
||||
def test_lint_known_debug_keys(self):
|
||||
fdroidserver.common.config = {
|
||||
'apk_signing_key_block_list': 'a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc'
|
||||
}
|
||||
app = fdroidserver.metadata.App()
|
||||
app.AllowedAPKSigningKeys = [
|
||||
'a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc'
|
||||
]
|
||||
for warn in fdroidserver.lint.check_certificate_pinned_binaries(app):
|
||||
anywarns = True
|
||||
logging.debug(warn)
|
||||
self.assertTrue(anywarns)
|
||||
|
||||
|
||||
class LintAntiFeaturesTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
|
|
@ -70,7 +70,10 @@ class NightlyTest(unittest.TestCase):
|
|||
|
||||
def tearDown(self):
|
||||
self.tempdir.cleanup()
|
||||
os.rmdir(self.testroot)
|
||||
try:
|
||||
os.rmdir(self.testroot)
|
||||
except OSError: # other test modules might have left stuff around
|
||||
pass
|
||||
|
||||
def _copy_test_debug_keystore(self):
|
||||
self.dot_android.mkdir()
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class TmpCwd:
|
||||
|
@ -60,3 +63,12 @@ def mkdtemp():
|
|||
return tempfile.TemporaryDirectory()
|
||||
else:
|
||||
return tempfile.TemporaryDirectory(ignore_cleanup_errors=True)
|
||||
|
||||
|
||||
def mkdir_testfiles(localmodule, test):
|
||||
"""Keep the test files in a labeled test dir for easy reference"""
|
||||
testroot = Path(localmodule) / '.testfiles'
|
||||
testroot.mkdir(exist_ok=True)
|
||||
testdir = testroot / unittest.TestCase.id(test)
|
||||
testdir.mkdir(exist_ok=True)
|
||||
return tempfile.mkdtemp(dir=testdir)
|
||||
|
|
Loading…
Reference in New Issue