summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2020-06-22 16:33:13 -0400
committerÉric Araujo <merwok@netwok.org>2020-06-22 16:33:13 -0400
commitbaa59284e1ee26284ecb68d957d5607e40ed786f (patch)
treef41bff89b8c65ea4bcdc557a4e1dd4c35ddb4f1c /src
parent48a04855ad4f1f1ae6af934090f35a4ad035ed67 (diff)
downloadpyramid-baa59284e1ee26284ecb68d957d5607e40ed786f.tar.gz
pyramid-baa59284e1ee26284ecb68d957d5607e40ed786f.tar.bz2
pyramid-baa59284e1ee26284ecb68d957d5607e40ed786f.zip
first shot for #1602
Diffstat (limited to 'src')
-rw-r--r--src/pyramid/config/routes.py7
-rw-r--r--src/pyramid/config/views.py7
-rw-r--r--src/pyramid/interfaces.py12
-rw-r--r--src/pyramid/predicates.py13
-rw-r--r--src/pyramid/security.py5
5 files changed, 44 insertions, 0 deletions
diff --git a/src/pyramid/config/routes.py b/src/pyramid/config/routes.py
index a12e18fa8..0fbfcca0c 100644
--- a/src/pyramid/config/routes.py
+++ b/src/pyramid/config/routes.py
@@ -268,6 +268,12 @@ class RoutesConfiguratorMixin:
Removed support for media ranges.
+ is_authenticated
+
+ XXX doc doc
+
+ .. versionadded:: 2.0
+
effective_principals
If specified, this value should be a :term:`principal` identifier or
@@ -537,6 +543,7 @@ class RoutesConfiguratorMixin:
('request_param', p.RequestParamPredicate),
('header', p.HeaderPredicate),
('accept', p.AcceptPredicate),
+ ('is_authenticated', p.IsAuthenticatedPredicate),
('effective_principals', p.EffectivePrincipalsPredicate),
('custom', p.CustomPredicate),
('traverse', p.TraversePredicate),
diff --git a/src/pyramid/config/views.py b/src/pyramid/config/views.py
index a064ebd05..87f2cbcd7 100644
--- a/src/pyramid/config/views.py
+++ b/src/pyramid/config/views.py
@@ -712,6 +712,12 @@ class ViewsConfiguratorMixin:
.. versionadded:: 1.4a3
+ is_authenticated
+
+ XXX doc doc
+
+ ..versionadded:: 2.0
+
effective_principals
If specified, this value should be a :term:`principal` identifier or
@@ -1205,6 +1211,7 @@ class ViewsConfiguratorMixin:
('request_type', p.RequestTypePredicate),
('match_param', p.MatchParamPredicate),
('physical_path', p.PhysicalPathPredicate),
+ ('is_authenticated', p.IsAuthenticatedPredicate),
('effective_principals', p.EffectivePrincipalsPredicate),
('custom', p.CustomPredicate),
):
diff --git a/src/pyramid/interfaces.py b/src/pyramid/interfaces.py
index e92662f11..85539c2f2 100644
--- a/src/pyramid/interfaces.py
+++ b/src/pyramid/interfaces.py
@@ -113,6 +113,14 @@ class IResponse(Interface):
""" Return a new app_iter built from the response app_iter that
serves up only the given start:stop range. """
+ authenticated_identity = Attribute(
+ """XXX Doc doc"""
+ )
+
+ authenticated_userid = Attribute(
+ """XXX Doc doc"""
+ )
+
body = Attribute(
"""The body of the response, as a str. This will read in the entire
app_iter if necessary."""
@@ -233,6 +241,10 @@ class IResponse(Interface):
headers = Attribute(""" The headers in a dictionary-like object """)
+ is_authenticated = Attribute(
+ """XXX doc doc"""
+ )
+
last_modified = Attribute(
""" Gets and sets and deletes the Last-Modified header. For more
information on Last-Modified see RFC 2616 section 14.29. Converts
diff --git a/src/pyramid/predicates.py b/src/pyramid/predicates.py
index 576bbbce6..fe8bc228c 100644
--- a/src/pyramid/predicates.py
+++ b/src/pyramid/predicates.py
@@ -276,6 +276,19 @@ class PhysicalPathPredicate:
return False
+class IsAuthenticatedPredicate:
+ def __init__(self, val, config):
+ self.val = val
+
+ def text(self):
+ return "is_authenticated = %r" % (self.val,)
+
+ phash = text
+
+ def __call__(self, context, request):
+ return request.is_authenticated == self.val
+
+
class EffectivePrincipalsPredicate:
def __init__(self, val, config):
if is_nonstr_iter(val):
diff --git a/src/pyramid/security.py b/src/pyramid/security.py
index 58bc72116..356286407 100644
--- a/src/pyramid/security.py
+++ b/src/pyramid/security.py
@@ -244,6 +244,11 @@ class SecurityAPIMixin:
return None
return policy.authenticated_userid(self)
+ @property
+ def is_authenticated(self):
+ """Return True if a user is authenticated for this request."""
+ return self.authenticated_identity is not None
+
def has_permission(self, permission, context=None):
""" Given a permission and an optional context, returns an instance of
:data:`pyramid.security.Allowed` if the permission is granted to this