Repository :
http://git.fedorahosted.org/cgit/
On branch : master
---------------------------------------------------------------
commit ecdc478c90354b0db899dd245ef0a7b1ac5c215b
Author: Matt Domsch <matt(a)domsch.com>
Date: Thu Aug 15 13:55:14 2013 -0500
/mirroradmins: add text & JSON listing all admin usernames
For Fedora Badges, enhance the /mirroradmins REST call to return all
admin usernames. If &public_only=0, return all mirroradmins. If
&host=, no change (so as to not break zodbot).
---------------------------------------------------------------
server/mirrormanager/controllers.py | 11 +++++++----
server/mirrormanager/model.py | 12 ++++++++++++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/server/mirrormanager/controllers.py b/server/mirrormanager/controllers.py
index f7e1e8c..c05a0f2 100644
--- a/server/mirrormanager/controllers.py
+++ b/server/mirrormanager/controllers.py
@@ -875,10 +875,13 @@ class Root(controllers.RootController):
@expose(template="kid:mirrormanager.templates.rsync_acl",
format="plain", content_type="text/plain", allow_json=True)
def mirroradmins(self, **kwargs):
- if 'host' not in kwargs:
- return dict(values=[])
- host = kwargs['host']
- return dict(values=host_siteadmins(host))
+ if 'host' in kwargs:
+ host = kwargs['host']
+ return dict(values=host_siteadmins(host))
+ else:
+ public_only = bool(int(kwargs.get('public_only', 1)))
+ values = mirror_admins(public_only=public_only)
+ return dict(values=values)
@expose(template="kid:mirrormanager.templates.rsyncFilter",
format="plain", content_type="text/plain")
def rsyncFilter(self, **kwargs):
diff --git a/server/mirrormanager/model.py b/server/mirrormanager/model.py
index 69d8cb6..ae14378 100644
--- a/server/mirrormanager/model.py
+++ b/server/mirrormanager/model.py
@@ -881,6 +881,18 @@ class DirectoryExclusiveHost(SQLObject):
host = ForeignKey('Host')
idx = DatabaseIndex('directory', 'host', unique=True)
+def mirror_admins(public_only=True):
+ sql = 'SELECT DISTINCT site_admin.username '
+ sql += 'FROM site, host, site_admin '
+ sql += 'WHERE host.site_id = site.id '
+ sql += 'AND site_admin.site_id = site.id '
+ if public:
+ sql += 'AND site.public AND host.public '
+ sql += 'ORDER BY site_admin.username '
+ qresult = Directory._connection.queryAll(sql)
+ result = [x[0] for x in qresult]
+ return result
+
def _host_siteadmins(url):
sql = 'SELECT DISTINCT site_admin.username FROM '
sql += 'host_category_url, host_category, host, site, site_admin WHERE '