Skip to content

Instantly share code, notes, and snippets.

@om2c0de
Created July 6, 2020 08:34
Show Gist options
  • Save om2c0de/c16e8d343a2824d44ad5767fdb4030b3 to your computer and use it in GitHub Desktop.
Save om2c0de/c16e8d343a2824d44ad5767fdb4030b3 to your computer and use it in GitHub Desktop.
KerberosAuthHandler
import logging
import sys
from abc import abstractmethod
from typing import Optional, Awaitable
import tornado.escape
import tornado.ioloop
import tornado.web
from .mixins import KerberosAuthMixin
# Initialize logger
logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
class KerberosAuthHandler(KerberosAuthMixin):
def get(self):
auth_header = self.request.headers.get("Authorization")
if auth_header:
self.get_authenticated_user(self._on_auth)
return
self.authenticate_redirect()
def _on_auth(self, user):
if not user:
raise tornado.web.HTTPError(500, "Kerberos auth failed")
self.set_secure_cookie("user", tornado.escape.json_encode(user))
logging.debug(f"KerberosAuthHandler user: {user}") # To see what you get
next_url = self.get_argument("next", None) # To redirect properly
if next_url:
self.redirect(next_url)
else:
self.redirect("/")
@abstractmethod
def data_received(self, chunk: bytes) -> Optional[Awaitable[None]]:
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment