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)