summaryrefslogtreecommitdiff
path: root/src/mailman/rest
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/rest')
-rw-r--r--src/mailman/rest/adapters.py47
-rw-r--r--src/mailman/rest/configuration.py2
-rw-r--r--src/mailman/rest/configure.zcml7
-rw-r--r--src/mailman/rest/docs/domains.txt8
-rw-r--r--src/mailman/rest/root.py7
-rw-r--r--src/mailman/rest/urls.py7
-rw-r--r--src/mailman/rest/webservice.py6
7 files changed, 70 insertions, 14 deletions
diff --git a/src/mailman/rest/adapters.py b/src/mailman/rest/adapters.py
new file mode 100644
index 000000000..611e1f976
--- /dev/null
+++ b/src/mailman/rest/adapters.py
@@ -0,0 +1,47 @@
+# Copyright (C) 2009 by the Free Software Foundation, Inc.
+#
+# This file is part of GNU Mailman.
+#
+# GNU Mailman is free software: you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
+
+"""Module stuff."""
+
+from __future__ import absolute_import, unicode_literals
+
+__metaclass__ = type
+__all__ = [
+ 'DomainSet',
+ ]
+
+
+from zope.interface import implements
+
+from mailman.interfaces.domain import IDomainSet
+
+
+
+class DomainSet:
+ """Sets of known domains."""
+
+ implements(IDomainSet)
+
+ __name__ = 'domains'
+
+ def __init__(self, config):
+ self._config = config
+
+ def __iter__(self):
+ """See `IDomainSet`."""
+ domains = self._config.domains
+ return [domains[domain] for domain in sorted(domains)]
diff --git a/src/mailman/rest/configuration.py b/src/mailman/rest/configuration.py
index 19ad6a09d..af1f90551 100644
--- a/src/mailman/rest/configuration.py
+++ b/src/mailman/rest/configuration.py
@@ -42,6 +42,8 @@ class AdminWebServiceConfiguration:
@property
def view_permission(self):
+ if config.webservice.view_permission.lower() == 'none':
+ return None
return config.webservice.view_permission
path_override = None
diff --git a/src/mailman/rest/configure.zcml b/src/mailman/rest/configure.zcml
index 70155bf67..c6d32ac58 100644
--- a/src/mailman/rest/configure.zcml
+++ b/src/mailman/rest/configure.zcml
@@ -9,6 +9,7 @@
<include package="lazr.restful" file="configure.zcml"/>
<webservice:register module="mailman.interfaces.system" />
+ <webservice:register module="mailman.interfaces.domain" />
<adapter
for="zope.interface.Interface
@@ -17,6 +18,12 @@
factory="mailman.rest.urls.AbsoluteURLMapper"
/>
+ <adapter
+ for="mailman.config.config.IConfiguration"
+ provides="mailman.interfaces.domain.IDomainSet"
+ factory="mailman.rest.adapters.DomainSet"
+ />
+
<utility
factory="mailman.rest.configuration.AdminWebServiceConfiguration"
provides="lazr.restful.interfaces.IWebServiceConfiguration">
diff --git a/src/mailman/rest/docs/domains.txt b/src/mailman/rest/docs/domains.txt
new file mode 100644
index 000000000..e3ea902bc
--- /dev/null
+++ b/src/mailman/rest/docs/domains.txt
@@ -0,0 +1,8 @@
+=======
+Domains
+=======
+
+The REST API can be queried for the set of known domains.
+
+ >>> dump_json('http://localhost:8001/3.0/domains')
+ XXX
diff --git a/src/mailman/rest/root.py b/src/mailman/rest/root.py
index 620739287..a6dc26248 100644
--- a/src/mailman/rest/root.py
+++ b/src/mailman/rest/root.py
@@ -41,13 +41,6 @@ from mailman.core.system import system
class AdminWebServiceRootResource(ServiceRootResource):
"""The root of the Mailman RESTful admin web service."""
- def get(self, name):
- """See `IHasGet`."""
- top_level = {
- 'sys': system,
- }
- return top_level.get(name)
-
class AdminWebServiceRootAbsoluteURL:
"""A basic implementation of `IAbsoluteURL` for the root object."""
diff --git a/src/mailman/rest/urls.py b/src/mailman/rest/urls.py
index cdd921d4e..5d8d7930b 100644
--- a/src/mailman/rest/urls.py
+++ b/src/mailman/rest/urls.py
@@ -69,7 +69,8 @@ class AbsoluteURLMapper:
# Special cases.
if isinstance(ob, AdminWebServiceApplication):
return ''
- urls = {
- system: 'system',
- }
+ urls = dict(
+ system='system',
+ domains='domains',
+ )
return urls[ob]
diff --git a/src/mailman/rest/webservice.py b/src/mailman/rest/webservice.py
index bf1012203..a76ad3863 100644
--- a/src/mailman/rest/webservice.py
+++ b/src/mailman/rest/webservice.py
@@ -35,14 +35,13 @@ import logging
from wsgiref.simple_server import WSGIServer, WSGIRequestHandler
from lazr.restful.publisher import WebServiceRequestTraversal
-from pkg_resources import resource_string
-from zope.configuration import xmlconfig
from zope.interface import implements
from zope.publisher.browser import BrowserRequest
from zope.publisher.publish import publish
from mailman.config import config
from mailman.core.system import system
+from mailman.interfaces.domain import IDomainSet
from mailman.interfaces.rest import IResolvePathNames
from mailman.rest.publication import AdminWebServicePublication
@@ -84,6 +83,7 @@ class AdminWebServiceApplication:
"""Maps root names to resources."""
top_level = dict(
system=system,
+ domains=IDomainSet(config),
)
return top_level.get(name)
@@ -99,8 +99,6 @@ class AdminWebServiceWSGIRequestHandler(WSGIRequestHandler):
def make_server():
"""Create the WSGI admin REST server."""
- zcml = resource_string('mailman.rest', 'configure.zcml')
- xmlconfig.string(zcml)
host = config.webservice.hostname
port = int(config.webservice.port)
server = WSGIServer((host, port), AdminWebServiceWSGIRequestHandler)