1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-20 13:50:12 +01:00

Merge branch 'scanner-overhaul' into 'master'

scanner file type overhaul

Closes #394

See merge request fdroid/fdroidserver!758
This commit is contained in:
Marcus 2020-06-11 09:23:39 +00:00
commit 0e025e2ae9
5 changed files with 950 additions and 38 deletions

View File

@ -512,6 +512,7 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext
else: else:
# Scan before building... # Scan before building...
logging.info("Scanning source for common problems...") logging.info("Scanning source for common problems...")
scanner.options = options # pass verbose through
count = scanner.scan_source(build_dir, build) count = scanner.scan_source(build_dir, build)
if count > 0: if count > 0:
if force: if force:

View File

@ -16,6 +16,7 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import imghdr
import json import json
import os import os
import re import re
@ -33,7 +34,11 @@ from .exception import BuildException, VCSException
config = None config = None
options = None options = None
json_per_build = None DEFAULT_JSON_PER_BUILD = {'errors': [], 'warnings': [], 'infos': []}
json_per_build = DEFAULT_JSON_PER_BUILD
MAVEN_URL_REGEX = re.compile(r"""\smaven\s*{.*?(?:setUrl|url)\s*=?\s*(?:uri)?\(?\s*["']?([^\s"']+)["']?[^}]*}""",
re.DOTALL)
def get_gradle_compile_commands(build): def get_gradle_compile_commands(build):
@ -99,8 +104,6 @@ def scan_source(build_dir, build=metadata.Build()):
if r.match(s) and not is_whitelisted(s): if r.match(s) and not is_whitelisted(s):
yield n yield n
gradle_mavenrepo = re.compile(r'maven *{ *(url)? *[\'"]?([^ \'"]*)[\'"]?')
allowed_repos = [re.compile(r'^https://' + re.escape(repo) + r'/*') for repo in [ allowed_repos = [re.compile(r'^https://' + re.escape(repo) + r'/*') for repo in [
'repo1.maven.org/maven2', # mavenCentral() 'repo1.maven.org/maven2', # mavenCentral()
'jcenter.bintray.com', # jcenter() 'jcenter.bintray.com', # jcenter()
@ -144,33 +147,38 @@ def scan_source(build_dir, build=metadata.Build()):
return False return False
def ignoreproblem(what, path_in_build_dir): def ignoreproblem(what, path_in_build_dir):
logging.info('Ignoring %s at %s' % (what, path_in_build_dir)) msg = ('Ignoring %s at %s' % (what, path_in_build_dir))
logging.info(msg)
if json_per_build is not None: if json_per_build is not None:
json_per_build['infos'].append([what, path_in_build_dir]) json_per_build['infos'].append([msg, path_in_build_dir])
return 0 return 0
def removeproblem(what, path_in_build_dir, filepath): def removeproblem(what, path_in_build_dir, filepath):
logging.info('Removing %s at %s' % (what, path_in_build_dir)) msg = ('Removing %s at %s' % (what, path_in_build_dir))
logging.info(msg)
if json_per_build is not None: if json_per_build is not None:
json_per_build['infos'].append([what, path_in_build_dir]) json_per_build['infos'].append([msg, path_in_build_dir])
os.remove(filepath) os.remove(filepath)
return 0 return 0
def warnproblem(what, path_in_build_dir): def warnproblem(what, path_in_build_dir):
if toignore(path_in_build_dir): if toignore(path_in_build_dir):
return return 0
logging.warning('Found %s at %s' % (what, path_in_build_dir)) logging.warning('Found %s at %s' % (what, path_in_build_dir))
if json_per_build is not None: if json_per_build is not None:
json_per_build['warnings'].append([what, path_in_build_dir]) json_per_build['warnings'].append([what, path_in_build_dir])
return 0
def handleproblem(what, path_in_build_dir, filepath): def handleproblem(what, path_in_build_dir, filepath):
if toignore(path_in_build_dir): if toignore(path_in_build_dir):
return ignoreproblem(what, path_in_build_dir) return ignoreproblem(what, path_in_build_dir)
if todelete(path_in_build_dir): if todelete(path_in_build_dir):
return removeproblem(what, path_in_build_dir, filepath) return removeproblem(what, path_in_build_dir, filepath)
if options.json: if 'src/test' in filepath or '/test/' in filepath:
return warnproblem(what, path_in_build_dir)
if options and options.json:
json_per_build['errors'].append([what, path_in_build_dir]) json_per_build['errors'].append([what, path_in_build_dir])
if not options.json or options.verbose: if options and (options.verbose or not options.json):
logging.error('Found %s at %s' % (what, path_in_build_dir)) logging.error('Found %s at %s' % (what, path_in_build_dir))
return 1 return 1
@ -196,6 +204,8 @@ def scan_source(build_dir, build=metadata.Build()):
for sp in safe_paths: for sp in safe_paths:
if sp.match(path): if sp.match(path):
return True return True
if imghdr.what(path) is not None:
return True
return False return False
gradle_compile_commands = get_gradle_compile_commands(build) gradle_compile_commands = get_gradle_compile_commands(build)
@ -225,25 +235,29 @@ def scan_source(build_dir, build=metadata.Build()):
path_in_build_dir = os.path.relpath(filepath, build_dir) path_in_build_dir = os.path.relpath(filepath, build_dir)
_ignored, ext = common.get_extension(path_in_build_dir) _ignored, ext = common.get_extension(path_in_build_dir)
if ext == 'so': if curfile in ('gradle-wrapper.jar', 'gradlew', 'gradlew.bat'):
count += handleproblem('shared library', path_in_build_dir, filepath) removeproblem(curfile, path_in_build_dir, filepath)
elif ext == 'a':
count += handleproblem('static library', path_in_build_dir, filepath)
elif ext == 'class':
count += handleproblem('Java compiled class', path_in_build_dir, filepath)
elif ext == 'apk': elif ext == 'apk':
removeproblem('APK file', path_in_build_dir, filepath) removeproblem(_('Android APK file'), path_in_build_dir, filepath)
elif ext == 'a':
count += handleproblem(_('static library'), path_in_build_dir, filepath)
elif ext == 'aar':
count += handleproblem(_('Android AAR library'), path_in_build_dir, filepath)
elif ext == 'class':
count += handleproblem(_('Java compiled class'), path_in_build_dir, filepath)
elif ext == 'dex':
count += handleproblem(_('Android DEX code'), path_in_build_dir, filepath)
elif ext == 'gz':
count += handleproblem(_('gzip file archive'), path_in_build_dir, filepath)
elif ext == 'so':
count += handleproblem(_('shared library'), path_in_build_dir, filepath)
elif ext == 'zip':
count += handleproblem(_('ZIP file archive'), path_in_build_dir, filepath)
elif ext == 'jar': elif ext == 'jar':
for name in suspects_found(curfile): for name in suspects_found(curfile):
count += handleproblem('usual suspect \'%s\'' % name, path_in_build_dir, filepath) count += handleproblem('usual suspect \'%s\'' % name, path_in_build_dir, filepath)
if curfile == 'gradle-wrapper.jar': count += handleproblem(_('Java JAR file'), path_in_build_dir, filepath)
removeproblem('gradle-wrapper.jar', path_in_build_dir, filepath)
else:
warnproblem('JAR file', path_in_build_dir)
elif ext == 'aar':
warnproblem('AAR file', path_in_build_dir)
elif ext == 'java': elif ext == 'java':
if not os.path.isfile(filepath): if not os.path.isfile(filepath):
@ -265,9 +279,8 @@ def scan_source(build_dir, build=metadata.Build()):
count += handleproblem("usual suspect \'%s\'" % (name), count += handleproblem("usual suspect \'%s\'" % (name),
path_in_build_dir, filepath) path_in_build_dir, filepath)
noncomment_lines = [line for line in lines if not common.gradle_comment.match(line)] noncomment_lines = [line for line in lines if not common.gradle_comment.match(line)]
joined = re.sub(r'[\n\r\s]+', ' ', ' '.join(noncomment_lines)) no_comments = re.sub(r'/\*.*?\*/', '', ''.join(noncomment_lines), flags=re.DOTALL)
for m in gradle_mavenrepo.finditer(joined): for url in MAVEN_URL_REGEX.findall(no_comments):
url = m.group(2)
if not any(r.match(url) for r in allowed_repos): if not any(r.match(url) for r in allowed_repos):
count += handleproblem('unknown maven repo \'%s\'' % url, path_in_build_dir, filepath) count += handleproblem('unknown maven repo \'%s\'' % url, path_in_build_dir, filepath)
@ -277,16 +290,16 @@ def scan_source(build_dir, build=metadata.Build()):
elif is_executable(filepath): elif is_executable(filepath):
if is_binary(filepath) and not safe_path(path_in_build_dir): if is_binary(filepath) and not safe_path(path_in_build_dir):
warnproblem('possible binary', path_in_build_dir) warnproblem(_('executable binary, possibly code'), path_in_build_dir)
for p in scanignore: for p in scanignore:
if p not in scanignore_worked: if p not in scanignore_worked:
logging.error('Unused scanignore path: %s' % p) logging.error(_('Unused scanignore path: %s') % p)
count += 1 count += 1
for p in scandelete: for p in scandelete:
if p not in scandelete_worked: if p not in scandelete_worked:
logging.error('Unused scandelete path: %s' % p) logging.error(_('Unused scandelete path: %s') % p)
count += 1 count += 1
return count return count
@ -336,7 +349,7 @@ def main():
if app.Disabled and not options.force: if app.Disabled and not options.force:
logging.info(_("Skipping {appid}: disabled").format(appid=appid)) logging.info(_("Skipping {appid}: disabled").format(appid=appid))
json_per_appid = json_per_appid['infos'].append('Skipping: disabled') json_per_appid['disabled'] = json_per_build['infos'].append('Skipping: disabled')
continue continue
try: try:
@ -352,7 +365,7 @@ def main():
else: else:
logging.info(_("{appid}: no builds specified, running on current source state") logging.info(_("{appid}: no builds specified, running on current source state")
.format(appid=appid)) .format(appid=appid))
json_per_build = {'errors': [], 'warnings': [], 'infos': []} json_per_build = DEFAULT_JSON_PER_BUILD
json_per_appid['current-source-state'] = json_per_build json_per_appid['current-source-state'] = json_per_build
count = scan_source(build_dir) count = scan_source(build_dir)
if count > 0: if count > 0:
@ -362,7 +375,7 @@ def main():
app.builds = [] app.builds = []
for build in app.builds: for build in app.builds:
json_per_build = {'errors': [], 'warnings': [], 'infos': []} json_per_build = DEFAULT_JSON_PER_BUILD
json_per_appid[build.versionCode] = json_per_build json_per_appid[build.versionCode] = json_per_build
if build.disable and not options.force: if build.disable and not options.force:

View File

@ -132,7 +132,6 @@ class BuildTest(unittest.TestCase):
fdroidserver.common.fill_config_defaults(config) fdroidserver.common.fill_config_defaults(config)
fdroidserver.common.config = config fdroidserver.common.config = config
fdroidserver.build.options = mock.Mock() fdroidserver.build.options = mock.Mock()
fdroidserver.build.options.json = False
fdroidserver.build.options.notarball = True fdroidserver.build.options.notarball = True
fdroidserver.build.options.skipscan = False fdroidserver.build.options.skipscan = False
@ -141,7 +140,8 @@ class BuildTest(unittest.TestCase):
build = fdroidserver.metadata.Build() build = fdroidserver.metadata.Build()
build.commit = '1.0' build.commit = '1.0'
build.output = app.id + '.apk' build.output = app.id + '.apk'
build.scanignore = ['baz.so'] build.scandelete = ['baz.so']
build.scanignore = ['foo.aar']
build.versionCode = '1' build.versionCode = '1'
build.versionName = '1.0' build.versionName = '1.0'
vcs = mock.Mock() vcs = mock.Mock()
@ -186,11 +186,11 @@ class BuildTest(unittest.TestCase):
force=False, onserver=False, refresh=False force=False, onserver=False, refresh=False
) )
self.assertTrue(os.path.exists('baz.so'))
self.assertTrue(os.path.exists('foo.aar')) self.assertTrue(os.path.exists('foo.aar'))
self.assertTrue(os.path.isdir('build')) self.assertTrue(os.path.isdir('build'))
self.assertTrue(os.path.isdir('reports')) self.assertTrue(os.path.isdir('reports'))
self.assertTrue(os.path.isdir('target')) self.assertTrue(os.path.isdir('target'))
self.assertFalse(os.path.exists('baz.so'))
self.assertFalse(os.path.exists('bin')) self.assertFalse(os.path.exists('bin'))
self.assertFalse(os.path.exists('build/reports')) self.assertFalse(os.path.exists('build/reports'))
self.assertFalse(os.path.exists('gen')) self.assertFalse(os.path.exists('gen'))

View File

@ -0,0 +1,778 @@
- "\tmaven {\n\t\t\turl \"$rootDir/../node_modules/react-native-background-fetch/android/libs\"\
\n\t\t}"
- "\tmaven {\n\t\t\turl \"https://plugins.gradle.org/m2/\"\n\t\t}"
- "\tmaven {\n\t\t\turl 'http://4thline.org/m2'\n\t\t}"
- "\tmaven {\n\t\t\turl 'https://maven.google.com/'\n\t\t\tname 'Google'\n\t\t}"
- "\tmaven {\n\t\turl \"file://$pwd/.m2repo\"\n\t}"
- "\tmaven {\n\t\turl \"https://jitpack.io\"\n\t}"
- "\tmaven {\n\t\turl 'https://maven.google.com/'\n\t\tname 'Google'\n\t}"
- "\tmaven {\n\t url 'https://maven.google.com'\n\t}"
- "\tmaven { url \"http://JRAF.org/static/maven/2\" }"
- "\tmaven { url \"http://dl.bintray.com/populov/maven\" }"
- "\tmaven { url \"https://jitpack.io\" }"
- "\tmaven { url 'http://maven.ghostscript.com/' }"
- "\tmaven { url 'https://jitpack.io' }"
- "\tmaven { url 'https://maven.fabric.io/public' }"
- "\tmaven { url MAVEN_REPO }"
- " maven {\n\t url 'https://jitpack.io'\n }"
- " maven {\n url rootProject.ext.mavenRepo\n \
\ if (!rootProject.ext.mavenRepo.startsWith(\"file\")) {\n \
\ credentials {\n username rootProject.ext.mavenUser\n\
\ password rootProject.ext.mavenPassword\n \
\ }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n url \"$rootDir/libs/gutenberg-mobile/node_modules/react-native/android\"\
\n }"
- " maven {\n url \"file:~/.m2/\"\n artifactUrls \"\
file:~/.m2/\"\n }"
- " maven {\n url \"https://maven-central-asia.storage-download.googleapis.com/repos/central/data/\"\
\n content {\n excludeGroup(\"Kotlin/Native\"\
)\n }"
- " maven {\n url \"https://maven-central-asia.storage-download.googleapis.com/repos/central/data/\"\
\n }"
- " maven {\n url \"https://plugins.gradle.org/m2/\"\n }"
- " maven {\n url \"https://repo.commonsware.com.s3.amazonaws.com\"\
\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n // All of React Native (JS, Android binaries) is installed\
\ from npm\n url \"$rootDir/react/node_modules/react-native/android\"\
\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n // url \"$rootDir/../node_modules/react-native/android\"\
\n\n // Replace AAR from original RN with AAR from react-native-v8\n\
\ url(\"$rootDir/../node_modules/react-native-v8/dist\")\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n url \"$rootDir/../node_modules/react-native/android\"\
\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n url(\"$rootDir/../node_modules/react-native/android\"\
)\n }"
- " maven {\n // Android JSC is installed from npm\n url(\"\
$rootDir/../node_modules/jsc-android/dist\")\n }"
- " maven {\n // Android JSC is installed from npm\n url(\"\
$rootDir/react/node_modules/jsc-android/dist\")\n }"
- " maven {\n // Local Maven repo containing AARs with JSC library built\
\ for Android\n // url \"$rootDir/../node_modules/jsc-android/dist\"\n\
\n // prebuilt libv8android.so\n url(\"$rootDir/../node_modules/v8-android/dist\"\
)\n }"
- " maven {\n // Local Maven repo containing AARs with JSC library built\
\ for Android\n url \"$rootDir/../node_modules/jsc-android/dist\"\n \
\ }"
- " maven {\n //noinspection GroovyAssignabilityCheck\n url\
\ 'https://jitpack.io'\n }"
- " maven {\n //noinspection GroovyAssignabilityCheck\n url\
\ 'https://s3.amazonaws.com/moat-sdk-builds'\n }"
- " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\
\ name 'Google'\n }"
- " maven {\n name 'glide-snapshot'\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n name 'glide-snapshot'\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n name = \"sonatype\"\n\n def releasesRepoUrl =\
\ \"https://oss.sonatype.org/service/local/staging/deploy/maven2/\"\n \
\ def snapshotsRepoUrl = \"https://oss.sonatype.org/content/repositories/snapshots/\"\
\n url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl\n\
\n credentials {\n username ossrhUsername\n \
\ password ossrhPassword\n }"
- " maven {\n url \"http://developer.huawei.com/repo/\"\n }"
- " maven {\n url \"http://dl.bintray.com/dasar/maven\"\n }"
- " maven {\n url \"http://dl.bintray.com/jenzz/maven\"\n }"
- " maven {\n url \"http://dl.bintray.com/journeyapps/maven\"\n \
\ }"
- " maven {\n url \"http://dl.bintray.com/lukaville/maven\"\n }"
- " maven {\n url \"http://dl.bintray.com/ona/kujaku\"\n }"
- " maven {\n url \"http://dl.bintray.com/piasy/maven\"\n content\
\ {\n includeGroupByRegex \"com\\\\.github\\\\.piasy\"\n \
\ }"
- " maven {\n url \"http://kotlin.bintray.com/kotlin-dev\"\n \
\ content {\n excludeGroup(\"Kotlin/Native\")\n }"
- " maven {\n url \"http://oss.sonatype.org/content/repositories/snapshots\"\
\n }"
- " maven {\n url \"https://clojars.org/repo/\"\n }"
- " maven {\n url \"https://dl.bintray.com/kotlin/ktor\"\n content\
\ {\n excludeGroup(\"Kotlin/Native\")\n }"
- " maven {\n url \"https://dl.bintray.com/soywiz/soywiz\"\n \
\ content {\n excludeGroup(\"Kotlin/Native\")\n }"
- " maven {\n url \"https://dl.bintray.com/wire-android/third-party\"\n\
\ }"
- " maven {\n url \"https://github.com/vector-im/jitsi_libre_maven/raw/master/releases\"\
\n }"
- " maven {\n url \"https://jitpack.io\"\n\n }"
- " maven {\n url \"https://jitpack.io\"\n content {\n \
\ // For some reason gradle attempts to get bugsnag from here, which returns\
\ 522\n // after which gradle just drops jitpack. Exclude so it doesn't\
\ bother trying.\n excludeGroupByRegex \".*bugsnag.*\"\n \
\ }"
- " maven {\n url \"https://jitpack.io\"\n content {\n \
\ excludeGroup(\"Kotlin/Native\")\n }"
- " maven {\n url \"https://jitpack.io\"\n }"
- " maven {\n url \"https://jitpack.io/\"\n }"
- " maven {\n url \"https://kotlin.bintray.com/kotlinx\"\n content\
\ {\n excludeGroup(\"Kotlin/Native\")\n }"
- " maven {\n url \"https://maven-central-asia.storage-download.googleapis.com/repos/central/data/\"\
\n }"
- " maven {\n url \"https://maven.fabric.io/public\"\n }"
- " maven {\n url \"https://maven.google.com\"\n name 'Google'\n\
\ }"
- " maven {\n url \"https://maven.google.com\"\n }"
- " maven {\n url \"https://maven.google.com/\"\n }"
- " maven {\n url \"https://maven.mozilla.org/maven2\"\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\
\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots/\"\
\n }"
- " maven {\n url \"https://plugins.gradle.org/m2/\"\n }"
- " maven {\n url \"https://repo1.maven.org/maven2\"\n jcenter()\n\
\ }"
- " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \
\ }"
- " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \
\ }"
- " maven {\n url \"https://snapshots.maven.mozilla.org/maven2\"\n \
\ }"
- " maven {\n url '${mavenUrl}"
- " maven {\n url 'http://maven.aliyun.com/nexus/content/repositories/releases/'\n\
\ }"
- " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots/'\n\
\ }"
- " maven {\n url 'http://www.idescout.com/maven/repo/'\n name\
\ 'IDEScout, Inc.'\n }"
- " maven {\n url 'http://www.idescout.com/maven/repo/'\n }"
- " maven {\n url 'https://clojars.org/repo'\n }"
- " maven {\n url 'https://dl.bintray.com/alexeydanilov/maven'\n \
\ }"
- " maven {\n url 'https://dl.bintray.com/drummer-aidan/maven'\n \
\ }"
- " maven {\n url 'https://dl.bintray.com/kotlin/kotlin-eap'\n \
\ content {\n excludeGroup(\"Kotlin/Native\")\n }"
- " maven {\n url 'https://github.com/suckgamony/RapidDecoder/raw/master/repository'\n\
\ }"
- " maven {\n url 'https://github.com/uPhyca/stetho-realm/raw/master/maven-repo'\n\
\ }"
- " maven {\n url 'https://jitpack.io'\n content {\n \
\ // Use this repo only for matrix SDK library\n includeGroupByRegex\
\ \"com\\\\.github\\\\.Bubu\"\n // Also add subgroups, due to SDK\
\ split into modules\n includeGroupByRegex \"com\\\\.github\\\\.Bubu\\\
\\.matrix-android-sdk\"\n // And Olm library\n includeGroupByRegex\
\ \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n // And PhotoView\n\
\ includeGroupByRegex \"com\\\\.github\\\\.chrisbanes\"\n \
\ }"
- " maven {\n url 'https://jitpack.io'\n content {\n \
\ // Use this repo only for olm library\n includeGroupByRegex\
\ \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n // And also for\
\ FilePicker\n includeGroupByRegex \"com\\\\.github\\\\.jaiselrahman\"\
\n // And monarchy\n includeGroupByRegex \"com\\\\\
.github\\\\.Zhuinden\"\n // And ucrop\n includeGroupByRegex\
\ \"com\\\\.github\\\\.yalantis\"\n // JsonViewer\n \
\ includeGroupByRegex 'com\\\\.github\\\\.BillCarsonFr'\n }"
- " maven {\n url 'https://jitpack.io'\n }"
- " maven {\n url 'https://jitpack.io/'\n }"
- " maven {\n url 'https://maven.aliyun.com/repository/google'\n \
\ name 'replace google()'\n }"
- " maven {\n url 'https://maven.aliyun.com/repository/jcenter'\n \
\ name 'replace jcenter()'\n }"
- " maven {\n url 'https://maven.aliyun.com/repository/public'\n \
\ name 'replace jcenter() and mavenCentral()'\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n url 'https://maven.google.com'\n // Alternative\
\ URL is 'https://dl.google.com/dl/android/maven2/'\n }"
- " maven {\n url 'https://maven.google.com'\n }"
- " maven {\n url 'https://maven.google.com/'\n name 'Google'\n\
\ }"
- " maven {\n url 'https://maven.google.com/'\n }"
- " maven {\n url 'https://oss.sonatype.org/content/groups/public'\n \
\ }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\
\ content {\n excludeGroup(\"Kotlin/Native\")\n \
\ }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\
\ }"
- " maven {\n url 'https://plugins.gradle.org/m2'\n }"
- " maven {\n url 'https://plugins.gradle.org/m2/'\n }"
- " maven {\n url 'https://www.jitpack.io'\n }"
- " maven {\n url rootProject.ext.mavenRepo\n if (!rootProject.ext.mavenRepo.startsWith(\"\
file\")) {\n credentials {\n username rootProject.ext.mavenUser\n\
\ password rootProject.ext.mavenPassword\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n url 'https://maven.google.com/'\n }"
- " maven {\n credentials {\n username System.env.ANDVIANE_USERNAME\n password System.env.ANDVIANE_PASSWORD\n }\n //url 'https://oss.sonatype.org/content/repositories/snapshots'\n url 'https://oss.sonatype.org/service/local/staging/deploy/maven2'\n }"
- " maven {\n // CUTR Releases\n url \"https://github.com/CUTR-at-USF/cutr-mvn-repo/raw/master/snapshots\"\
\n }"
- " maven {\n // Git project library as local library project (ucrop) - see\
\ https://jitpack.io/docs/\n url 'https://jitpack.io'\n }"
- " maven {\n // Need manual cleanup for new SNAPSHOT update if same name with\
\ date change only:\n // Smack official SNAPSHOT repository accepted by F-Droid\n\
\ url 'https://oss.sonatype.org/content/repositories/snapshots'\n\n \
\ // Smack custom library for org.igniterealtime - not recognize by F-Droid\n\
\ // url 'https://igniterealtime.org/repo/'\n\n // Custom library\
\ for org.jitsi - maven-metadata.xml not compatible\n // Unable to load Maven\
\ meta-data from https://github.com/jitsi/jitsi-maven-repository/tree/master/snapshots/org/jitsi/ice4j/2.0.0-SNAPSHOT/maven-metadata.xml.\n\
\ // org.xml.sax.SAXParseException; lineNumber: 44; columnNumber: 91; Attribute\
\ name \"data-pjax-transient\" associated with an element type \"meta\" must be\
\ followed by the ' = ' character.\n // url 'https://github.com/jitsi/jitsi-maven-repository/tree/master/snapshots'\n\
\ }"
- " maven {\n // OBA Releases - for comparator to sort alphanumeric routes\n\
\ url \"http://nexus.onebusaway.org/nexus/content/repositories/releases\"\
\n }"
- " maven {\n // TODO: Remove this after support library v24 public release.\n\
\ url \"$rootDir/prebuilts/fullsdk/extras/android/m2repository\"\n }"
- " maven {\n // This maven repo contains artifacts for Flutter's Android embedding.\n\
\ url 'http://download.flutter.io'\n }"
- " maven {\n // This maven repo is created when you run `flutter build aar`.\
\ It contains compiled code\n // and resources for flutter_module itself.\n\
\ url '../../flutter_module/build/host/outputs/repo'\n }"
- " maven {\n // Used only for PhotoView\n url \"https://jitpack.io\"\
\n name 'JitPack Github wrapper'\n }"
- " maven {\n // for Amazon Maps\n url uri('../.m2/repository')\n \
\ }"
- " maven {\n // for testlib\n url \"http://dl.bintray.com/acrowntest/ES_SDK\"\
\n }"
- " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\
\ name 'Google'\n }"
- " maven {\n url \"http://4thline.org/m2\"\n }"
- " maven {\n url \"http://maven.chunyu.mobi/content/groups/public/\"\n \
\ credentials {\n username maven_user\n password maven_password\n\
\ }"
- " maven {\n url \"https://dl.google.com/dl/android/maven2/\"\n }"
- " maven {\n url \"https://jitpack.io\"\n }"
- " maven {\n url \"https://maven.fabric.io/public\"\n }"
- " maven {\n url \"https://maven.google.com\"\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/releases\"\
\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\
\n }"
- " maven {\n url \"https://repo.eclipse.org/content/repositories/paho-releases/\"\
\n }"
- " maven {\n url '../..'\n }"
- " maven {\n url 'https://dl.bintray.com/amulyakhare/maven'\n }"
- " maven {\n url 'https://github.com/Goddchen/mvn-repo/raw/master/'\n }"
- " maven {\n url 'https://jitpack.io'\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n url 'https://maven.google.com'\n // Alternative URL is\
\ 'https://dl.google.com/dl/android/maven2/'\n url \"https://jitpack.io\"\
\n }"
- " maven {\n url 'https://maven.google.com'\n }"
- " maven {\n url 'https://maven.google.com/'\n name 'Google'\n }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\
\ }"
- " maven {\n url 'https://raw.githubusercontent.com/felixb/mvn-repo/master'\n\
\ }"
- " maven {\n url 'third_party/m2'\n }"
- " maven {\n url xwalkMavenRepo\n }"
- " maven {\n url(\"https://maven.fabric.io/public\")\n }"
- " maven {\n url(\"https://oss.sonatype.org/content/repositories/snapshots\"\
)\n }"
- " maven {\n url \"$buildDir/repo\"\n }"
- " maven {\n url \"https://jitpack.io\"\n }"
- " maven {\n url \"https://maven.google.com\"\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots/\"\
\n }"
- " maven {\n url \"https://plugins.gradle.org/m2/\"\n }"
- " maven {\n url 'http://download.crashlytics.com/maven'\n }"
- " maven {\n url 'https://clojars.org/repo/'\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\
\ }"
- " maven {\n url 'https://raw.github.com/ark/ark/master/releases/'\n }"
- " maven {\n url 'https://raw.github.com/iFixit/ark/master/releases/'\n }"
- " maven {\n setUrl(\"https://plugins.gradle.org/m2/\")\n }"
- " maven {\n url 'https://maven.google.com'\n }"
- ' maven {
// url "https://jitpack.io"
// url "https://maven-central.storage.googleapis.com"
// url "http://repo.spring.io/plugins-release/"
// }'
- ' maven { url "https://maven.google.com" }'
- ' maven { setUrl("https://www.jitpack.io") }'
- ' maven { url "https://dl.bintray.com/bjoernq/maven" }'
- ' maven { url "https://dl.bintray.com/ligi/maven" }'
- ' maven { url "https://dl.bintray.com/lukaville/maven" }'
- ' maven { url "https://jetbrains.bintray.com/trove4j" }'
- ' maven { url "$rootDir/../node_modules/react-native/android" }'
- ' maven { url "file:///home/snowdream/workspace/git/mvn-repo/releases/" }'
- ' maven { url "file:///home/snowdream/workspace/git/mvn-repo/snapshots/" }'
- ' maven { url "http://dl.bintray.com/arturbosch/code-analysis" }'
- ' maven { url "http://dl.bintray.com/countly/maven" }'
- ' maven { url "http://dl.bintray.com/drummer-aidan/maven" }'
- ' maven { url "http://dl.bintray.com/drummer-aidan/maven/com/afollestad" }'
- ' maven { url "http://dl.bintray.com/lukaville/maven" }'
- ' maven { url "http://dl.bintray.com/mobisystech/maven" }'
- ' maven { url "http://dl.bintray.com/populov/maven" }'
- ' maven { url "http://kotlin.bintray.com/kotlin-dev" }'
- ' maven { url "http://maven.batch.com/release" }'
- ' maven { url "http://objectbox.net/beta-repo/" }'
- ' maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }'
- ' maven { url "http://repo.commonsware.com.s3.amazonaws.com" }'
- ' maven { url "http://repo1.maven.org/maven2" }'
- ' maven { url "http://repository.apache.org/snapshots/" }'
- ' maven { url "http://snowdream.github.io/mvn-repo/releases/" }'
- ' maven { url "http://snowdream.github.io/mvn-repo/snapshots/" }'
- ' maven { url "http://storage.googleapis.com/r8-releases/raw/master" }'
- ' maven { url "https://clojars.org/repo" }'
- ' maven { url "https://clojars.org/repo/" }'
- ' maven { url "https://dl.bintray.com/acra/maven" }'
- ' maven { url "https://dl.bintray.com/asf/asf" }'
- ' maven { url "https://dl.bintray.com/badoo/maven" }'
- ' maven { url "https://dl.bintray.com/dasar/maven" }'
- ' maven { url "https://dl.bintray.com/drummer-aidan/maven" }'
- ' maven { url "https://dl.bintray.com/florent37/maven" }'
- ' maven { url "https://dl.bintray.com/gericop/maven" }'
- ' maven { url "https://dl.bintray.com/kotlin/ktor" }'
- ' maven { url "https://dl.bintray.com/markusamshove/maven" }'
- ' maven { url "https://dl.bintray.com/mockito/maven" }'
- ' maven { url "https://dl.bintray.com/robstoll/tutteli-jars" }'
- ' maven { url "https://dl.bintray.com/videolan/Android" }'
- ' maven { url "https://dl.bintray.com/wire-android/releases" }'
- ' maven { url "https://dl.bintray.com/wire-android/releases/" }'
- ' maven { url "https://dl.bintray.com/wire-android/snapshots" }'
- ' maven { url "https://dl.bintray.com/wire-android/snapshots/" }'
- ' maven { url "https://dl.bintray.com/wire-android/third-party" }'
- ' maven { url "https://dl.bintray.com/wire-android/third-party/" }'
- ' maven { url "https://dl.bintray.com/wordpress-mobile/maven" }'
- ' maven { url "https://dl.bintray.com/wordpress-mobile/react-native-mirror/" }'
- ' maven { url "https://fusesource.github.io/jansi/" }'
- ' maven { url "https://giphy.bintray.com/giphy-sdk" }'
- ' maven { url "https://github.com/jitsi/jitsi-maven-repository/raw/master/releases"
}'
- ' maven { url "https://jcenter.bintray.com" }'
- " maven { url \"https://jitpack.io\"\n }"
- ' maven { url "https://jitpack.io" }'
- ' maven { url "https://jitpack.io"}'
- ' maven { url "https://kotlin.bintray.com/kotlinx" }'
- ' maven { url "https://mapbox.bintray.com/mapbox" }'
- ' maven { url "https://maven-central-asia.storage-download.googleapis.com/repos/central/data/"
}'
- ' maven { url "https://maven.fabric.io/public" }'
- " maven { url \"https://maven.google.com\"\n }"
- ' maven { url "https://maven.google.com" }'
- ' maven { url "https://maven.google.com"}'
- ' maven { url "https://maven.google.com/" }'
- ' maven { url "https://oss.sonatype.org/content/groups/public" }'
- ' maven { url "https://oss.sonatype.org/content/groups/public/" }'
- ' maven { url "https://oss.sonatype.org/content/repositories/releases/" }'
- ' maven { url "https://oss.sonatype.org/content/repositories/snapshots" }'
- ' maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }'
- ' maven { url "https://plugins.gradle.org/m2" }'
- ' maven { url "https://plugins.gradle.org/m2/" }'
- ' maven { url "https://plugins.gradle.org/m2/"}'
- ' maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master"
}'
- ' maven { url "https://repo.commonsware.com.s3.amazonaws.com" }'
- ' maven { url "https://repo.eclipse.org/content/groups/releases" }'
- ' maven { url "https://repo.maven.apache.org/maven2" }'
- ' maven { url "https://repo1.maven.org/maven2/" }'
- ' maven { url "https://s3.amazonaws.com/moat-sdk-builds" }'
- ' maven { url "https://s3.amazonaws.com/repo.commonsware.com" }'
- ' maven { url "https://www.jitpack.io" }'
- ' maven { url ''file:///usr/share/maven-repo'' }'
- ' maven { url ''http://dl.bintray.com/amulyakhare/maven'' }'
- ' maven { url ''http://download.crashlytics.com/maven'' }'
- ' maven { url ''http://guardian.github.com/maven/repo-releases'' }'
- ' maven { url ''http://igniterealtime.org/repo'' }'
- ' maven { url ''http://maven.ghostscript.com/'' }'
- ' maven { url ''http://nexus.testobject.org/nexus/content/repositories/testobject-public-alpha-repo''
}'
- ' maven { url ''http://oss.sonatype.org/content/repositories/snapshots'' }'
- ' maven { url ''http://repo1.maven.org/maven2'' }'
- ' maven { url ''http://wordpress-mobile.github.io/WordPress-Android'' }'
- ' maven { url ''https://dl.bintray.com/badoo/maven'' }'
- ' maven { url ''https://dl.bintray.com/content/simonpoole/android'' }'
- ' maven { url ''https://dl.bintray.com/content/simonpoole/div'' }'
- ' maven { url ''https://dl.bintray.com/content/simonpoole/osm'' }'
- ' maven { url ''https://dl.bintray.com/florent37/maven'' }'
- ' maven { url ''https://dl.bintray.com/intercom/intercom-maven'' }'
- ' maven { url ''https://dl.bintray.com/jenly/maven'' }'
- ' maven { url ''https://dl.bintray.com/jetbrains/anko'' }'
- ' maven { url ''https://dl.bintray.com/kotlin/kotlin-eap'' }'
- ' maven { url ''https://dl.bintray.com/twofortyfouram/maven'' }'
- ' maven { url ''https://dl.bintray.com/umsdk/release'' }'
- ' maven { url ''https://dl.google.com/dl/android/maven2/'' }'
- ' maven { url ''https://github.com/FireZenk/maven-repo/raw/master/'' }'
- ' maven { url ''https://github.com/uPhyca/stetho-realm/raw/master/maven-repo'' }'
- ' maven { url ''https://guardian.github.com/maven/repo-releases'' }'
- ' maven { url ''https://igniterealtime.org/repo'' }'
- ' maven { url ''https://jitpack.io'' }'
- ' maven { url ''https://jitpack.io/'' }'
- ' maven { url ''https://maven.fabric.io/public'' }'
- ' maven { url ''https://maven.fabric.io/repo'' }'
- ' maven { url ''https://maven.google.com'' }'
- ' maven { url ''https://maven.google.com/'' }'
- ' maven { url ''https://oss.jfrog.org/artifactory/oss-snapshot-local/'' }'
- ' maven { url ''https://oss.sonatype.org/content/repositories/releases/'' }'
- ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots'' }'
- ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots/'' }'
- ' maven { url ''https://plugins.gradle.org/m2/'' }'
- ' maven { url ''https://plugins.gradle.org/m2/''}'
- ' maven { url ''https://repo1.maven.org/maven2'' }'
- ' maven { url ''https://repos.zeroturnaround.com/nexus/content/repositories/zt-public-releases''
}'
- ' maven { url ''https://repository-achartengine.forge.cloudbees.com/snapshot/''
}'
- ' maven { url ''https://s3.amazonaws.com/repo.commonsware.com'' }'
- ' maven { url ''https://www.jitpack.io'' }'
- ' maven { url ''https://zendesk.jfrog.io/zendesk/repo'' }'
- ' maven { url ''libs'' }'
- ' maven { url = "https://storage.googleapis.com/r8-releases/raw" }'
- ' maven { url = uri("https://jitpack.io") }'
- ' maven { url = uri("https://maven.fabric.io/public") }'
- ' maven { url MAVEN_REPO_CACHE }'
- ' maven { url(''http://releases.marmeladburk.fidesmo.com/'') }'
- ' maven {url "http://dl.bintray.com/tbruyelle/tbruyelle" }'
- ' maven {url "https://jitpack.io"}'
- ' maven {url ''http://maven.aliyun.com/nexus/content/groups/public/''}'
- " maven{\n url 'https://maven.fabric.io/public'\n }"
- " maven{\n url'https://plugins.gradle.org/m2/'\n }"
- " maven{\n url \"https://maven.google.com\"\n }"
- " maven{\n url 'https://maven.google.com'\n }"
- ' maven{ url "https://oss.sonatype.org/content/repositories/releases/" }'
- ' maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }'
- ' maven{ url ''http://maven.aliyun.com/nexus/content/groups/public/''}'
- ' maven{ url ''https://jitpack.io'' }'
- ' maven{ url ''https://maven.aliyun.com/repository/google'' }'
- ' maven{ url ''https://maven.aliyun.com/repository/google''}'
- ' maven{ url ''https://maven.aliyun.com/repository/gradle-plugin''}'
- ' maven{ url ''https://maven.aliyun.com/repository/jcenter'' }'
- ' maven{ url ''https://maven.aliyun.com/repository/jcenter''}'
- ' maven{ url ''https://maven.aliyun.com/repository/public''}'
- ' maven{url "https://plugins.gradle.org/m2/"}'
- ' maven{url ''http://maven.aliyun.com/nexus/content/groups/public''}'
- "\tmaven {\n\t\t\t\turl \"https://oss.sonatype.org/content/repositories/snapshots\"\
\n\t\t\t}"
- "\tmaven {\n\t\t\turl \"$rootDir/../node_modules/react-native-background-fetch/android/libs\"\
\n\t\t}"
- "\tmaven {\n\t\t\turl \"https://jitpack.io\"\n\t\t}"
- "\tmaven {\n\t\t\turl \"https://plugins.gradle.org/m2/\"\n\t\t}"
- "\tmaven {\n\t\t\turl 'http://4thline.org/m2'\n\t\t}"
- "\tmaven {\n\t\t\turl 'https://maven.google.com/'\n\t\t\tname 'Google'\n\t\t}"
- "\tmaven {\n\t\t\turl 'https://plugins.gradle.org/m2/'\n\t\t}"
- "\tmaven {\n\t\turl \"file://$pwd/.m2repo\"\n\t}"
- "\tmaven {\n\t\turl \"https://jitpack.io\"\n\t}"
- "\tmaven {\n\t\turl 'https://maven.google.com/'\n\t\tname 'Google'\n\t}"
- "\tmaven {\n // Google Maven Repository\n url 'https://maven.google.com'\n\
\ }"
- "\tmaven { url \"http://dl.bintray.com/populov/maven\" }"
- "\tmaven { url \"https://jitpack.io\" }"
- "\tmaven { url 'http://download.crashlytics.com/maven' }"
- "\tmaven { url 'http://maven.ghostscript.com/' }"
- "\tmaven { url 'https://jitpack.io' }"
- "\tmaven { url 'https://maven.fabric.io/public' }"
- "\tmaven { url MAVEN_REPO }"
- ' maven { url "http://repo1.maven.org/maven2" }'
- " maven {\n\t url 'https://jitpack.io'\n }"
- " maven {\n\t url System.getenv()['ANDROID_HOME'] + \"/extras/android/m2repository\"\
\n }"
- " maven {\n url \"$buildDir/repo\"\n }"
- " maven {\n url \"file:~/.m2/\"\n artifactUrls \"\
file:~/.m2/\"\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\
\n }"
- " maven {\n url \"https://plugins.gradle.org/m2/\"\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n url repository\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n // url \"$rootDir/../node_modules/react-native/android\"\
\n\n // Replace AAR from original RN with AAR from react-native-v8\n\
\ url(\"$rootDir/../node_modules/react-native-v8/dist\")\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n url \"$projectDir/../../node_modules/react-native/android\"\
\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n url \"$projectDir/../../tests/react-test-app/node_modules/react-native/android\"\
\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n url \"$rootDir/../node_modules/react-native/android\"\
\n }"
- " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\
\ is installed from npm\n url(\"$rootDir/../node_modules/react-native/android\"\
)\n }"
- " maven {\n // Android JSC is installed from npm\n url(\"\
$rootDir/../node_modules/jsc-android/dist\")\n }"
- " maven {\n // Local Maven repo containing AARs with JSC library built\
\ for Android\n // url \"$rootDir/../node_modules/jsc-android/dist\"\n\
\n // prebuilt libv8android.so\n url(\"$rootDir/../node_modules/v8-android/dist\"\
)\n }"
- " maven {\n //noinspection GroovyAssignabilityCheck\n url\
\ 'https://jitpack.io'\n }"
- " maven {\n //noinspection GroovyAssignabilityCheck\n url\
\ 'https://s3.amazonaws.com/moat-sdk-builds'\n }"
- " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\
\ name 'Google'\n }"
- " maven {\n name 'glide-snapshot'\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n url \"http://dl.bintray.com/countly/maven\"\n }"
- " maven {\n url \"./maven_repository/\"\n }"
- " maven {\n url \"http://dl.bintray.com/dasar/maven\"\n }"
- " maven {\n url \"http://dl.bintray.com/jenzz/maven\"\n }"
- " maven {\n url \"http://dl.bintray.com/journeyapps/maven\"\n \
\ }"
- " maven {\n url \"http://dl.bintray.com/lukaville/maven\"\n }"
- " maven {\n url \"https://clojars.org/repo/\"\n }"
- " maven {\n url \"https://dl.bintray.com/videolan/Android\"\n \
\ }"
- " maven {\n url \"https://github.com/jitsi/jitsi-maven-repository/raw/master/releases\"\
\n }"
- " maven {\n url \"https://github.com/vector-im/jitsi_libre_maven/raw/master/releases\"\
\n }"
- " maven {\n url \"https://jcenter.bintray.com\"\n }"
- " maven {\n url \"https://jitpack.io\"\n\n }"
- " maven {\n url \"https://jitpack.io\"\n content {\n \
\ // For some reason gradle attempts to get bugsnag from here, which returns\
\ 522\n // after which gradle just drops jitpack. Exclude so it doesn't\
\ bother trying.\n excludeGroupByRegex \".*bugsnag.*\"\n \
\ }"
- " maven {\n url \"https://jitpack.io\"\n }"
- " maven {\n url \"https://jitpack.io/\"\n }"
- " maven {\n url \"https://maven.fabric.io/public\"\n }"
- " maven {\n url \"https://maven.google.com\"\n name 'Google'\n\
\ }"
- " maven {\n url \"https://maven.google.com\"\n }"
- " maven {\n url \"https://maven.google.com/\"\n name 'Google'\n\
\ }"
- " maven {\n url \"https://maven.mozilla.org/maven2\"\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\
\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots/\"\
\n }"
- " maven {\n url \"https://plugins.gradle.org/m2/\"\n }"
- " maven {\n url \"https://repo1.maven.org/maven2\"\n jcenter()\n\
\ }"
- " maven {\n url \"https://repo1.maven.org/maven2\"\n }"
- " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \
\ }"
- " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \
\ }"
- " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots/'\n\
\ }"
- " maven {\n url 'http://www.idescout.com/maven/repo/'\n name\
\ 'IDEScout, Inc.'\n }"
- " maven {\n url 'https://github.com/suckgamony/RapidDecoder/raw/master/repository'\n\
\ }"
- " maven {\n url 'https://jitpack.io'\n content {\n \
\ // Use this repo only for matrix SDK library\n includeGroupByRegex\
\ \"com\\\\.github\\\\.Bubu\"\n // Also add subgroups, due to SDK\
\ split into modules\n includeGroupByRegex \"com\\\\.github\\\\.Bubu\\\
\\.matrix-android-sdk\"\n // And Olm library\n includeGroupByRegex\
\ \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n // And PhotoView\n\
\ includeGroupByRegex \"com\\\\.github\\\\.chrisbanes\"\n \
\ }"
- " maven {\n url 'https://jitpack.io'\n content {\n \
\ // Use this repo only for matrix SDK library\n includeGroupByRegex\
\ \"com\\\\.github\\\\.matrix-org\"\n // Also add subgroups, due\
\ to SDK split into modules\n includeGroupByRegex \"com\\\\.github\\\
\\.matrix-org\\\\.matrix-android-sdk\"\n // And Olm library\n \
\ includeGroupByRegex \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n\
\ // And PhotoView\n includeGroupByRegex \"com\\\\\
.github\\\\.chrisbanes\"\n }"
- " maven {\n url 'https://jitpack.io'\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n url 'https://maven.google.com'\n }"
- " maven {\n url 'https://maven.google.com/'\n name 'Google'\n\
\ }"
- " maven {\n url 'https://maven.google.com/'\n }"
- " maven {\n url 'https://mint.splunk.com/gradle/'\n }"
- " maven {\n url 'https://oss.sonatype.org/content/groups/public'\n \
\ }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\
\ }"
- " maven {\n url 'https://plugins.gradle.org/m2/'\n }"
- " maven {\n url 'https://www.jitpack.io'\n }"
- " maven {\n url = \"${project.buildDir}"
- " maven {\n url(\"$rootDir/../node_modules/jsc-android/dist\")\n \
\ }"
- " maven {\n url(\"$rootDir/../node_modules/react-native/android\")\n\
\ }"
- " maven {\n // For the latest version of GeckoView (moving target!) use:\n\
\ // https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly.latest.mobile.android-api-16-opt/artifacts/public/android/maven\n\
\ //\n // For discovering available versions go to:\n // \
\ https://tools.taskcluster.net/index/gecko.v2.mozilla-central.nightly\n\n \
\ // ARM GeckoView builds\n url \"https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly\"\
\ +\n \".${geckoview_nightly_date}"
- " maven {\n // Replace snapshots by releases for releases !\n url\
\ \"https://linphone.org/snapshots/maven_repository\"\n }"
- " maven {\n // Switch to release for releases !\n url \"https://gitlab.linphone.org/BC/public/maven_repository/raw/master\"\
\n }"
- " maven {\n // TODO: Remove this after support library v24 public release.\n\
\ url \"$rootDir/prebuilts/fullsdk/extras/android/m2repository\"\n }"
- " maven {\n // Used only for PhotoView\n url \"https://jitpack.io\"\
\n name 'JitPack Github wrapper'\n }"
- " maven {\n // aarch64 builds\n url \"https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly\"\
\ +\n \".${geckoview_nightly_date}"
- " maven {\n // x86 GeckoView builds\n url \"https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly\"\
\ +\n \".${geckoview_nightly_date}"
- " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\
\ name 'Google'\n }"
- " maven {\n url \"http://4thline.org/m2\"\n }"
- " maven {\n url \"http://dl.bintray.com/lukaville/maven\"\n }"
- " maven {\n url \"https://dl.google.com/dl/android/maven2/\"\n }"
- " maven {\n url \"https://jitpack.io\"\n }"
- " maven {\n url \"https://linphone.org/maven_repository\"\n }"
- " maven {\n url \"https://maven.fabric.io/public\"\n }"
- " maven {\n url \"https://maven.google.com\"\n }"
- " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\
\n }"
- " maven {\n url \"https://repo.commonsware.com.s3.amazonaws.com\"\n }"
- " maven {\n url \"https://repo1.maven.org/maven2/\"\n }"
- " maven {\n url 'http://4thline.org/m2'\n }"
- " maven {\n url 'http://dl.bintray.com/amulyakhare/maven'\n }"
- " maven {\n url 'https://dl.bintray.com/amulyakhare/maven'\n }"
- " maven {\n url 'https://github.com/Goddchen/mvn-repo/raw/master/'\n }"
- " maven {\n url 'https://github.com/toxbee/mvn-repo/raw/master/maven-deploy'\n\
\ }"
- " maven {\n url 'https://jitpack.io'\n }"
- " maven {\n url 'https://maven.fabric.io/public'\n }"
- " maven {\n url 'https://maven.google.com'\n // Alternative URL is\
\ 'https://dl.google.com/dl/android/maven2/'\n url \"https://jitpack.io\"\
\n }"
- " maven {\n url 'https://maven.google.com'\n }"
- " maven {\n url 'https://maven.google.com/'\n name 'Google'\n }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\
\ }"
- " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\
\ }"
- " maven {\n url 'https://raw.github.com/nicolasjafelle/maven-repo/master/'\n\
\ }"
- " maven {\n url 'https://raw.githubusercontent.com/felixb/mvn-repo/master'\n\
\ }"
- " maven {\n url xwalkMavenRepo\n }"
- " maven {\n url \"https://github.com/Goddchen/mvn-repo/raw/master/\"\n }"
- " maven {\n url \"https://github.com/dahlgren/abs-aar/raw/master\"\n }"
- " maven {\n url \"https://jcenter.bintray.com\"\n }"
- " maven {\n url \"https://repo.commonsware.com.s3.amazonaws.com\"\n }"
- " maven {\n url 'http://download.crashlytics.com/maven'\n }"
- " maven {\n url 'https://maven.google.com/'\n name 'Google'\n }"
- " maven {\n url 'https://raw.github.com/ark/ark/master/releases/'\n }"
- " maven {\n url 'https://raw.github.com/iFixit/ark/master/releases/'\n }"
- " maven {\n setUrl(\"https://plugins.gradle.org/m2/\")\n }"
- " maven {\n url 'https://maven.google.com'\n }"
- ' maven {
// url "https://jitpack.io"
// url "https://maven-central.storage.googleapis.com"
// url "http://repo.spring.io/plugins-release/"
// }'
- ' maven { url "https://maven.google.com" }'
- ' maven { setUrl("https://plugins.gradle.org/m2/") }'
- ' maven { setUrl("https://www.jitpack.io") }'
- ' maven { url "http://dl.bintray.com/dasar/maven" }'
- ' maven { url "https://dl.bintray.com/bjoernq/maven" }'
- ' maven { url "https://dl.bintray.com/ligi/maven" }'
- ' maven { url "https://dl.bintray.com/lukaville/maven" }'
- ' maven { url "https://jetbrains.bintray.com/trove4j" }'
- ' maven { url "$rootDir/../node_modules/react-native/android" }'
- ' maven { url "file:${rootProject.projectDir}'
- ' maven { url "http://dl.bintray.com/amulyakhare/maven" }'
- ' maven { url "http://dl.bintray.com/arturbosch/code-analysis" }'
- ' maven { url "http://dl.bintray.com/countly/maven" }'
- ' maven { url "http://dl.bintray.com/davideas/maven" }'
- ' maven { url "http://dl.bintray.com/drummer-aidan/maven" }'
- ' maven { url "http://dl.bintray.com/drummer-aidan/maven/com/afollestad" }'
- ' maven { url "http://dl.bintray.com/lukaville/maven" }'
- ' maven { url "http://dl.bintray.com/populov/maven" }'
- ' maven { url "http://objectbox.net/beta-repo/" }'
- ' maven { url "http://repo.commonsware.com.s3.amazonaws.com" }'
- ' maven { url "http://repo.maven.apache.org/maven2" }'
- ' maven { url "https://clojars.org/repo" }'
- ' maven { url "https://clojars.org/repo/" }'
- ' maven { url "https://dl.bintray.com/android/android-tools/" }'
- ' maven { url "https://dl.bintray.com/drummer-aidan/maven" }'
- ' maven { url "https://dl.bintray.com/markusamshove/maven" }'
- ' maven { url "https://dl.bintray.com/mockito/maven/" }'
- ' maven { url "https://dl.bintray.com/osborn/Android" }'
- ' maven { url "https://github.com/jitsi/jitsi-maven-repository/raw/master/releases"
}'
- ' maven { url "https://jcenter.bintray.com" }'
- " maven { url \"https://jitpack.io\"\n }"
- ' maven { url "https://jitpack.io" }'
- ' maven { url "https://jitpack.io"}'
- ' maven { url "https://kotlin.bintray.com/kotlinx" }'
- ' maven { url "https://maven.fabric.io/public" }'
- " maven { url \"https://maven.google.com\"\n }"
- ' maven { url "https://maven.google.com" }'
- ' maven { url "https://maven.google.com"}'
- ' maven { url "https://maven.google.com/" }'
- ' maven { url "https://oss.sonatype.org/content/groups/public" }'
- ' maven { url "https://oss.sonatype.org/content/groups/public/" }'
- ' maven { url "https://oss.sonatype.org/content/repositories/releases/" }'
- ' maven { url "https://oss.sonatype.org/content/repositories/snapshots" }'
- ' maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }'
- ' maven { url "https://plugins.gradle.org/m2" }'
- ' maven { url "https://plugins.gradle.org/m2/" }'
- ' maven { url "https://plugins.gradle.org/m2/"}'
- ' maven { url "https://repo.commonsware.com.s3.amazonaws.com" }'
- ' maven { url "https://repo.commonsware.com.s3.amazonaws.com"}'
- ' maven { url "https://repo.eclipse.org/content/groups/releases" }'
- ' maven { url "https://repo.maven.apache.org/maven2" }'
- ' maven { url "https://repository.aspose.com/repo/" }'
- ' maven { url "https://s3.amazonaws.com/repo.commonsware.com" }'
- ' maven { url "https://www.jitpack.io" }'
- ' maven { url ''../../prebuilts/gradle-plugin'' }'
- ' maven { url ''../../prebuilts/tools/common/m2/internal'' }'
- ' maven { url ''../../prebuilts/tools/common/m2/repository'' }'
- ' maven { url ''file:///usr/share/maven-repo'' }'
- ' maven { url ''http://dl.bintray.com/amulyakhare/maven'' }'
- ' maven { url ''http://download.crashlytics.com/maven'' }'
- ' maven { url ''http://guardian.github.com/maven/repo-releases'' }'
- ' maven { url ''http://igniterealtime.org/repo'' }'
- ' maven { url ''http://repo1.maven.org/maven2'' }'
- ' maven { url ''http://wordpress-mobile.github.io/WordPress-Android'' }'
- ' maven { url ''https://dl.bintray.com/content/simonpoole/android'' }'
- ' maven { url ''https://dl.bintray.com/content/simonpoole/div'' }'
- ' maven { url ''https://dl.bintray.com/content/simonpoole/osm'' }'
- ' maven { url ''https://dl.bintray.com/twofortyfouram/maven'' }'
- ' maven { url ''https://dl.google.com/dl/android/maven2/'' }'
- ' maven { url ''https://guardian.github.com/maven/repo-releases'' }'
- ' maven { url ''https://igniterealtime.org/repo'' }'
- ' maven { url ''https://jitpack.io'' }'
- ' maven { url ''https://jitpack.io/'' }'
- ' maven { url ''https://maven.fabric.io/public'' }'
- ' maven { url ''https://maven.fabric.io/repo'' }'
- ' maven { url ''https://maven.google.com'' }'
- ' maven { url ''https://maven.google.com''}'
- ' maven { url ''https://maven.google.com/'' }'
- ' maven { url ''https://oss.jfrog.org/artifactory/oss-snapshot-local/'' }'
- ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots'' }'
- ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots/'' }'
- ' maven { url ''https://plugins.gradle.org/m2/'' }'
- ' maven { url ''https://repo1.maven.org/maven2'' /*maven-central with HTTPS*/}'
- ' maven { url ''https://repo1.maven.org/maven2'' }'
- ' maven { url ''https://repository-achartengine.forge.cloudbees.com/snapshot/''
}'
- ' maven { url ''https://s3.amazonaws.com/repo.commonsware.com'' }'
- ' maven { url ''https://www.jitpack.io'' }'
- ' maven { url ''libs'' }'
- ' maven { url = uri("https://jitpack.io") }'
- ' maven { url = uri("https://maven.fabric.io/public") }'
- ' maven { url MAVEN_REPO_CACHE }'
- ' maven { url(''http://releases.marmeladburk.fidesmo.com/'') }'
- ' maven {url "http://dl.bintray.com/tbruyelle/tbruyelle" }'
- ' maven {url "https://clojars.org/repo/"}'
- ' maven {url "https://jitpack.io"}'
- " maven{\n url 'https://maven.fabric.io/public'\n }"
- " maven{\n url'https://plugins.gradle.org/m2/'\n }"
- " maven{\n url \"https://maven.google.com\"\n }"
- ' maven{ url "https://oss.sonatype.org/content/repositories/releases/" }'
- ' maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }'
- ' maven{ url ''https://jitpack.io'' }'
- ' maven{ url ''https://maven.aliyun.com/repository/google''}'
- ' maven{ url ''https://maven.aliyun.com/repository/gradle-plugin''}'
- ' maven{ url ''https://maven.aliyun.com/repository/jcenter''}'
- ' maven{ url ''https://maven.aliyun.com/repository/public''}'
- ' maven{url "https://jitpack.io"}'
- ' maven{url "https://plugins.gradle.org/m2/"}'

View File

@ -5,10 +5,13 @@ import inspect
import logging import logging
import optparse import optparse
import os import os
import shutil
import sys import sys
import tempfile import tempfile
import textwrap import textwrap
import unittest import unittest
import uuid
import yaml
from unittest import mock from unittest import mock
localmodule = os.path.realpath( localmodule = os.path.realpath(
@ -34,7 +37,7 @@ class ScannerTest(unittest.TestCase):
os.chdir(self.basedir) os.chdir(self.basedir)
def test_scan_source_files(self): def test_scan_source_files(self):
fdroidserver.scanner.options = type('', (), {})() fdroidserver.scanner.options = mock.Mock()
fdroidserver.scanner.options.json = False fdroidserver.scanner.options.json = False
source_files = os.path.join(self.basedir, 'source-files') source_files = os.path.join(self.basedir, 'source-files')
projects = { projects = {
@ -80,6 +83,109 @@ class ScannerTest(unittest.TestCase):
i += 1 i += 1
self.assertEqual(count, i) self.assertEqual(count, i)
def test_scan_source_files_sneaky_maven(self):
"""Check for sneaking in banned maven repos"""
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
os.chdir(testdir)
fdroidserver.scanner.config = None
fdroidserver.scanner.options = mock.Mock()
fdroidserver.scanner.options.json = True
with open('build.gradle', 'w') as fp:
fp.write(textwrap.dedent("""
maven {
"https://jitpack.io"
url 'https://maven.fabric.io/public'
}
maven {
"https://maven.google.com"
setUrl('https://evilcorp.com/maven')
}
"""))
count = fdroidserver.scanner.scan_source(testdir)
self.assertEqual(2, count, 'there should be this many errors')
def test_scan_source_file_types(self):
"""Build product files are not allowed, test they are detected"""
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
os.chdir(testdir)
fdroidserver.scanner.config = None
fdroidserver.scanner.options = mock.Mock()
fdroidserver.scanner.options.json = True
keep = [
'arg.jar',
'ascii.out',
'baz.so',
'classes.dex',
'sqlcipher.aar',
'static.a',
'src/test/resources/classes.dex',
]
remove = [
'gradle-wrapper.jar',
'gradlew',
'gradlew.bat',
]
os.makedirs('src/test/resources', exist_ok=True)
for f in keep + remove:
with open(f, 'w') as fp:
fp.write('placeholder')
self.assertTrue(os.path.exists(f))
binaries = [
'binary.out',
'fake.png',
'snippet.png',
]
with open('binary.out', 'wb') as fp:
fp.write(b'\x00\x00')
fp.write(uuid.uuid4().bytes)
shutil.copyfile('binary.out', 'fake.png')
os.chmod('fake.png', 0o755)
os.system('ls -l binary.out')
with open('snippet.png', 'wb') as fp:
fp.write(b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x000\x00\x00'
b'\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\x00\x00\x00\x04sB'
b'IT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00\tpHYs\x00\x00\n'
b'a\x00\x00\na\x01\xfc\xccJ%\x00\x00\x00\x19tEXtSoftware')
os.chmod('snippet.png', 0o755)
os.system('ls -l fake.png')
count = fdroidserver.scanner.scan_source(testdir)
self.assertEqual(6, count, 'there should be this many errors')
for f in keep + binaries:
self.assertTrue(os.path.exists(f), f + ' should still be there')
for f in remove:
self.assertFalse(os.path.exists(f), f + ' should have been removed')
files = dict()
for section in ('errors', 'infos', 'warnings'):
files[section] = []
for msg, f in fdroidserver.scanner.json_per_build[section]:
files[section].append(f)
self.assertFalse('ascii.out' in files['errors'],
'an ASCII .out file is not an error')
self.assertFalse('snippet.png' in files['errors'],
'an executable valid image is not an error')
self.assertTrue('arg.jar' in files['errors'], 'all JAR files are errors')
self.assertTrue('baz.so' in files['errors'], 'all .so files are errors')
self.assertTrue('binary.out' in files['errors'], 'a binary .out file is an error')
self.assertTrue('classes.dex' in files['errors'], 'all classes.dex files are errors')
self.assertTrue('sqlcipher.aar' in files['errors'], 'all AAR files are errors')
self.assertTrue('static.a' in files['errors'], 'all .a files are errors')
self.assertTrue('fake.png' in files['warnings'],
'a random binary that is executable that is not an image is a warning')
self.assertTrue('src/test/resources/classes.dex' in files['warnings'],
'suspicious file but in a test dir is a warning')
for f in remove:
self.assertTrue(f in files['infos'],
f + ' should be removed with an info message')
def test_build_local_scanner(self): def test_build_local_scanner(self):
"""`fdroid build` calls scanner functions, test them here""" """`fdroid build` calls scanner functions, test them here"""
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir) testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
@ -99,7 +205,7 @@ class ScannerTest(unittest.TestCase):
build = fdroidserver.metadata.Build() build = fdroidserver.metadata.Build()
build.commit = '1.0' build.commit = '1.0'
build.output = app.id + '.apk' build.output = app.id + '.apk'
build.scanignore = ['baz.so'] build.scanignore = ['baz.so', 'foo.aar']
build.versionCode = '1' build.versionCode = '1'
build.versionName = '1.0' build.versionName = '1.0'
vcs = mock.Mock() vcs = mock.Mock()
@ -137,6 +243,20 @@ class ScannerTest(unittest.TestCase):
self.assertTrue(os.path.exists('foo.aar')) self.assertTrue(os.path.exists('foo.aar'))
self.assertFalse(os.path.exists('gradle-wrapper.jar')) self.assertFalse(os.path.exists('gradle-wrapper.jar'))
def test_gradle_maven_url_regex(self):
"""Check the regex can find all the cases"""
with open(os.path.join(self.basedir, 'gradle-maven-blocks.yaml')) as fp:
data = yaml.safe_load(fp)
urls = []
for entry in data:
found = False
for m in fdroidserver.scanner.MAVEN_URL_REGEX.findall(entry):
urls.append(m)
found = True
self.assertTrue(found, 'this block should produce a URL:\n' + entry)
self.assertEqual(len(data), len(urls), 'each data example should produce a URL')
if __name__ == "__main__": if __name__ == "__main__":
os.chdir(os.path.dirname(__file__)) os.chdir(os.path.dirname(__file__))