示例#1
0
 def post(self):
     """
     Add new messages to the specified group
      :Parameters:
       - `session_data`: See `pms.server.server.is_valid_key`
       - `group`: The group the message is been sent to
       - `message`: The message to be added
     """
     user, user_data = server.is_valid_key(self)
     if user:
         group_name = escape(self.request.get("group"))
         message = escape(self.request.get("message"))
         if message == "" or group_name == "":
             return server.response(self, {"status" : "MISSINGVALUES"})
         group = memcache.get("group-" + group_name)
         if group is None:
             group = models.Group.get_by_key_name(group_name)
         if group is None:
             return server.response(self, {"status" : "NOTGROUP"})
         member = memcache.get("member-" + user.name + group.name)
         if member is None:
             member = models.GroupMember.all().filter("group =", group).filter("user ="******"status" : "NONMEMBER"})
         #cache member and group
         memcache.set("member-" + user.name + group.name, member)
         memcache.set("group-" + group.name, group)
         mess = models.Message(user=user, group=group, comment=message, date=int(time.time()))
         mess.put()
         #cache this date for other users
         memcache.set("last_message-" + group.name, mess.date)
         server.response(self)
     else:
         server.response(self, {"status" : "BADAUTH"})
示例#2
0
 def post(self):
     user, user_data = server.is_valid_key(self)
     if not user:
         return server.response(self, {"values" : "BADAUTH"})
     password_required = True if self.request.get("password") != "" else False
     group = escape(self.request.get("group"))
     if group == "":
         return server.response(self, {"status" : "MISSINGVALUES"})
     if password_required:
         salt = server.generate_salt()
         password = hashlib.sha1(self.request.get("password") + salt).hexdigest()
     else:
         password = None
         salt = None
     description = escape(self.request.get("description"))
     check = models.Group.get_by_key_name(group)
     if check is not None:
         return server.response(self, {"status" : "GROUPEXISTS"})
     new_group = models.Group(key_name=group, name=group, owner=user,
                              description=description,
                              password_required=password_required,
                              password=password, salt=salt)
     new_group.put()
     memcache.delete("user-groups" + user.name)
     member = models.GroupMember(group=new_group, user=user)
     member.put()
     server.response(self)
示例#3
0
 def post(self):
     user, user_data = server.is_valid_key(self)
     if not user:
         return server.response(self, values={"status" : "BADAUTH"})
     logged_in = memcache.get("logged_in")
     del(logged_in[user.name])
     memcache.set("logged_in", logged_in)
     server.response(self)
示例#4
0
 def post(self):
     user, user_details = server.is_valid_key(self)
     if not user:
         return server.response(self, values={"status" : "BADAUTH"})
     facebook_session_key = models.FacebookSession.get_by_key_name(user.name)
     if not facebook_session_key:
         return server.response(self, values={"status" : "NOFBKEY"})
     return server.response(self, values={"status": "OK", "session" : facebook_session_key},
                            template="session")
示例#5
0
 def post(self):
     user, userdata = server.is_valid_key(self)
     group = models.Group.get_by_key_name(self.request.get("group"))
     if group is None:
         return server.response(self, {"status" : "NOGROUP"})
     if models.GroupMember.all().filter("group =", group).count(2) > 1:
         return server.response(self, {"status" : "HASMEMBERS"})
     member = models.GroupMember.all().filter("group =", group).get()
     member.delete()
     group.delete()
     memcache.delete("user-groups" + user.name)
     server.response(self)
示例#6
0
 def post(self):
     """Logs the user in so other can see they are online. This should be called
     at least every 10 minutes otherwise the users status will be set to offline
     Returns the current ONLINE list"""
     user, user_data = server.is_valid_key(self)
     if not user:
         return server.response(self, values={"status" : "BADAUTH"})
     logged_in = memcache.get("logged_in")
     if logged_in is None:
         logged_in = {}
     logged_in[user.name] = time.time()
     memcache.set("logged_in", logged_in)
     server.response(self, values={'status' : 'OK', "users" : logged_in}, template="loginlist")
示例#7
0
 def post(self):
     user, userdata = server.is_valid_key(self)
     group = models.Group.get_by_key_name(self.request.get("group"))
     if group is None:
         return server.response(self, {"status" : "NOGROUP"})
     member = models.GroupMember.all().filter("group =", group).filter("user ="******"status" : "NONMEMBER"})
     #owners cant leave their group
     if user.name == group.owner.name:
         return server.response(self, {"status" : "ISOWNER"})
     member.delete()
     memcache.delete("user-groups" + user.name)
     server.response(self)
示例#8
0
 def post(self):
     user, userdata = server.is_valid_key(self)
     group = models.Group.get_by_key_name(self.request.get("group"))
     if group is None:
         return server.response(self, {"status" : "NOGROUP"})
     if user.name != group.owner.name:
         return server.response(self, {"status" : "NOTOWNER"})
     owner = models.GroupMember.all().filter("group =", group).filter("user ="******"newowner"))
     is_member = models.GroupMember.all().filter("group =", group).filter("user = "******"status" : "NONMEMBER"})
     owner.owner = new_owner
     owner.put()
     server.response(self)
示例#9
0
 def post(self):
     user, user_details = server.is_valid_key(self)
     if not user:
         return server.response(self, values={"status": "BADAUTH"})
     facebook_session_key = models.FacebookSession.get_by_key_name(user.name)
     if not facebook_session_key:
         facebook_session_key = models.FacebookSession(key_name=user.name,
                                                       user=user, uid=self.request.get("uid"),
                                                       session_key=self.request.get("facebook_session_key"),
                                                       expires=int(self.request.get("expires")))
     else:
         facebook_session_key.uid = self.request.get("uid")
         facebook_session_key.session_key = self.request.get("facebook_session_key")
         facebook_session_key.expires = int(self.request.get("expires"))
     facebook_session_key.put()
     return server.response(self)
     
示例#10
0
 def post(self):
     user, userdata = server.is_valid_key(self)
     if not user:
         return server.response(self, {"status": userdata})
     if self.request.get("group") == "":
         return server.response(self, {"status" : "MISSINGVALUES"})
     group = models.Group.get_by_key_name(self.request.get("group"))
     if group is None:
         return server.response(self, {"status" : "NOTGROUP"})
     if group.password_required:
         password = hashlib.sha1(self.request.get("password") + group.salt).hexdigest()
         if password != group.password:
             return server.response(self, {"status" : "BADPASS"})
     member = models.GroupMember(group=group, user=user)
     member.put()
     memcache.delete("user-groups" + user.name)
     return server.response(self)
示例#11
0
 def post(self):
     """
     Update the users avatar
      :Parameters:
       - `session_data`: See `pms.server.server.is_valid_key`
       - avatar: An image containing the new avatar
     """
     user, user_data = server.is_valid_key(self)
     if not user:
         return server.response(self, {"status" : "BADAUTH"})
     users_avatar = models.UserAvatar.get_by_key_name(user.name)
     if users_avatar is None:
         users_avatar = models.UserAvatar(key_name=user.name)
     users_avatar.avatar = str(self.request.get("avatar"))
     users_avatar.user = user
     users_avatar.upload_time = time.time()
     users_avatar.put()
     memcache.set("useravatar-" + user.name, users_avatar)
     return server.response(self)
示例#12
0
 def post(self):
     """
     Checks the server for new messages
      :Parameters:
       - session_data: See `pms.server.server.is_valid_key`
       - time: The timestamp of the last message recieved
     """
     user, user_data = server.is_valid_key(self)
     if not user:
         return server.response(self, {"status" : "BADAUTH"})
     last_checked = int(self.request.get("time"))
     membership = memcache.get("user-groups" + user.name)
     if membership is None:
         membership = models.GroupMember.all().filter("user ="******"user-groups" + user.name, membership)
     all_messages = []
     for member in membership:
         logging.info("Checking %s" % member.group.name)
         if member.group.name == "Facebook":
             continue
         last_message = memcache.get("last_message-" + member.group.name)
         logging.info("Last stored message in memcache: %s" % last_message)
         if last_message is not None:
             logging.info("%s : %s" % (last_message, last_checked))
             if last_message == "No new" or int(last_message) == last_checked:
                 continue
         logging.info("Using datastore for %s" % member.group.name)
         logging.info("Last check: %s" % last_checked)
         messages = models.Message.all().filter("group =", member.group).filter(
             "date >", last_checked).order("-date").fetch(100)
         for message in messages:
             logging.info("date: %s" % message.date)
         if len(messages) > 0:
             logging.info("We have %s messages, setting memcache" % len(messages))
             memcache.set("last_message-" + member.group.name, float(messages[0].date))
         else:
             logging.info("No new messages")
             memcache.set("last_message-" + member.group.name, "No new")
         all_messages.extend(messages)
     server.response(self, values={"status" : "OK", "messages" : all_messages}, template="messages")
示例#13
0
 def post(self):
     """
     Outputs a list of avatars for users this user requires the avatar for,
     uploaded after a certain time. This is desirable if there are many users.
      :Paramters:
       - `session_data`: See `pms.server.server.is_valid_key`
       - time: A unix timestamp of the last downloaded avatar
       - userlist: A list of users we want to check
     """
     user, user_details = server.is_valid_key(self)
     last_time = self.request.get("time")
     if not user:
         return server.response(self, values={"status" : "BADAUTH"})
     userlist = self.request.get("userlist").split(",")
     logging.info(str(userlist))
     new_avatars = []
     logging.info("name list %s" % str(userlist))
     for name in userlist:
         avatar = memcache.get("useravatar-" + name)
         if avatar is None:
             avatar = models.UserAvatar.get_by_key_name(name)
             memcache.set("useravatar-" + name, avatar)
         if avatar is None:
             logging.info("There is no avatar for '%s' continue" % name)
             continue
         if last_time != "all":
             logging.info(avatar.upload_time - float(last_time))
         if last_time == "all":
             new_avatars.append(avatar)
             logging.info("Appended avatar")
         elif avatar.upload_time > float(last_time):
             new_avatars.append(avatar)
             logging.info("Appended avatar")
         else:
             logging.info("avatar not appened: %s" % name)
             logging.info("upload time: %s last time: %s" % (avatar.upload_time, last_time))
     return server.response(self, values={"status" : "OK", "avatars" : new_avatars},
                            template="avatars")