# under the License.
import logging
-import tornado.auth
import tornado.escape
import tornado.ioloop
import tornado.web
global_message_buffer = MessageBuffer()
-class BaseHandler(tornado.web.RequestHandler):
- def get_current_user(self):
- user_json = self.get_secure_cookie("chatdemo_user")
- if not user_json: return None
- return tornado.escape.json_decode(user_json)
-
-
-class MainHandler(BaseHandler):
- @tornado.web.authenticated
+class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html", messages=global_message_buffer.cache)
-class MessageNewHandler(BaseHandler):
- @tornado.web.authenticated
+class MessageNewHandler(tornado.web.RequestHandler):
def post(self):
message = {
"id": str(uuid.uuid4()),
- "from": self.current_user["first_name"],
"body": self.get_argument("body"),
}
# to_basestring is necessary for Python 3's json encoder,
global_message_buffer.new_messages([message])
-class MessageUpdatesHandler(BaseHandler):
- @tornado.web.authenticated
+class MessageUpdatesHandler(tornado.web.RequestHandler):
@gen.coroutine
def post(self):
cursor = self.get_argument("cursor", None)
global_message_buffer.cancel_wait(self.future)
-class AuthLoginHandler(BaseHandler, tornado.auth.GoogleMixin):
- @gen.coroutine
- def get(self):
- if self.get_argument("openid.mode", None):
- user = yield self.get_authenticated_user()
- self.set_secure_cookie("chatdemo_user",
- tornado.escape.json_encode(user))
- self.redirect("/")
- return
- self.authenticate_redirect(ax_attrs=["name"])
-
-
-class AuthLogoutHandler(BaseHandler):
- def get(self):
- self.clear_cookie("chatdemo_user")
- self.write("You are now logged out")
-
-
def main():
parse_command_line()
app = tornado.web.Application(
[
(r"/", MainHandler),
- (r"/auth/login", AuthLoginHandler),
- (r"/auth/logout", AuthLogoutHandler),
(r"/a/message/new", MessageNewHandler),
(r"/a/message/updates", MessageUpdatesHandler),
],
cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
- login_url="/auth/login",
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
xsrf_cookies=True,