django : don't return cookie for a particular endpoint

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I need to return a response from Django without returning a cookie.

I'm trying to implement a webhook client API that requires:

  • the use of https
  • response within 5 seconds
  • no body in the response
  • no cookies in the response headers
  • a 401 unauthorised status code for invalid hmac signatures

I'm working on Django 1.10 (soon to be upgraded to 2.x) where the rest of the app is protected by user validation via sessions.

Part of the endpoint view is as follows:

response200 = HttpResponse(status=200)
response401 = HttpResponse(status=401)
response401.close()  # attempt not to set cookie

signature = request.META.get('HTTP_WEBHOOK_SIGNATURE')

if not request.method == 'POST':
    return response401
if not signature:
    return response401

and so on.

However my attempt to avoid setting the session using response401.close() doesn't work. I've also tried del response401['Set-Cookie']see Django docs

The cookie LocalTest... is still set in this curl session:

$ curl -d "param1=value1&param2=value2" \
       -H "webhook-signature: $SIGVAL" \
       -H "Content-Type: application/x-www-form-urlencoded" \
       -X POST http://127.0.0.1:8000/invoices/webhookendpoint \
       -w "\n" -v
...
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> POST /invoices/webhookendpoint HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.52.1
> Accept: */*
> x-xero-signature: ZSlYlcsLbYmas53uHNrBFiVL0bLbIKetQI6x8JausfA=n
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 27
> 
* upload completely sent off: 27 out of 27 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 401 Unauthorized
< Date: Thu, 11 Apr 2019 08:32:50 GMT
< Server: WSGIServer/0.1 Python/2.7.13
< Vary: Cookie
< Content-Type: text/html; charset=utf-8
< Set-Cookie:  LocalTest=gwx7jhsshy2qvtct1rmzv86h7xshe6ot; httponly; Path=/
< 
* Curl_http_done: called premature == 0
* Closing connection 0
profilepic.png
manpreet 2 years ago

It appears that this works:

# ensure no cookie header is set
del request.session
response200 = HttpResponse(status=200)
response401 = HttpResponse(status=401)
...

as shown in the curl response:

< HTTP/1.0 200 OK
< Date: Thu, 11 Apr 2019 08:49:28 GMT
< Server: WSGIServer/0.1 Python/2.7.13
< Content-Type: text/html; charset=utf-8
< 

Naturally, if you go to this endpoint as a logged in user, you will have to log in again.


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.