It is now 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.
It generates single XML elements with the data set in the attributes. This
keeps the XML compact and easily extensible, e.g. for adding versionCode,
signingKey, etc as attributes:
<install packageName="com.fsck.k9"/>
<install packageName="at.bitfire.davdroid"/>
<delete packageName="com.facebook.orca"/>
Copyright: 2016 Blue Jay Wireless
Signed-off-by: Hans-Christoph Steiner <hans@eds.org>
closes #177
# 'Summary': 80,
# 'Description': 4000,
# }
# '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',
+# }
#!/usr/bin/env python3
#
# update.py - part of the FDroid server tools
#!/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à <mvdan@mvdan.cc>
+# Copyright (C) 2016, Blue Jay Wireless
+# Copyright (C) 2014-2016, Hans-Christoph Steiner <hans@eds.org>
+# Copyright (C) 2010-2015, Ciaran Gultnieks <ciaran@ciarang.com>
+# Copyright (C) 2013-2014, Daniel Martà <mvdan@mvdan.cc>
#
# 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
#
# 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
repoel.setAttribute("pubkey", extract_pubkey().decode('utf-8'))
root.appendChild(repoel)
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]
for appid in sortedids:
app = apps[appid]
$fdroid init
cp -a $WORKSPACE/tests/metadata $WORKSPACE/tests/repo $REPOROOT/
echo "accepted_formats = ['json', 'txt', 'xml', 'yml']" >> config.py
$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 '<application id=' repo/index.xml > /dev/null
$fdroid update --verbose
test -e repo/index.xml
test -e repo/index.jar
grep -F '<application id=' repo/index.xml > /dev/null
+grep -F '<install packageName=' repo/index.xml > /dev/null
+grep -F '<delete packageName=' repo/index.xml > /dev/null
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#