Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
3c8f01b9
Commit
3c8f01b9
authored
Oct 15, 2012
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Explicit CSRF failure message. Fixes #60.
parent
9c1fba34
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
6 deletions
+21
-6
rest_framework/authentication.py
+15
-3
rest_framework/renderers.py
+3
-0
rest_framework/views.py
+3
-3
No files found.
rest_framework/authentication.py
View file @
3c8f01b9
...
@@ -4,6 +4,7 @@ Provides a set of pluggable authentication policies.
...
@@ -4,6 +4,7 @@ Provides a set of pluggable authentication policies.
from
django.contrib.auth
import
authenticate
from
django.contrib.auth
import
authenticate
from
django.utils.encoding
import
smart_unicode
,
DjangoUnicodeDecodeError
from
django.utils.encoding
import
smart_unicode
,
DjangoUnicodeDecodeError
from
rest_framework
import
exceptions
from
rest_framework.compat
import
CsrfViewMiddleware
from
rest_framework.compat
import
CsrfViewMiddleware
from
rest_framework.authtoken.models
import
Token
from
rest_framework.authtoken.models
import
Token
import
base64
import
base64
...
@@ -71,11 +72,22 @@ class SessionAuthentication(BaseAuthentication):
...
@@ -71,11 +72,22 @@ class SessionAuthentication(BaseAuthentication):
http_request
=
request
.
_request
http_request
=
request
.
_request
user
=
getattr
(
http_request
,
'user'
,
None
)
user
=
getattr
(
http_request
,
'user'
,
None
)
if
user
and
user
.
is_active
:
# Unauthenticated, CSRF validation not required
if
not
user
or
not
user
.
is_active
:
return
# Enforce CSRF validation for session based authentication.
# Enforce CSRF validation for session based authentication.
resp
=
CsrfViewMiddleware
()
.
process_view
(
http_request
,
None
,
(),
{})
class
CSRFCheck
(
CsrfViewMiddleware
):
def
_reject
(
self
,
request
,
reason
):
# Return the failure reason instead of an HttpResponse
return
reason
reason
=
CSRFCheck
()
.
process_view
(
http_request
,
None
,
(),
{})
if
reason
:
# CSRF failed, bail with explicit error message
raise
exceptions
.
PermissionDenied
(
'CSRF Failed:
%
s'
%
reason
)
if
resp
is
None
:
# csrf passed
# CSRF passed with authenticated user
return
(
user
,
None
)
return
(
user
,
None
)
...
...
rest_framework/renderers.py
View file @
3c8f01b9
...
@@ -235,8 +235,11 @@ class BrowsableAPIRenderer(BaseRenderer):
...
@@ -235,8 +235,11 @@ class BrowsableAPIRenderer(BaseRenderer):
return
# Cannot use form overloading
return
# Cannot use form overloading
request
=
clone_request
(
request
,
method
)
request
=
clone_request
(
request
,
method
)
try
:
if
not
view
.
has_permission
(
request
):
if
not
view
.
has_permission
(
request
):
return
# Don't have permission
return
# Don't have permission
except
:
return
# Don't have permission and exception explicitly raise
if
method
==
'DELETE'
or
method
==
'OPTIONS'
:
if
method
==
'DELETE'
or
method
==
'OPTIONS'
:
return
True
# Don't actually need to return a form
return
True
# Don't actually need to return a form
...
...
rest_framework/views.py
View file @
3c8f01b9
...
@@ -156,14 +156,14 @@ class APIView(View):
...
@@ -156,14 +156,14 @@ class APIView(View):
"""
"""
raise
exceptions
.
Throttled
(
wait
)
raise
exceptions
.
Throttled
(
wait
)
def
get_parser_context
(
self
,
request
):
def
get_parser_context
(
self
,
http_
request
):
"""
"""
Returns a dict that is passed through to Parser.parse_stream(),
Returns a dict that is passed through to Parser.parse_stream(),
as the `parser_context` keyword argument.
as the `parser_context` keyword argument.
"""
"""
return
{
return
{
'upload_handlers'
:
request
.
upload_handlers
,
'upload_handlers'
:
http_
request
.
upload_handlers
,
'meta'
:
request
.
META
,
'meta'
:
http_
request
.
META
,
}
}
def
get_renderer_context
(
self
):
def
get_renderer_context
(
self
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment