1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-07-04 16:30:12 +02: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:
# Scan before building...
logging.info("Scanning source for common problems...")
scanner.options = options # pass verbose through
count = scanner.scan_source(build_dir, build)
if count > 0:
if force:

View File

@ -16,6 +16,7 @@
# 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/>.
import imghdr
import json
import os
import re
@ -33,7 +34,11 @@ from .exception import BuildException, VCSException
config = 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):
@ -99,8 +104,6 @@ def scan_source(build_dir, build=metadata.Build()):
if r.match(s) and not is_whitelisted(s):
yield n
gradle_mavenrepo = re.compile(r'maven *{ *(url)? *[\'"]?([^ \'"]*)[\'"]?')
allowed_repos = [re.compile(r'^https://' + re.escape(repo) + r'/*') for repo in [
'repo1.maven.org/maven2', # mavenCentral()
'jcenter.bintray.com', # jcenter()
@ -144,33 +147,38 @@ def scan_source(build_dir, build=metadata.Build()):
return False
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:
json_per_build['infos'].append([what, path_in_build_dir])
json_per_build['infos'].append([msg, path_in_build_dir])
return 0
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:
json_per_build['infos'].append([what, path_in_build_dir])
json_per_build['infos'].append([msg, path_in_build_dir])
os.remove(filepath)
return 0
def warnproblem(what, path_in_build_dir):
if toignore(path_in_build_dir):
return
return 0
logging.warning('Found %s at %s' % (what, path_in_build_dir))
if json_per_build is not None:
json_per_build['warnings'].append([what, path_in_build_dir])
return 0
def handleproblem(what, path_in_build_dir, filepath):
if toignore(path_in_build_dir):
return ignoreproblem(what, path_in_build_dir)
if todelete(path_in_build_dir):
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])
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))
return 1
@ -196,6 +204,8 @@ def scan_source(build_dir, build=metadata.Build()):
for sp in safe_paths:
if sp.match(path):
return True
if imghdr.what(path) is not None:
return True
return False
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)
_ignored, ext = common.get_extension(path_in_build_dir)
if ext == 'so':
count += handleproblem('shared library', 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)
if curfile in ('gradle-wrapper.jar', 'gradlew', 'gradlew.bat'):
removeproblem(curfile, path_in_build_dir, filepath)
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':
for name in suspects_found(curfile):
count += handleproblem('usual suspect \'%s\'' % name, path_in_build_dir, filepath)
if curfile == 'gradle-wrapper.jar':
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)
count += handleproblem(_('Java JAR file'), path_in_build_dir, filepath)
elif ext == 'java':
if not os.path.isfile(filepath):
@ -265,9 +279,8 @@ def scan_source(build_dir, build=metadata.Build()):
count += handleproblem("usual suspect \'%s\'" % (name),
path_in_build_dir, filepath)
noncomment_lines = [line for line in lines if not common.gradle_comment.match(line)]
joined = re.sub(r'[\n\r\s]+', ' ', ' '.join(noncomment_lines))
for m in gradle_mavenrepo.finditer(joined):
url = m.group(2)
no_comments = re.sub(r'/\*.*?\*/', '', ''.join(noncomment_lines), flags=re.DOTALL)
for url in MAVEN_URL_REGEX.findall(no_comments):
if not any(r.match(url) for r in allowed_repos):
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):
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:
if p not in scanignore_worked:
logging.error('Unused scanignore path: %s' % p)
logging.error(_('Unused scanignore path: %s') % p)
count += 1
for p in scandelete:
if p not in scandelete_worked:
logging.error('Unused scandelete path: %s' % p)
logging.error(_('Unused scandelete path: %s') % p)
count += 1
return count
@ -336,7 +349,7 @@ def main():
if app.Disabled and not options.force:
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
try:
@ -352,7 +365,7 @@ def main():
else:
logging.info(_("{appid}: no builds specified, running on current source state")
.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
count = scan_source(build_dir)
if count > 0:
@ -362,7 +375,7 @@ def main():
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
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.config = config
fdroidserver.build.options = mock.Mock()
fdroidserver.build.options.json = False
fdroidserver.build.options.notarball = True
fdroidserver.build.options.skipscan = False
@ -141,7 +140,8 @@ class BuildTest(unittest.TestCase):
build = fdroidserver.metadata.Build()
build.commit = '1.0'
build.output = app.id + '.apk'
build.scanignore = ['baz.so']
build.scandelete = ['baz.so']
build.scanignore = ['foo.aar']
build.versionCode = '1'
build.versionName = '1.0'
vcs = mock.Mock()
@ -186,11 +186,11 @@ class BuildTest(unittest.TestCase):
force=False, onserver=False, refresh=False
)
self.assertTrue(os.path.exists('baz.so'))
self.assertTrue(os.path.exists('foo.aar'))
self.assertTrue(os.path.isdir('build'))
self.assertTrue(os.path.isdir('reports'))
self.assertTrue(os.path.isdir('target'))
self.assertFalse(os.path.exists('baz.so'))
self.assertFalse(os.path.exists('bin'))
self.assertFalse(os.path.exists('build/reports'))
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 optparse
import os
import shutil
import sys
import tempfile
import textwrap
import unittest
import uuid
import yaml
from unittest import mock
localmodule = os.path.realpath(
@ -34,7 +37,7 @@ class ScannerTest(unittest.TestCase):
os.chdir(self.basedir)
def test_scan_source_files(self):
fdroidserver.scanner.options = type('', (), {})()
fdroidserver.scanner.options = mock.Mock()
fdroidserver.scanner.options.json = False
source_files = os.path.join(self.basedir, 'source-files')
projects = {
@ -80,6 +83,109 @@ class ScannerTest(unittest.TestCase):
i += 1
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):
"""`fdroid build` calls scanner functions, test them here"""
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.commit = '1.0'
build.output = app.id + '.apk'
build.scanignore = ['baz.so']
build.scanignore = ['baz.so', 'foo.aar']
build.versionCode = '1'
build.versionName = '1.0'
vcs = mock.Mock()
@ -137,6 +243,20 @@ class ScannerTest(unittest.TestCase):
self.assertTrue(os.path.exists('foo.aar'))
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__":
os.chdir(os.path.dirname(__file__))