def CheckAuth(handler): ip = GetIP(handler) cookies = handler.request.cookies if 'auth' in cookies: auth = cookies['auth'].value member_num = memcache.get(auth) if (member_num > 0): member = memcache.get('Member_' + str(member_num)) if member is None: #q = db.GqlQuery("SELECT * FROM Member WHERE num = :1", member_num) q = Member.selectBy(num=member_num) if q.count() == 1: member = q[0] memcache.set(auth, member.num) memcache.set('Member_' + str(member_num), member) else: member = False if member: member.ip = ip return member else: #q = db.GqlQuery("SELECT * FROM Member WHERE auth = :1", auth) q = Member.selectBy(auth=auth) if (q.count() == 1): member_num = q[0].num member = q[0] memcache.set(auth, member_num) memcache.set('Member_' + str(member_num), member) member.ip = ip return member else: return False else: return False
def member(self): if not hasattr(self, "_member"): ip = False member = False if 'X-Real-IP' in self.request.headers: ip = self.request.headers['X-Real-IP'] else: ip = self.request.remote_ip #cookies = Cookies(self, max_age = 86400 * 14, path = '/') auth = self.get_cookie('auth') #if 'auth' in cookies: if auth is not None: #auth = cookies['auth'] member_num = memcache.get(auth) if member_num > 0: member = memcache.get('Member_' + str(member_num)) if member is None: #q = db.GqlQuery("SELECT * FROM Member WHERE num = :1", member_num) q = Member.selectBy(num=member_num) if q.count() == 1: member = q[0] memcache.set('Member_' + str(member_num), member, 86400 * 14) if member: member.ip = ip else: #q = db.GqlQuery("SELECT * FROM Member WHERE auth = :1", auth) q = Member.selectBy(auth=auth) if (q.count() == 1): member_num = q[0].num member = q[0] memcache.set(auth, member_num, 86400 * 14) memcache.set('Member_' + str(member_num), member, 86400 * 14) member.ip = ip self._member = member return self._member
def receive(self, message): bodies = message.bodies(content_type='text/plain') for body in bodies: to = extract_address(message.to) sender = extract_address(message.sender.lower()) if to[0:5].lower() == 'tweet': #q = db.GqlQuery("SELECT * FROM Member WHERE email = :1", sender) q = Member.selectBy(email=sender) if q.count() == 1: member = q[0] if member.twitter_oauth == 1: access_token = OAuthToken.from_string( member.twitter_oauth_string) twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token) status = body[1].decode() if len(status) > 140: status = status[0:140] try: logging.info("About to send tweet: " + status) twitter.PostUpdate(status.encode('utf-8')) logging.info("Successfully tweet: " + status) except: logging.error("Failed to tweet for " + member.username) else: logging.error("User " + sender + " doesn't have Twitter link.")
def get(self, private_token): n = memcache.get('n_' + private_token) if n is not None: self.values['notification'] = n self.set_header('Content-type', 'application/xml;charset=UTF-8') self.values['member'] = self.member self.finalize(template_name='notifications', template_root='feed', template_type='xml') else: #q = db.GqlQuery("SELECT * FROM Member WHERE private_token = :1", private_token) q = Member.selectBy(private_token=private_token) count = q.count() if count > 0: member = q[0] #q = db.GqlQuery("SELECT * FROM Notification WHERE for_member_num = :1 ORDER BY num DESC LIMIT 20", member.num) q = Notification.selectBy(for_member_num=member.num).orderBy('-num').limit(20) notifications = [] i = 0 for n in q: if n.type == 'reply': n.title = u'' + n.member.username + u' 在 ' + self.escape(n.label1) + u' 里回复了你' n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在 <a href="' + n.link1 + '">' + self.escape(n.label1) + u'</a> 里回复了你' notifications.append(n) if n.type == 'mention_reply': n.title = u'' + n.member.username + u' 在回复 ' + self.escape(n.label1) + u' 时提到了你' n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在回复 <a href="' + n.link1 + '">' + self.escape(n.label1) + u'</a> 时提到了你' notifications.append(n) i = i + 1 self.values['notifications'] = notifications memcache.set('n_' + private_token, notifications, 600) self.set_header('Content-type', 'application/xml;charset=UTF-8') self.values['site'] = GetSite() self.values['member'] = member self.finalize(template_name='notifications', template_root='feed', template_type='xml')
def GetMemberByUsername(name): one = memcache.get('Member::' + str(name).lower()) if one: return one else: #q = db.GqlQuery("SELECT * FROM Member WHERE username_lower = :1", str(name).lower()) q = Member.selectBy(username_lower=str(name).lower()) if q.count() == 1: one = q[0] memcache.set('Member::' + str(name).lower(), one, 86400) return one else: return False
def GetMemberByEmail(email): cache = 'Member::email::' + hashlib.md5(email.lower()).hexdigest() one = memcache.get(cache) if one: return one else: #q = db.GqlQuery("SELECT * FROM Member WHERE email = :1", str(email).lower()) q = Member.selectBy(email=str(email).lower()) if q.count() == 1: one = q[0] memcache.set(cache, one, 86400) return one else: return False
def get(self, private_token): n = memcache.get('n_' + private_token) if n is not None: self.values['notification'] = n self.set_header('Content-type', 'application/xml;charset=UTF-8') self.values['member'] = self.member self.finalize(template_name='notifications', template_root='feed', template_type='xml') else: #q = db.GqlQuery("SELECT * FROM Member WHERE private_token = :1", private_token) q = Member.selectBy(private_token=private_token) count = q.count() if count > 0: member = q[0] #q = db.GqlQuery("SELECT * FROM Notification WHERE for_member_num = :1 ORDER BY num DESC LIMIT 20", member.num) q = Notification.selectBy( for_member_num=member.num).orderBy('-num').limit(20) notifications = [] i = 0 for n in q: if n.type == 'reply': n.title = u'' + n.member.username + u' 在 ' + self.escape( n.label1) + u' 里回复了你' n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在 <a href="' + n.link1 + '">' + self.escape( n.label1) + u'</a> 里回复了你' notifications.append(n) if n.type == 'mention_reply': n.title = u'' + n.member.username + u' 在回复 ' + self.escape( n.label1) + u' 时提到了你' n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在回复 <a href="' + n.link1 + '">' + self.escape( n.label1) + u'</a> 时提到了你' notifications.append(n) i = i + 1 self.values['notifications'] = notifications memcache.set('n_' + private_token, notifications, 600) self.set_header('Content-type', 'application/xml;charset=UTF-8') self.values['site'] = GetSite() self.values['member'] = member self.finalize(template_name='notifications', template_root='feed', template_type='xml')
def receive(self, message): bodies = message.bodies(content_type = 'text/plain') for body in bodies: to = extract_address(message.to) sender = extract_address(message.sender.lower()) if to[0:5].lower() == 'tweet': #q = db.GqlQuery("SELECT * FROM Member WHERE email = :1", sender) q = Member.selectBy(email=sender) if q.count() == 1: member = q[0] if member.twitter_oauth == 1: access_token = OAuthToken.from_string(member.twitter_oauth_string) twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token) status = body[1].decode() if len(status) > 140: status = status[0:140] try: logging.info("About to send tweet: " + status) twitter.PostUpdate(status.encode('utf-8')) logging.info("Successfully tweet: " + status) except: logging.error("Failed to tweet for " + member.username) else: logging.error("User " + sender + " doesn't have Twitter link.")