00001
00002
00003 import nstart
00004 import config
00005 import os, sys, string, time
00006 import socket
00007
00008 from pyclearsilver.log import *
00009
00010 from pyclearsilver.CSPage import Context
00011 import neo_cgi, neo_cs, neo_util
00012 from MBPage import MBPage
00013 from webui import config
00014
00015 from auth import browserauth
00016 from auth import cookieauth
00017 from auth import db_auth
00018 from auth import pwauth
00019
00020 from web_msgs.msg import WebEvent
00021 import rospy
00022
00023 class SignInPage(MBPage):
00024 def setup(self, hdf):
00025 pass
00026
00027 def display(self, hdf):
00028 username = hdf.getValue("Query.username", "")
00029 if not username: return
00030
00031
00032
00033 ip_address = socket.gethostbyname(config.gLobbyHost)
00034
00035 if hdf.getValue("CGI.RemoteAddress", "") != ip_address:
00036 warn("request from lobby on %s does not match %s" % (hdf.getValue("CGI.RemoteAddress", ""), ip_address))
00037 return
00038 else:
00039 warn("ip address is authorized")
00040
00041
00042 user = self.authdb.users.lookupCreate(username=username)
00043
00044 for key in ("role", "pw_hash", "status", "dismissed_notices", "favorite_apps", "skype_id"):
00045 user[key] = hdf.getValue("Query." + key, "")
00046
00047 user.save()
00048
00049
00050 self.username = username
00051 self.make_active_user(hdf)
00052
00053
00054 pub = rospy.Publisher("/webui/events", WebEvent)
00055 rospy.init_node("webui_login", anonymous=True)
00056 msg = WebEvent()
00057 msg.source = "user"
00058 msg.type = "login (lobby)"
00059 msg.data = self.username
00060 pub.publish(msg)
00061
00062
00063 def run(context):
00064 page = SignInPage(context, pagename="signin_lobby", nologin=1)
00065 return page
00066
00067 def main(context):
00068 page = run(context)
00069 page.start()
00070
00071
00072 if __name__ == "__main__":
00073 main(Context())
00074