diff --git a/examples/config.py b/examples/config.py index d2c0105e..d33ddfac 100644 --- a/examples/config.py +++ b/examples/config.py @@ -246,3 +246,21 @@ The repository of older versions of applications from the main demo repository. # 'Summary': 80, # 'Description': 4000, # } + +# It is possible for the server operator to specify lists of apps that +# must be installed or deleted on the client (aka "push installs). If +# the user has opted in, or the device is already setup to respond to +# these requests, then fdroidclient will automatically install/delete +# the packageNames listed. This is protected by the same signing key +# as the app index metadata. +# +# install_list = { +# 'at.bitfire.davdroid', +# 'com.fsck.k9', +# 'us.replicant', +# } +# +# delete_list = { +# 'com.facebook.orca', +# 'com.android.vending', +# } diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 07c8db30..9f1ad43c 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3 # # update.py - part of the FDroid server tools -# Copyright (C) 2010-2015, Ciaran Gultnieks, ciaran@ciarang.com -# Copyright (C) 2013-2014 Daniel Martí +# Copyright (C) 2016, Blue Jay Wireless +# Copyright (C) 2014-2016, Hans-Christoph Steiner +# Copyright (C) 2010-2015, Ciaran Gultnieks +# Copyright (C) 2013-2014, Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -951,6 +953,21 @@ def make_index(apps, sortedids, apks, repodir, archive, categories): repoel.setAttribute("pubkey", extract_pubkey().decode('utf-8')) root.appendChild(repoel) + for command in ('install', 'delete'): + packageNames = [] + key = command + '_list' + if key in config: + if isinstance(config[key], str): + packageNames = [config[key]] + elif all(isinstance(item, str) for item in config[key]): + packageNames = config[key] + else: + raise TypeError('only accepts strings, lists, and tuples') + for packageName in packageNames: + element = doc.createElement(command) + root.appendChild(element) + element.setAttribute('packageName', packageName) + for appid in sortedids: app = apps[appid] diff --git a/tests/run-tests b/tests/run-tests index c55319da..7e0eb2aa 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -146,10 +146,14 @@ cd $REPOROOT $fdroid init cp -a $WORKSPACE/tests/metadata $WORKSPACE/tests/repo $REPOROOT/ echo "accepted_formats = ['json', 'txt', 'xml', 'yml']" >> config.py +echo "install_list = 'org.adaway'" >> config.py +echo "delete_list = {'com.android.vending', 'com.facebook.orca',}" >> config.py $fdroid update --verbose test -e repo/index.xml test -e repo/index.jar grep -F '