diff options
author | Teddy <ted.sybil@gmail.com> | 2013-08-25 21:34:38 +0800 |
---|---|---|
committer | Teddy <ted.sybil@gmail.com> | 2013-08-25 21:34:38 +0800 |
commit | 537d01ac3e78dec6828e068979dcd061e8f68a98 (patch) | |
tree | a5cad3526ed245384a7c6fce52103661dc6f57a2 /server/piztor/server.py | |
parent | 0e687f12bd2653adb55ea002b39292678366c525 (diff) |
ptp fixed
Diffstat (limited to 'server/piztor/server.py')
-rw-r--r-- | server/piztor/server.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/server/piztor/server.py b/server/piztor/server.py index 2397225..98c67c2 100644 --- a/server/piztor/server.py +++ b/server/piztor/server.py @@ -258,6 +258,50 @@ class LocationRequestHandler(RequestHandler): reply += struct.pack("!Ldd", user.id, loc.lat, loc.lng) return reply + +class UserInfoRequestHandler(RequestHandler): + + def handle(self, tr_data): + logger.info("Reading user info request data...") + + try: + token, = struct.unpack("!32s", tr_data[:32]) + username, tail = RequestHandler.trunc_padding(tr_data[32:]) + if username is None: + raise struct.error + uid, = struct.unpack("!L", tail) + except struct.error: + raise BadReqError("Location request: Malformed request body") + + logger.info("Trying to request locatin with " \ + "(token = {0}, gid = {1})" \ + .format(get_hex(token), gid)) + + session = self.Session() + uauth = RequestHandler.get_uauth(token, username, session) + # Auth failure + if uauth is None: + logger.warning("Authentication failure") + return struct.pack("!LBBL", LocationRequestHandler \ + ._location_request_response_size(0), + _OptCode.location_request, + _StatusCode.failure, + 0) + + ulist = session.query(UserModel).filter(UserModel.gid == gid).all() + reply = struct.pack( + "!LBBL", + LocationRequestHandler._location_request_response_size(len(ulist)), + _OptCode.location_request, + _StatusCode.sucess, + len(ulist)) + + for user in ulist: + loc = user.location + reply += struct.pack("!Ldd", user.id, loc.lat, loc.lng) + + return reply + handlers = [UserAuthHandler, LocationUpdateHandler, |