You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/05/15 12:29:45 UTC

[01/10] allura git commit: [#7633] ticket:768 Add has_access API for neighborhood

Repository: allura
Updated Branches:
  refs/heads/ib/7633 [created] b9443313f


[#7633] ticket:768 Add has_access API for neighborhood


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/5031ba6b
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/5031ba6b
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/5031ba6b

Branch: refs/heads/ib/7633
Commit: 5031ba6babc22b1b310cc48ff05e7c154f1853bf
Parents: 31189d4
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu May 14 14:37:24 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Thu May 14 14:37:24 2015 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/rest.py           | 10 ++++++
 Allura/allura/tests/functional/test_rest.py | 40 ++++++++++++++++++++++++
 2 files changed, 50 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/5031ba6b/Allura/allura/controllers/rest.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/rest.py b/Allura/allura/controllers/rest.py
index 8eafa30..788b280 100644
--- a/Allura/allura/controllers/rest.py
+++ b/Allura/allura/controllers/rest.py
@@ -256,6 +256,16 @@ class NeighborhoodRestController(object):
     def __init__(self, neighborhood):
         self._neighborhood = neighborhood
 
+    @expose('json:')
+    def has_access(self, user, perm):
+        security.require_access(self._neighborhood, 'admin')
+        resp = {'result': False}
+        user = M.User.by_username(user)
+        if user:
+            resp['result'] = security.has_access(
+                self._neighborhood, perm, user=user)()
+        return resp
+
     @expose()
     def _lookup(self, name, *remainder):
         provider = plugin.ProjectRegistrationProvider.get()

http://git-wip-us.apache.org/repos/asf/allura/blob/5031ba6b/Allura/allura/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_rest.py b/Allura/allura/tests/functional/test_rest.py
index 43a92d1..3124065 100644
--- a/Allura/allura/tests/functional/test_rest.py
+++ b/Allura/allura/tests/functional/test_rest.py
@@ -208,6 +208,46 @@ class TestRestHome(TestRestApiBase):
         assert_in('bugs', tool_mounts)
         assert_not_in('private-bugs', tool_mounts)
 
+    def test_neighborhood_has_access_no_params(self):
+        r = self.api_get('/rest/p/has_access', status=404)
+        r = self.api_get('/rest/p/has_access?user=test-admin', status=404)
+        r = self.api_get('/rest/p/has_access?perm=read', status=404)
+
+    def test_neighborhood_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/has_access?user=test-admin&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_neighborhood_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_neighborhood_has_access(self):
+        r = self.api_get(
+            '/rest/p/has_access?user=root&perm=update',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/has_access?user=test-user&perm=update',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
     def test_unicode(self):
         self.app.post(
             '/wiki/tést/update',


[03/10] allura git commit: [#7633] ticket:768 Add has_access API for ForgeBlog

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for ForgeBlog


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/1bbb806f
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/1bbb806f
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/1bbb806f

Branch: refs/heads/ib/7633
Commit: 1bbb806f9d38c1f7b7244c33d4f8601e89dfc8b5
Parents: d3c5cbc
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu May 14 15:20:08 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Thu May 14 15:20:08 2015 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/rest.py               |  6 +++
 ForgeBlog/forgeblog/main.py                     |  3 +-
 .../forgeblog/tests/functional/test_rest.py     | 40 ++++++++++++++++++++
 3 files changed, 48 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/1bbb806f/Allura/allura/controllers/rest.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/rest.py b/Allura/allura/controllers/rest.py
index 7ac9df5..df5b0ea 100644
--- a/Allura/allura/controllers/rest.py
+++ b/Allura/allura/controllers/rest.py
@@ -263,6 +263,12 @@ def rest_has_access(obj, user, perm):
     return resp
 
 
+class AppRestControllerMixin(object):
+    @expose('json:')
+    def has_access(self, user, perm):
+        return rest_has_access(c.app, user, perm)
+
+
 class NeighborhoodRestController(object):
 
     def __init__(self, neighborhood):

http://git-wip-us.apache.org/repos/asf/allura/blob/1bbb806f/ForgeBlog/forgeblog/main.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/main.py b/ForgeBlog/forgeblog/main.py
index 160b94e..ef23967 100644
--- a/ForgeBlog/forgeblog/main.py
+++ b/ForgeBlog/forgeblog/main.py
@@ -47,6 +47,7 @@ from allura.lib.widgets import form_fields as ffw
 from allura.lib.widgets.search import SearchResults, SearchHelp
 from allura import model as M
 from allura.controllers import BaseController, AppDiscussionController, AppDiscussionRestController
+from allura.controllers.rest import AppRestControllerMixin
 from allura.controllers.feed import FeedArgs, FeedController
 
 # Local imports
@@ -456,7 +457,7 @@ class BlogAdminController(DefaultAdminController):
         redirect(c.project.url() + 'admin/tools')
 
 
-class RootRestController(BaseController):
+class RootRestController(BaseController, AppRestControllerMixin):
 
     def __init__(self):
         self._discuss = AppDiscussionRestController()

http://git-wip-us.apache.org/repos/asf/allura/blob/1bbb806f/ForgeBlog/forgeblog/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/tests/functional/test_rest.py b/ForgeBlog/forgeblog/tests/functional/test_rest.py
index 05e06c8..3fc7647 100644
--- a/ForgeBlog/forgeblog/tests/functional/test_rest.py
+++ b/ForgeBlog/forgeblog/tests/functional/test_rest.py
@@ -212,3 +212,43 @@ class TestBlogApi(TestRestApiBase):
         assert_equal(r.json['count'], 3)
         assert_equal(r.json['limit'], 1)
         assert_equal(r.json['page'], 2)
+
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/blog/has_access', status=404)
+        r = self.api_get('/rest/p/test/blog/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/blog/has_access?perm=read', status=404)
+
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/blog/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/blog/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/blog/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/blog/has_access?user=test-admin&perm=post',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/blog/has_access?user=*anonymous&perm=admin',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)


[10/10] allura git commit: [#7633] ticket:768 Add has_access API for ForgeGit

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for ForgeGit


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/b9443313
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/b9443313
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/b9443313

Branch: refs/heads/ib/7633
Commit: b9443313f91ad146483f6ea9bd8d92c1abd3d9f9
Parents: cb16eee
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri May 15 09:39:12 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri May 15 09:39:12 2015 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/repository.py         |  3 +-
 .../tests/functional/test_controllers.py        | 53 +++++++++++++++++++-
 2 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/b9443313/Allura/allura/controllers/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index ce38b2b..ddb8a02 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -50,6 +50,7 @@ from allura.lib.widgets.repo import SCMMergeRequestDisposeWidget, SCMCommitBrows
 from allura.lib.widgets.subscriptions import SubscribeForm
 from allura.controllers import AppDiscussionController
 from allura.controllers.base import DispatchIndex
+from allura.controllers.rest import AppRestControllerMixin
 from allura.controllers.feed import FeedController, FeedArgs
 from .base import BaseController
 
@@ -287,7 +288,7 @@ class RepoRootController(BaseController, FeedController):
         return dict(status=c.app.repo.status)
 
 
-class RepoRestController(RepoRootController):
+class RepoRestController(RepoRootController, AppRestControllerMixin):
 
     @expose('json:')
     def index(self, **kw):

http://git-wip-us.apache.org/repos/asf/allura/blob/b9443313/ForgeGit/forgegit/tests/functional/test_controllers.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index dacec3e..2ceac06 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -33,7 +33,7 @@ from alluratest.controller import setup_global_objects
 from allura import model as M
 from allura.lib import helpers as h
 from allura.lib import macro
-from alluratest.controller import TestController
+from alluratest.controller import TestController, TestRestApiBase
 from allura.tests.decorators import with_tool
 from forgegit.tests import with_git
 from forgegit import model as GM
@@ -438,6 +438,57 @@ class TestRestController(_TestCase):
         self.app.get('/rest/p/test/src-git/commits', status=200)
 
 
+class TestHasAccessAPI(TestRestApiBase):
+
+    def setUp(self):
+        super(TestHasAccessAPI, self).setUp()
+        self.setup_with_tools()
+
+    @with_git
+    def setup_with_tools(self):
+        pass
+
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/src-git/has_access', status=404)
+        r = self.api_get('/rest/p/test/src-git/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/src-git/has_access?perm=read', status=404)
+
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/src-git/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/src-git/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/src-git/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/src-git/has_access?user=test-admin&perm=create',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/src-git/has_access?user=test-user&perm=create',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+
 class TestFork(_TestCase):
 
     def setUp(self):


[02/10] allura git commit: [#7633] ticket:768 Add has_access API for project

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for project


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d3c5cbc3
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d3c5cbc3
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d3c5cbc3

Branch: refs/heads/ib/7633
Commit: d3c5cbc37d01a39e2f7ee27e0989969d4ad14883
Parents: 5031ba6
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu May 14 14:48:02 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Thu May 14 14:48:02 2015 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/rest.py           | 23 ++++++++----
 Allura/allura/tests/functional/test_rest.py | 47 ++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/d3c5cbc3/Allura/allura/controllers/rest.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/rest.py b/Allura/allura/controllers/rest.py
index 788b280..7ac9df5 100644
--- a/Allura/allura/controllers/rest.py
+++ b/Allura/allura/controllers/rest.py
@@ -251,6 +251,18 @@ class OAuthNegotiator(object):
         return acc_token.to_string()
 
 
+def rest_has_access(obj, user, perm):
+    """
+    Helper function that encapsulates common functionality for has_access API
+    """
+    security.require_access(obj, 'admin')
+    resp = {'result': False}
+    user = M.User.by_username(user)
+    if user:
+        resp['result'] = security.has_access(obj, perm, user=user)()
+    return resp
+
+
 class NeighborhoodRestController(object):
 
     def __init__(self, neighborhood):
@@ -258,13 +270,7 @@ class NeighborhoodRestController(object):
 
     @expose('json:')
     def has_access(self, user, perm):
-        security.require_access(self._neighborhood, 'admin')
-        resp = {'result': False}
-        user = M.User.by_username(user)
-        if user:
-            resp['result'] = security.has_access(
-                self._neighborhood, perm, user=user)()
-        return resp
+        return rest_has_access(self._neighborhood, user, perm)
 
     @expose()
     def _lookup(self, name, *remainder):
@@ -322,3 +328,6 @@ class ProjectRestController(object):
             return '<?xml version="1.0" encoding="UTF-8" ?>' + c.project.doap()
         return c.project.__json__()
 
+    @expose('json:')
+    def has_access(self, user, perm):
+        return rest_has_access(c.project, user, perm)

http://git-wip-us.apache.org/repos/asf/allura/blob/d3c5cbc3/Allura/allura/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_rest.py b/Allura/allura/tests/functional/test_rest.py
index 3124065..3fed49c 100644
--- a/Allura/allura/tests/functional/test_rest.py
+++ b/Allura/allura/tests/functional/test_rest.py
@@ -248,6 +248,53 @@ class TestRestHome(TestRestApiBase):
         assert_equal(r.status_int, 200)
         assert_equal(r.json['result'], False)
 
+    def test_project_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/has_access', status=404)
+        r = self.api_get('/rest/p/test/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/has_access?perm=read', status=404)
+
+    def test_project_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/has_access?user=test-admin&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_project_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_project_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/has_access?user=test-admin&perm=update',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/has_access?user=test-user&perm=update',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_subproject_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/sub1/has_access?user=test-admin&perm=update',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+
     def test_unicode(self):
         self.app.post(
             '/wiki/tést/update',


[06/10] allura git commit: [#7633] ticket:768 Add has_access API for ForgeWiki

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for ForgeWiki


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/33dc14c6
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/33dc14c6
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/33dc14c6

Branch: refs/heads/ib/7633
Commit: 33dc14c66a051179b9a60af71ba66a331ecff088
Parents: d038918
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri May 15 09:09:08 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri May 15 09:09:08 2015 +0000

----------------------------------------------------------------------
 .../forgewiki/tests/functional/test_rest.py     | 51 ++++++++++++++++++++
 ForgeWiki/forgewiki/wiki_main.py                |  3 +-
 2 files changed, 53 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/33dc14c6/ForgeWiki/forgewiki/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/tests/functional/test_rest.py b/ForgeWiki/forgewiki/tests/functional/test_rest.py
index 560503e..23021d2 100644
--- a/ForgeWiki/forgewiki/tests/functional/test_rest.py
+++ b/ForgeWiki/forgewiki/tests/functional/test_rest.py
@@ -100,3 +100,54 @@ class TestWikiApi(TestRestApiBase):
         # make sure these are unchanged
         assert_equal(json.dumps('<'), '"<"')
         assert_equal(simplejson.dumps('<'), '"<"')
+
+
+class TestWikiHasAccess(TestRestApiBase):
+
+    def setUp(self):
+        super(TestWikiHasAccess, self).setUp()
+        self.setup_with_tools()
+
+    @td.with_wiki
+    def setup_with_tools(self):
+        h.set_context('test', 'wiki', neighborhood='Projects')
+
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/wiki/has_access', status=404)
+        r = self.api_get('/rest/p/test/wiki/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/wiki/has_access?perm=read', status=404)
+
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/wiki/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/wiki/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/wiki/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/wiki/has_access?user=test-admin&perm=create',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/wiki/has_access?user=test-user&perm=create',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)

http://git-wip-us.apache.org/repos/asf/allura/blob/33dc14c6/ForgeWiki/forgewiki/wiki_main.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index a5b3d3e..b086d16 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -41,6 +41,7 @@ from allura.controllers import AppDiscussionController, BaseController, AppDiscu
 from allura.controllers import DispatchIndex
 from allura.controllers import attachments as ac
 from allura.controllers.feed import FeedArgs, FeedController
+from allura.controllers.rest import AppRestControllerMixin
 from allura.lib import widgets as w
 from allura.lib.widgets import form_fields as ffw
 from allura.lib.widgets.subscriptions import SubscribeForm
@@ -740,7 +741,7 @@ Some *emphasized* and **strong** text
 '''
 
 
-class RootRestController(BaseController):
+class RootRestController(BaseController, AppRestControllerMixin):
 
     def __init__(self):
         self._discuss = AppDiscussionRestController()


[05/10] allura git commit: [#7633] ticket:768 Add has_access API for ForgeTracker

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for ForgeTracker


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d038918d
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d038918d
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d038918d

Branch: refs/heads/ib/7633
Commit: d038918d3e91bc2dfa6ca4247839d9e2c9574be3
Parents: cdcd3d2
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri May 15 09:02:30 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri May 15 09:02:30 2015 +0000

----------------------------------------------------------------------
 .../forgetracker/tests/functional/test_rest.py  | 43 ++++++++++++++++++++
 ForgeTracker/forgetracker/tracker_main.py       |  7 +++-
 2 files changed, 48 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/d038918d/ForgeTracker/forgetracker/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_rest.py b/ForgeTracker/forgetracker/tests/functional/test_rest.py
index aa728e1..0932435 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_rest.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_rest.py
@@ -237,3 +237,46 @@ class TestRestSearch(TestTrackerApiBase):
         assert_equal(r.json['tickets'][0]['labels'], ['tiny', 'minor'])
         assert 'description' not in r.json
         assert 'discussion_thread' not in r.json
+
+
+class TestRestHasAccess(TestTrackerApiBase):
+
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/bugs/has_access', status=404)
+        r = self.api_get('/rest/p/test/bugs/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/bugs/has_access?perm=read', status=404)
+
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/bugs/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/bugs/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/bugs/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/bugs/has_access?user=test-admin&perm=delete',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/bugs/has_access?user=test-user&perm=delete',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)

http://git-wip-us.apache.org/repos/asf/allura/blob/d038918d/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 055116f..07601ae 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -61,6 +61,7 @@ from allura.controllers import AppDiscussionController, AppDiscussionRestControl
 from allura.controllers import attachments as att
 from allura.controllers import BaseController
 from allura.controllers.feed import FeedArgs, FeedController
+from allura.controllers.rest import AppRestControllerMixin
 
 # Local imports
 from forgetracker import model as TM
@@ -1742,7 +1743,7 @@ class TrackerAdminController(DefaultAdminController):
         redirect(request.referer)
 
 
-class RootRestController(BaseController):
+class RootRestController(BaseController, AppRestControllerMixin):
 
     def __init__(self):
         self._discuss = AppDiscussionRestController()
@@ -1798,7 +1799,9 @@ class RootRestController(BaseController):
 
     @expose()
     def _lookup(self, ticket_num, *remainder):
-        return TicketRestController(ticket_num), remainder
+        if ticket_num.isdigit():
+            return TicketRestController(ticket_num), remainder
+        raise exc.HTTPNotFound
 
 
 class TicketRestController(BaseController):


[08/10] allura git commit: [#7633] ticket:768 Add has_access API for ForgeActivity

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for ForgeActivity


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/fe2133d0
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/fe2133d0
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/fe2133d0

Branch: refs/heads/ib/7633
Commit: fe2133d019883305f7d46da05f33a3328b46e873
Parents: d9a51a3
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri May 15 09:22:16 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri May 15 09:22:16 2015 +0000

----------------------------------------------------------------------
 ForgeActivity/forgeactivity/main.py             |  3 +-
 .../forgeactivity/tests/functional/test_rest.py | 56 ++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/fe2133d0/ForgeActivity/forgeactivity/main.py
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/main.py b/ForgeActivity/forgeactivity/main.py
index e0b22c8..9bb6029 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -32,6 +32,7 @@ from allura.app import Application
 from allura import version
 from allura import model as M
 from allura.controllers import BaseController
+from allura.controllers.rest import AppRestControllerMixin
 from allura.lib.security import require_authenticated, require_access
 from allura.model.timeline import perm_check, get_activity_object
 from allura.lib import helpers as h
@@ -206,7 +207,7 @@ class ForgeActivityController(BaseController):
             following=follow)
 
 
-class ForgeActivityRestController(BaseController):
+class ForgeActivityRestController(BaseController, AppRestControllerMixin):
 
     def __init__(self, app, *args, **kw):
         super(ForgeActivityRestController, self).__init__(*args, **kw)

http://git-wip-us.apache.org/repos/asf/allura/blob/fe2133d0/ForgeActivity/forgeactivity/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/tests/functional/test_rest.py b/ForgeActivity/forgeactivity/tests/functional/test_rest.py
new file mode 100644
index 0000000..4a26d0c
--- /dev/null
+++ b/ForgeActivity/forgeactivity/tests/functional/test_rest.py
@@ -0,0 +1,56 @@
+from datadiff.tools import assert_equal
+
+from tg import config
+from alluratest.controller import TestRestApiBase
+
+
+class TestActivityHasAccessAPI(TestRestApiBase):
+
+    def setUp(self, *args, **kwargs):
+        super(TestActivityHasAccessAPI, self).setUp(*args, **kwargs)
+        self._enabled = config.get('activitystream.enabled', 'false')
+        config['activitystream.enabled'] = 'true'
+
+    def tearDown(self, *args, **kwargs):
+        super(TestActivityHasAccessAPI, self).tearDown(*args, **kwargs)
+        config['activitystream.enabled'] = self._enabled
+
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/activity/has_access', status=404)
+        r = self.api_get('/rest/p/test/activity/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/activity/has_access?perm=read', status=404)
+
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/activity/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/activity/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/activity/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/activity/has_access?user=test-admin&perm=admin',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/activity/has_access?user=test-user&perm=admin',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)


[04/10] allura git commit: [#7633] ticket:768 Add has_access API for ForgeDiscussion

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for ForgeDiscussion


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/cdcd3d2a
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/cdcd3d2a
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/cdcd3d2a

Branch: refs/heads/ib/7633
Commit: cdcd3d2a9b4958c1039bb1386100eef5654fe023
Parents: 1bbb806
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu May 14 15:33:34 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Thu May 14 15:33:34 2015 +0000

----------------------------------------------------------------------
 .../forgediscussion/controllers/root.py         |  3 +-
 .../tests/functional/test_rest.py               | 40 ++++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/cdcd3d2a/ForgeDiscussion/forgediscussion/controllers/root.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py
index 7548cd0..55f27a5 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -37,6 +37,7 @@ from allura.lib import helpers as h
 from allura.lib.utils import AntiSpam
 from allura.lib.decorators import require_post
 from allura.controllers import BaseController, DispatchIndex
+from allura.controllers.rest import AppRestControllerMixin
 from allura.controllers.feed import FeedArgs, FeedController
 
 from .forum import ForumController
@@ -299,7 +300,7 @@ class RootController(BaseController, DispatchIndex, FeedController):
         )
 
 
-class RootRestController(BaseController):
+class RootRestController(BaseController, AppRestControllerMixin):
 
     def _check_security(self):
         require_access(c.app, 'read')

http://git-wip-us.apache.org/repos/asf/allura/blob/cdcd3d2a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
index 1b7d080..1f64eb5 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
@@ -247,3 +247,43 @@ class TestRootRestController(TestDiscussionApiBase):
                          extra_environ={'username': '*anonymous'})
         assert_equal(len(r.json['forums']), 1)
         assert_equal(r.json['forums'][0]['shortname'], 'general')
+
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/discussion/has_access', status=404)
+        r = self.api_get('/rest/p/test/discussion/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/discussion/has_access?perm=read', status=404)
+
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/discussion/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/discussion/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/discussion/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/discussion/has_access?user=test-admin&perm=post',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/discussion/has_access?user=*anonymous&perm=admin',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)


[09/10] allura git commit: [#7633] ticket:768 Add has_access API for user profile

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for user profile


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/cb16eee3
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/cb16eee3
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/cb16eee3

Branch: refs/heads/ib/7633
Commit: cb16eee3486799033bc8333fd8bb90a296e7b371
Parents: fe2133d
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri May 15 09:30:32 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri May 15 09:30:32 2015 +0000

----------------------------------------------------------------------
 Allura/allura/ext/user_profile/user_main.py     |  3 +-
 .../tests/functional/test_user_profile.py       | 48 ++++++++++++++++++++
 2 files changed, 50 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/cb16eee3/Allura/allura/ext/user_profile/user_main.py
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/user_profile/user_main.py b/Allura/allura/ext/user_profile/user_main.py
index 2f71deb..f676bed 100644
--- a/Allura/allura/ext/user_profile/user_main.py
+++ b/Allura/allura/ext/user_profile/user_main.py
@@ -39,6 +39,7 @@ from allura.lib.plugin import AuthenticationProvider
 from allura.model import User, ACE, ProjectRole
 from allura.controllers import BaseController
 from allura.controllers.feed import FeedArgs, FeedController
+from allura.controllers.rest import AppRestControllerMixin
 from allura.lib.decorators import require_post
 from allura.lib.widgets.user_profile import SendMessageForm
 
@@ -211,7 +212,7 @@ class UserProfileController(BaseController, FeedController):
         return redirect(c.project.user_project_of.url())
 
 
-class UserProfileRestController(object):
+class UserProfileRestController(AppRestControllerMixin):
     @expose('json:')
     def index(self, **kw):
         user = c.project.user_project_of

http://git-wip-us.apache.org/repos/asf/allura/blob/cb16eee3/Allura/allura/tests/functional/test_user_profile.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_user_profile.py b/Allura/allura/tests/functional/test_user_profile.py
index c539baf..ffdde56 100644
--- a/Allura/allura/tests/functional/test_user_profile.py
+++ b/Allura/allura/tests/functional/test_user_profile.py
@@ -19,6 +19,7 @@ import mock
 import tg
 from nose.tools import assert_equal, assert_in, assert_not_in
 
+from alluratest.controller import TestRestApiBase
 from allura.model import Project, User
 from allura.tests import decorators as td
 from allura.tests import TestController
@@ -174,3 +175,50 @@ class TestUserProfile(TestController):
         assert_in('Section c', r.body)
         assert_in('Section d', r.body)
         assert_not_in('Section f', r.body)
+
+
+class TestUserProfileHasAccessAPI(TestRestApiBase):
+
+    @td.with_user_project('test-admin')
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/u/test-admin/profile/has_access', status=404)
+        r = self.api_get('/rest/u/test-admin/profile/has_access?user=root', status=404)
+        r = self.api_get('/rest/u/test-admin/profile/has_access?perm=read', status=404)
+
+    @td.with_user_project('test-admin')
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/u/test-admin/profile/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/u/test-admin/profile/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    @td.with_user_project('test-admin')
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/u/test-admin/profile/has_access?user=test-admin&perm=admin',
+            user='test-user',
+            status=403)
+
+    @td.with_user_project('test-admin')
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/u/test-admin/profile/has_access?user=test-admin&perm=admin',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/u/test-admin/profile/has_access?user=test-user&perm=admin',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)


[07/10] allura git commit: [#7633] ticket:768 Add has_access API for ForgeLink

Posted by je...@apache.org.
[#7633] ticket:768 Add has_access API for ForgeLink


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d9a51a35
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d9a51a35
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d9a51a35

Branch: refs/heads/ib/7633
Commit: d9a51a35c2778c9670f3c350351cdab64487cfc3
Parents: 33dc14c
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri May 15 09:14:03 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri May 15 09:14:03 2015 +0000

----------------------------------------------------------------------
 ForgeLink/forgelink/link_main.py                |  3 +-
 .../forgelink/tests/functional/test_rest.py     | 51 ++++++++++++++++++++
 2 files changed, 53 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/d9a51a35/ForgeLink/forgelink/link_main.py
----------------------------------------------------------------------
diff --git a/ForgeLink/forgelink/link_main.py b/ForgeLink/forgelink/link_main.py
index bfcf9f9..ef1c510 100644
--- a/ForgeLink/forgelink/link_main.py
+++ b/ForgeLink/forgelink/link_main.py
@@ -32,6 +32,7 @@ from allura.lib.security import require_access, has_access
 from allura.lib.utils import permanent_redirect
 from allura import model as M
 from allura.controllers import BaseController
+from allura.controllers.rest import AppRestControllerMixin
 
 # Local imports
 from forgelink import version
@@ -146,7 +147,7 @@ class LinkAdminController(DefaultAdminController):
         return {'status': 'ok'}
 
 
-class RootRestController(BaseController):
+class RootRestController(BaseController, AppRestControllerMixin):
 
     def __init__(self, app):
         self.app = app

http://git-wip-us.apache.org/repos/asf/allura/blob/d9a51a35/ForgeLink/forgelink/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeLink/forgelink/tests/functional/test_rest.py b/ForgeLink/forgelink/tests/functional/test_rest.py
index d7bb7da..7fd6485 100644
--- a/ForgeLink/forgelink/tests/functional/test_rest.py
+++ b/ForgeLink/forgelink/tests/functional/test_rest.py
@@ -78,3 +78,54 @@ class TestLinkApi(TestRestApiBase):
                       status=200)
         r = self.api_get(u'/rest/p/test/link'.encode('utf-8'))
         assert_equal(r.json['url'], 'http://yahoo.com')
+
+
+class TestLinkHasAccess(TestRestApiBase):
+
+    def setUp(self):
+        super(TestLinkHasAccess, self).setUp()
+        self.setup_with_tools()
+
+    @td.with_link
+    def setup_with_tools(self):
+        h.set_context('test', 'link', neighborhood='Projects')
+
+    def test_has_access_no_params(self):
+        r = self.api_get('/rest/p/test/link/has_access', status=404)
+        r = self.api_get('/rest/p/test/link/has_access?user=root', status=404)
+        r = self.api_get('/rest/p/test/link/has_access?perm=read', status=404)
+
+    def test_has_access_unknown_params(self):
+        """Unknown user and/or permission always False for has_access API"""
+        r = self.api_get(
+            '/rest/p/test/link/has_access?user=babadook&perm=read',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+        r = self.api_get(
+            '/rest/p/test/link/has_access?user=test-user&perm=jump',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)
+
+    def test_has_access_not_admin(self):
+        """
+        User which has no 'admin' permission on neighborhood can't use
+        has_access API
+        """
+        self.api_get(
+            '/rest/p/test/link/has_access?user=test-admin&perm=configure',
+            user='test-user',
+            status=403)
+
+    def test_has_access(self):
+        r = self.api_get(
+            '/rest/p/test/link/has_access?user=test-admin&perm=configure',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], True)
+        r = self.api_get(
+            '/rest/p/test/link/has_access?user=test-user&perm=configure',
+            user='root')
+        assert_equal(r.status_int, 200)
+        assert_equal(r.json['result'], False)