Source code for oauth2.web.tornado

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
.. warning::

   Tornado support is currently experimental.

Use Tornado to serve token requests:

.. literalinclude:: examples/tornado_server.py
"""

from __future__ import absolute_import

from tornado.web import RequestHandler


class Request(object):
    def __init__(self, handler):
        """
        :param handler: Handler of the current request
        :type handler: :class:`tornado.web.RequestHandler`
        """
        self.handler = handler

    @property
    def method(self):
        return self.handler.request.method

    @property
    def path(self):
        return self.handler.request.path

    @property
    def query_string(self):
        return self.handler.request.query

    def get_param(self, name, default=None):
        return self.handler.get_query_argument(name=name, default=default)

    def header(self, name, default=None):
        return self.handler.request.headers[name]

    def post_param(self, name, default=None):
        return self.handler.get_body_argument(name=name, default=default)


[docs]class OAuth2Handler(RequestHandler):
[docs] def initialize(self, provider): """ :type provider: :class:`oauth2.Provider` """ self.provider = provider
def get(self): response = self._dispatch_request() self._map_response(response) def post(self): response = self._dispatch_request() self._map_response(response) def _dispatch_request(self): return self.provider.dispatch(request=Request(handler=self), environ=dict()) def _map_response(self, response): for name, value in list(response.headers.items()): self.set_header(name, value) self.set_status(response.status_code) self.write(response.body)