Beispiel #1
0
 def post(self):
     site = GetSite()
     browser = detect(self.request)
     self.session = Session()
     template_values = {}
     template_values['site'] = site
     template_values['page_title'] = site.title + u' › 密码设置'
     template_values['system_version'] = SYSTEM_VERSION
     errors = 0
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     if (member):
         template_values['member'] = member
         template_values['member_username'] = member.username
         template_values['member_email'] = member.email
         # Verification: password
         password_error = 0
         password_update = False
         password_error_messages = ['',
             '新密码长度不能超过 32 个字符',
             '请输入当前密码',
             '当前密码不正确'
         ]
         password_new = self.request.arguments['password_new'][0].strip()
         if (len(password_new) > 0):
             password_update = True
             if (len(password_new) > 32):
                 password_error = 1
             else:
                 password_current = self.request.arguments['password_current'][0].strip()
                 if (len(password_current) == 0):
                     password_error = 2
                 else:
                     password_current_sha1 = hashlib.sha1(password_current).hexdigest()
                     if (password_current_sha1 != member.password):
                         password_error = 3
         template_values['password_error'] = password_error
         template_values['password_error_message'] = password_error_messages[password_error]
         if ((password_error == 0) and (password_update == True)):
             old_auth = member.auth
             memcache.delete(old_auth)
             member.password = hashlib.sha1(password_new).hexdigest()
             member.auth = hashlib.sha1(str(member.num) + ':' + member.password).hexdigest()
             member.sync()
             store.commit()  #jon add
             memcache.set(member.auth, member.num, 86400 * 14)
             memcache.set('Member_' + str(member.num), member, 86400 * 14)
             self.session['message'] = '密码已成功更新,下次请用新密码登录'
             self.set_header('Set-Cookie', 'auth=' + member.auth + '; expires=' + (datetime.datetime.now(pytz.timezone('Asia/Shanghai')) + datetime.timedelta(days=365)).strftime("%a, %d-%b-%Y %H:%M:%S GMT") + '; path=/')
             self.redirect('/settings')
         else:
             if browser['ios']:
                 path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile')
             else:
                 path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop')
             t=self.get_template(path, 'member_settings_password.html')
             self.finish(t.render(template_values))
     else:
         self.redirect('/signin')
Beispiel #2
0
 def get(self, request):
     site = GetSite()
     browser = detect(self.request)
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     self.session = Session()
     if member:
         source = 'http://daydream/stream/' + str(member.num)
         result = urlfetch.fetch(source)
         images = json.loads(result.content)
         template_values = {}
         template_values['images'] = images
         template_values['site'] = site
         template_values['member'] = member
         template_values['page_title'] = site.title + u' › 图片上传'
         template_values['l10n'] = l10n
         template_values['system_version'] = SYSTEM_VERSION
         if 'message' in self.session:
             template_values['message'] = self.session['message']
             del self.session['message']
         path = 'desktop/images_home.html'
         #output = template.render(path, template_values)
         #self.response.out.write(output)
         return render(request, path, template_values)
     else:
         #self.redirect('/signin')
         return redirect('/signin')
Beispiel #3
0
 def get(self, request):
     site = GetSite()
     self.session = Session()
     browser = detect(self.request)
     template_values = {}
     template_values['site'] = site
     template_values['page_title'] = site.title + u' › 头像'
     template_values['system_version'] = SYSTEM_VERSION
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     if (member):
         if 'message' in self.session:
             template_values['message'] = self.session['message']
             del self.session['message']
         template_values['member'] = member
         if browser['ios']:
             path = 'mobile/member_settings_avatar.html'
         else:
             path = 'desktop/member_settings_avatar.html'
         #output = template.render(path, template_values)
         #self.response.out.write(output)
         return render(request, path, template_values)
     else:
         #self.redirect('/signin')
         return redirect('/signin')
Beispiel #4
0
 def post(self):
     self.session = Session()
     site = GetSite()
     browser = detect(self.request)
     template_values = {}
     template_values['system_version'] = SYSTEM_VERSION
     errors = 0
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     template_values['page_title'] = site.title + u' › ' + l10n.settings.decode('utf-8')
     if (member):
         mission = self.request.get('mission')
         q = db.GqlQuery("SELECT * FROM Hours WHERE member = :1", member)
         if q.count() < 1:
             # 新建
             hours = Hours(mission=mission)
             hours.member = member
             hours.member_num = member.num
             hours.put()
         else:
             if q.count() == 1:
                 hours = q[0]
                 hours.mission = mission
                 hours.edits += 1
                 hours.put()
     self.redirect('/settings')
Beispiel #5
0
 def get(self):
     site = GetSite()
     self.session = Session()
     browser = detect(self.request)
     template_values = {}
     template_values['site'] = site
     template_values['page_title'] = site.title + u' › 头像'
     template_values['system_version'] = SYSTEM_VERSION
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     if (member):
         if 'message' in self.session:
             template_values['message'] = self.session['message']
             del self.session['message']
         template_values['member'] = member
         if browser['ios']:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile',
                                 'member_settings_avatar.html')
         else:
             path = os.path.join(os.path.dirname(__file__), 'tpl',
                                 'desktop', 'member_settings_avatar.html')
         output = template.render(path, template_values)
         self.response.out.write(output)
     else:
         self.redirect('/signin')
Beispiel #6
0
 def get(self):
     site = GetSite()
     browser = detect(self.request)
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     self.session = Session()
     if member:
         source = 'http://daydream/stream/' + str(member.num)
         result = urlfetch.fetch(source)
         images = json.loads(result.content)
         template_values = {}
         template_values['images'] = images
         template_values['site'] = site
         template_values['member'] = member
         template_values['page_title'] = site.title + u' › 图片上传'
         template_values['l10n'] = l10n
         template_values['system_version'] = SYSTEM_VERSION
         if 'message' in self.session:
             template_values['message'] = self.session['message']
             del self.session['message']
         path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop')
         t =self.get_template(path, 'images_home.html')
         self.finish(t.render(template_values))
     else:
         self.redirect('/signin')
Beispiel #7
0
 def get(self, one_num):
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/'
     member = CheckAuth(self)
     t = self.request.argument['t'][0]
     if member:
         if str(member.created_ts) == str(t):
             one = GetKindByNum('Member', int(one_num))
             if one is not False:
                 if one.num != member.num:
                     #q = db.GqlQuery("SELECT * FROM MemberBookmark WHERE one = :1 AND member_num = :2", one, member.num)
                     q = MemberBookmark.selectBy(one=one,
                                                 member_num=member.num)
                     if q.count() == 0:
                         member = Member.get(member.id)
                         member.favorited_members = member.favorited_members + 1
                         if member.favorited_members > 30:
                             self.session = Session()
                             self.session['message'] = '最多只能添加 30 位特别关注'
                         else:
                             bookmark = MemberBookmark(member=member)
                             bookmark.one = one
                             bookmark.member_num = member.num
                             bookmark.sync()
                             member.sync()
                             memcache.set('Member_' + str(member.num),
                                          member, 86400)
                             n = 'r/m' + str(one.num) + '/m' + str(
                                 member.num)
                             memcache.set(n, True, 86400 * 14)
                             one = Member.get(one.id)
                             one.followers_count = one.followers_count + 1
                             one.sync()
                             store.commit()  #jon add
                             memcache.set('Member_' + str(one.num), one,
                                          86400)
                             memcache.set(
                                 'Member::' + str(one.username_lower), one,
                                 86400)
                             self.session = Session()
                             self.session[
                                 'message'] = '特别关注添加成功,还可以添加 ' + str(
                                     30 - member.favorited_members) + ' 位'
     self.redirect(go)
Beispiel #8
0
 def get(self):
     self.session = Session()
     member = CheckAuth(self)
     if member:
         twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET)
         request_token = twitter.getRequestToken()
         authorization_url = twitter.getAuthorizationURL(request_token)
         self.session['request_token'] = request_token
         self.redirect(authorization_url)
     else:
         self.redirect('/signin')
Beispiel #9
0
 def get(self, request, one_num):
     if 'HTTP_REFERER' in self.request.META:
         go = self.request.META['HTTP_REFERER']
     else:
         go = '/'
     member = CheckAuth(self)
     t = self.request.GET.get('t')
     if member:
         if str(member.created_ts) == str(t):
             one = GetKindByNum('Member', int(one_num))
             if one is not False:
                 if one.num != member.num:
                     #q = db.GqlQuery("SELECT * FROM MemberBookmark WHERE one = :1 AND member_num = :2", one, member.num)
                     q = MemberBookmark.objects.filter(one = one, member_num = member.num)
                     if q.count() == 0:
                         #member = db.get(member.key())
                         member.favorited_members = member.favorited_members + 1
                         if member.favorited_members > 30:
                             self.session = Session()
                             self.session['message'] = '最多只能添加 30 位特别关注'
                         else:
                             #bookmark = MemberBookmark(parent=member)
                             bookmark = MemberBookmark()
                             bookmark.one = one
                             bookmark.member_num = member.num
                             bookmark.save()
                             member.save()
                             cache.set('Member_' + str(member.num), member, 86400)
                             n = 'r/m' + str(one.num) + '/m' + str(member.num)
                             cache.set(n, True, 86400 * 14)
                             #one = db.get(one.key())
                             one.followers_count = one.followers_count + 1
                             one.save()
                             cache.set('Member_' + str(one.num), one, 86400)
                             cache.set('Member::' + str(one.username_lower), one, 86400)
                             self.session = Session()
                             self.session['message'] = '特别关注添加成功,还可以添加 ' + str(30 - member.favorited_members) + ' 位'
     #self.redirect(go)
     return redirect(go)
Beispiel #10
0
 def get(self, one_num):
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/'
     member = CheckAuth(self)
     if member:
         one = GetKindByNum('Member', int(one_num))
         if one is not False:
             if one.num != member.num:
                 q = db.GqlQuery(
                     "SELECT * FROM MemberBookmark WHERE one = :1 AND member_num = :2",
                     one, member.num)
                 if q.count() == 0:
                     member = db.get(member.key())
                     member.favorited_members = member.favorited_members + 1
                     if member.favorited_members > 30:
                         self.session = Session()
                         self.session['message'] = '最多只能添加 30 位特别关注'
                     else:
                         bookmark = MemberBookmark(parent=member)
                         bookmark.one = one
                         bookmark.member_num = member.num
                         bookmark.put()
                         member.put()
                         n = 'r/m' + str(one.num) + '/m' + str(member.num)
                         memcache.set(n, True, 86400 * 14)
                         one = db.get(one.key())
                         one.followers_count = one.followers_count + 1
                         one.put()
                         memcache.set('Member_' + str(one.num), one, 86400)
                         memcache.set('Member::' + str(one.username_lower),
                                      one, 86400)
                         self.session = Session()
                         self.session['message'] = '特别关注添加成功,还可以添加 ' + str(
                             30 - member.favorited_members) + ' 位'
     self.redirect(go)
Beispiel #11
0
 def get(self):
     self.session = Session()
     member = CheckAuth(self)
     if member:
         memcache.delete('Member_' + str(member.num))
         member = GetKindByNum('Member', member.num)
         member.twitter_oauth = 0
         member.twitter_oauth_key = ''
         member.twitter_oauth_secret = ''
         member.twitter_sync = 0
         member.put()
         memcache.set('Member_' + str(member.num), member, 86400)
         self.redirect('/settings')
     else:
         self.redirect('/signin')
Beispiel #12
0
 def post(self):
     site = GetSite()
     browser = detect(self.request)
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     if member:    
         image = self.request.argument['image'][0]
         if image is not None:
             import urllib, urllib2
             parameters = urllib.urlencode(dict(member_id=member.num, image=image))
             try:
                 f = urllib2.urlopen('http://daydream/upload', parameters)
                 data = f.read()
                 f.close()
             except:
                 self.session = Session()
                 self.session['message'] = '图片不能超过 1M'
             self.redirect('/images')
     else:
         self.redirect('/signin')
Beispiel #13
0
 def get(self):
     site = GetSite()
     browser = detect(self.request)
     self.session = Session()
     template_values = {}
     template_values['site'] = site
     template_values['system_version'] = SYSTEM_VERSION
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     template_values['page_title'] = site.title + u' › ' + l10n.settings.decode('utf-8')
     if (member):
         q = db.GqlQuery("SELECT * FROM Hours WHERE member = :1", member)
         if q.count() == 1:
             hours = q[0]
             template_values['hours'] = hours
         template_values['member'] = member
         template_values['member_username'] = member.username
         template_values['member_email'] = member.email
         if (member.website == None):
             member.website = ''
         template_values['member_website'] = member.website
         if (member.twitter == None):
             member.twitter = ''
         template_values['member_twitter'] = member.twitter
         if (member.location == None):
             member.location = ''
         template_values['member_location'] = member.location
         if (member.tagline == None):
             member.tagline = ''
         template_values['member_tagline'] = member.tagline
         if (member.bio == None):
             member.bio = ''
         template_values['member_bio'] = member.bio
         if (member.l10n == None):
             member.l10n = 'en'
         template_values['member_l10n'] = member.l10n
         s = GetLanguageSelect(member.l10n)
         template_values['s'] = s
         if member.twitter_sync == 1:
             template_values['member_twitter_sync'] = 1
         if 'message' in self.session:
             message = self.session['message']
             del self.session['message']
         else:
             message = None
         template_values['message'] = message
         try:
             blocked = pickle.loads(member.blocked.encode('utf-8'))
         except:
             blocked = []
         template_values['member_stats_blocks'] = len(blocked)
         member_topics = memcache.get('Member_' + str(member.num) + '_topics_count')
         if member_topics is None:
             q = db.GqlQuery("SELECT __key__ FROM Topic WHERE member = :1", member)
             member_topics = q.count()
             memcache.set('Member_' + str(member.num) + '_topics_count', member_topics, 3600 * 4)
         template_values['member_stats_topics'] = member_topics
         member_replies = memcache.get('Member_' + str(member.num) + '_replies_count')
         if member_replies is None:
             replies = Reply.all()
             replies.filter("member = ", member)
             member_replies = replies.count()
             memcache.set('Member_' + str(member.num) + '_replies_count', member_replies, 3600 * 4)
         template_values['member_stats_replies'] = member_replies
         if browser['ios']:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'member_settings.html')
         else:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'member_settings.html')
         output = template.render(path, template_values)
         self.response.out.write(output)
     else:
         self.redirect('/signin')
Beispiel #14
0
 def get(self, node_name):
     site = GetSite()
     browser = detect(self.request)
     self.session = Session()
     template_values = {}
     template_values['site'] = site
     template_values['rnd'] = random.randrange(1, 100)
     template_values['system_version'] = SYSTEM_VERSION
     member = CheckAuth(self)
     if member:
         template_values['member'] = member
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n    
     node = GetKindByName('Node', node_name)
     template_values['node'] = node
     pagination = False
     pages = 1
     page = 1
     page_size = 15
     start = 0
     has_more = False
     more = 1
     has_previous = False
     previous = 1
     if node:
         template_values['canonical'] = 'http://' + site.domain + '/go/' + node.name
         if member:
             favorited = member.hasFavorited(node)
             template_values['favorited'] = favorited
             recent_nodes = memcache.get('member::' + str(member.num) + '::recent_nodes')
             recent_nodes_ids = memcache.get('member::' + str(member.num) + '::recent_nodes_ids')
             if recent_nodes and recent_nodes_ids:
                 if (node.num in recent_nodes_ids) is not True:
                     recent_nodes.insert(0, node)
                     recent_nodes_ids.insert(0, node.num)
                     memcache.set('member::' + str(member.num) + '::recent_nodes', recent_nodes, 7200)
                     memcache.set('member::' + str(member.num) + '::recent_nodes_ids', recent_nodes_ids, 7200)
             else:
                 recent_nodes = []
                 recent_nodes.append(node)
                 recent_nodes_ids = []
                 recent_nodes_ids.append(node.num)
                 memcache.set('member::' + str(member.num) + '::recent_nodes', recent_nodes, 7200)
                 memcache.set('member::' + str(member.num) + '::recent_nodes_ids', recent_nodes_ids, 7200)
             template_values['recent_nodes'] = recent_nodes
         template_values['page_title'] = site.title + u' › ' + node.title
         # Pagination
         if node.topics > page_size:
             pagination = True
         else:
             pagination = False
         if pagination:
             if node.topics % page_size == 0:
                 pages = int(node.topics / page_size)
             else:
                 pages = int(node.topics / page_size) + 1
             page = self.request.get('p')
             if (page == '') or (page is None):
                 page = 1
             else:
                 page = int(page)
                 if page > pages:
                     page = pages
                 else:
                     if page < 1:
                         page = 1
             if page < pages:
                 has_more = True
                 more = page + 1
             if page > 1:
                 has_previous = True
                 previous = page - 1    
             start = (page - 1) * page_size
             template_values['canonical'] = 'http://' + site.domain + '/go/' + node.name + '?p=' + str(page)
     else:
         template_values['page_title'] = site.title + u' › 节点未找到'
     template_values['pagination'] = pagination
     template_values['pages'] = pages
     template_values['page'] = page
     template_values['page_size'] = page_size
     template_values['has_more'] = has_more
     template_values['more'] = more
     template_values['has_previous'] = has_previous
     template_values['previous'] = previous
     section = False
     if node:
         section = GetKindByNum('Section', node.section_num)
     template_values['section'] = section
     topics = False
     if node:
         q3 = db.GqlQuery("SELECT * FROM Topic WHERE node_num = :1 ORDER BY last_touched DESC LIMIT " + str(start) + ", " + str(page_size), node.num)
         topics = q3
     template_values['topics'] = topics
     if browser['ios']:
         if (node):
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'node.html')
         else:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'node_not_found.html')
     else:
         if (node):
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'node.html')
         else:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'node_not_found.html')
     output = template.render(path, template_values)
     self.response.out.write(output)
Beispiel #15
0
 def post(self):
     site = GetSite()
     self.session = Session()
     browser = detect(self.request)
     template_values = {}
     template_values['site'] = site
     template_values['system_version'] = SYSTEM_VERSION
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     if (member):
         dest = '/settings/avatar'
         timestamp = str(int(time.time()))
         try:
             avatar = self.request.get('avatar')
         except:
             return self.redirect(dest)
         if avatar is None:
             return self.redirect(dest)
         avatar_len = len(avatar)
         if avatar_len == 0:
             return self.redirect(dest)
         avatar_73 = images.resize(avatar, 73, 73)
         avatar_48 = images.resize(avatar, 48, 48)
         avatar_24 = images.resize(avatar, 24, 24)
         # Large 73x73
         q1 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1",
                          'avatar_' + str(member.num) + '_large')
         if (q1.count() == 1):
             avatar_large = q1[0]
             avatar_large.content = db.Blob(avatar_73)
             avatar_large.put()
         else:
             qc1 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1",
                               'avatar.max')
             if (qc1.count() == 1):
                 counter1 = qc1[0]
                 counter1.value = counter1.value + 1
             else:
                 counter1 = Counter()
                 counter1.name = 'avatar.max'
                 counter1.value = 1
             counter1.put()
             avatar_large = Avatar()
             avatar_large.name = 'avatar_' + str(member.num) + '_large'
             avatar_large.content = db.Blob(avatar_73)
             avatar_large.num = counter1.value
             avatar_large.put()
         member.avatar_large_url = '/avatar/' + str(
             member.num) + '/large?r=' + timestamp
         member.put()
         # Normal 48x48
         q2 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1",
                          'avatar_' + str(member.num) + '_normal')
         if (q2.count() == 1):
             avatar_normal = q2[0]
             avatar_normal.content = db.Blob(avatar_48)
             avatar_normal.put()
         else:
             qc2 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1",
                               'avatar.max')
             if (qc2.count() == 1):
                 counter2 = qc2[0]
                 counter2.value = counter2.value + 1
             else:
                 counter2 = Counter()
                 counter2.name = 'avatar.max'
                 counter2.value = 1
             counter2.put()
             avatar_normal = Avatar()
             avatar_normal.name = 'avatar_' + str(member.num) + '_normal'
             avatar_normal.content = db.Blob(avatar_48)
             avatar_normal.num = counter2.value
             avatar_normal.put()
         member.avatar_normal_url = '/avatar/' + str(
             member.num) + '/normal?r=' + timestamp
         member.put()
         # Mini 24x24
         q3 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1",
                          'avatar_' + str(member.num) + '_mini')
         if (q3.count() == 1):
             avatar_mini = q3[0]
             avatar_mini.content = db.Blob(avatar_24)
             avatar_mini.put()
         else:
             qc3 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1",
                               'avatar.max')
             if (qc3.count() == 1):
                 counter3 = qc3[0]
                 counter3.value = counter3.value + 1
             else:
                 counter3 = Counter()
                 counter3.name = 'avatar.max'
                 counter3.value = 1
             counter3.put()
             avatar_mini = Avatar()
             avatar_mini.name = 'avatar_' + str(member.num) + '_mini'
             avatar_mini.content = db.Blob(avatar_24)
             avatar_mini.num = counter3.value
             avatar_mini.put()
         member.avatar_mini_url = '/avatar/' + str(
             member.num) + '/mini?r=' + timestamp
         member.put()
         # Upload to MobileMe
         if config.mobileme_enabled:
             headers = {
                 'Authorization':
                 'Basic ' + base64.b64encode(config.mobileme_username +
                                             ':' + config.mobileme_password)
             }
             host = 'idisk.me.com'
             # Sharding
             timestamp = str(int(time.time()))
             shard = member.num % 31
             root = '/' + config.mobileme_username + '/Web/Sites/v2ex/avatars/' + str(
                 shard)
             root_mini = root + '/mini'
             root_normal = root + '/normal'
             root_large = root + '/large'
             h = httplib.HTTPConnection(host)
             # Mini
             h.request('PUT', root_mini + '/' + str(member.num) + '.png',
                       str(avatar_24), headers)
             response = h.getresponse()
             if response.status == 201 or response.status == 204:
                 member.avatar_mini_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(
                     shard) + '/mini/' + str(
                         member.num) + '.png?r=' + timestamp
             # Normal
             h.request('PUT', root_normal + '/' + str(member.num) + '.png',
                       str(avatar_48), headers)
             response = h.getresponse()
             if response.status == 201 or response.status == 204:
                 member.avatar_normal_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(
                     shard) + '/normal/' + str(
                         member.num) + '.png?r=' + timestamp
             # Large
             h.request('PUT', root_large + '/' + str(member.num) + '.png',
                       str(avatar_73), headers)
             response = h.getresponse()
             if response.status == 201 or response.status == 204:
                 member.avatar_large_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(
                     shard) + '/large/' + str(
                         member.num) + '.png?r=' + timestamp
             member.put()
         # Upload to UpYun
         if config.upyun_enabled:
             u = UpYun(config.upyun_bucket, config.upyun_username,
                       config.upyun_password)
             # Mini
             mini = avatar_24
             u.setContentMD5(md5(mini))
             mini_suffix = '/avatars/mini/' + str(member.num) + '.png'
             r = u.writeFile(mini_suffix, mini, True)
             if r == True:
                 member.avatar_mini_url = 'http://' + config.upyun_bucket + '.b0.upaiyun.com' + mini_suffix + '?r=' + timestamp
             # Normal
             normal = avatar_48
             u.setContentMD5(md5(normal))
             normal_suffix = '/avatars/normal/' + str(member.num) + '.png'
             r = u.writeFile(normal_suffix, normal, True)
             if r == True:
                 member.avatar_normal_url = 'http://' + config.upyun_bucket + '.b0.upaiyun.com' + normal_suffix + '?r=' + timestamp
             # Large
             large = avatar_73
             u.setContentMD5(md5(large))
             large_suffix = '/avatars/large/' + str(member.num) + '.png'
             r = u.writeFile(large_suffix, large, True)
             if r == True:
                 member.avatar_large_url = 'http://' + config.upyun_bucket + '.b0.upaiyun.com' + large_suffix + '?r=' + timestamp
             member.put()
         memcache.set('Member_' + str(member.num), member, 86400 * 14)
         memcache.set('Member::' + member.username_lower, member,
                      86400 * 14)
         memcache.delete('Avatar::avatar_' + str(member.num) + '_large')
         memcache.delete('Avatar::avatar_' + str(member.num) + '_normal')
         memcache.delete('Avatar::avatar_' + str(member.num) + '_mini')
         self.session['message'] = '新头像设置成功'
         self.redirect('/settings/avatar')
     else:
         self.redirect('/signin')
Beispiel #16
0
    def get(self, member_username):
        site = GetSite()
        browser = detect(self.request)
        self.session = Session()
        template_values = {}
        template_values['site'] = site
        template_values['system_version'] = SYSTEM_VERSION
        member = CheckAuth(self)
        template_values['member'] = member
        template_values['show_extra_options'] = False
        if member:
            if member.num == 1:
                template_values['show_extra_options'] = True
        l10n = GetMessages(self, member, site)
        template_values['l10n'] = l10n
        one = False
        one = GetMemberByUsername(member_username)
        if one is not False:
            if one.followers_count is None:
                one.followers_count = 0
            template_values['one'] = one
            template_values['page_title'] = site.title + u' › ' + one.username
            template_values[
                'canonical'] = 'http://' + site.domain + '/member/' + one.username
            if one.github:
                github = memcache.get('Member::' + one.username_lower +
                                      '::github')
                if github is None:
                    response = urlfetch.fetch("https://api.github.com/users/" +
                                              one.github + "/repos")
                    if response.status_code == 200:
                        github = response.content
                        memcache.set(
                            'Member::' + one.username_lower + '::github',
                            github, 86400)
                if github is not None:
                    template_values['github_repos'] = json.loads(github)
        if one is not False:
            member_blog = memcache.get('member::' + str(one.num) + '::blog')
            if member_blog == None:
                blog = db.GqlQuery(
                    "SELECT * FROM Topic WHERE node_name = :1 AND member_num = :2 ORDER BY created DESC LIMIT 1",
                    'blog', one.num)
                if blog.count() > 0:
                    template_values['blog'] = blog[0]
                    memcache.set('member::' + str(one.num) + '::blog', blog[0],
                                 7200)
            else:
                template_values['blog'] = member_blog
            member_topics = memcache.get('member::' + str(one.num) +
                                         '::topics')
            if member_topics != None:
                template_values['topics'] = member_topics
            else:
                q2 = db.GqlQuery(
                    "SELECT * FROM Topic WHERE member_num = :1 ORDER BY created DESC LIMIT 10",
                    one.num)
                template_values['topics'] = q2
                memcache.set('member::' + str(one.num) + '::topics', q2, 7200)
            replies = memcache.get('member::' + str(one.num) +
                                   '::participated')

            if replies is None:
                q3 = db.GqlQuery(
                    "SELECT * FROM Reply WHERE member_num = :1 ORDER BY created DESC LIMIT 10",
                    one.num)
                ids = []
                replies = []
                i = 0
                for reply in q3:
                    if reply.topic.num not in ids:
                        i = i + 1
                        if i > 10:
                            break
                        replies.append(reply)
                        ids.append(reply.topic.num)
                if len(replies) > 0:
                    memcache.set('member::' + str(one.num) + '::participated',
                                 replies, 7200)
            if len(replies) > 0:
                template_values['replies'] = replies
        template_values['show_block'] = False
        template_values['show_follow'] = False
        template_values['favorited'] = False
        if one and member:
            if one.num != member.num:
                template_values['show_follow'] = True
                template_values['show_block'] = True
                try:
                    blocked = pickle.loads(member.blocked.encode('utf-8'))
                except:
                    blocked = []
                if one.num in blocked:
                    template_values['one_is_blocked'] = True
                else:
                    template_values['one_is_blocked'] = False
                if member.hasFavorited(one):
                    template_values['favorited'] = True
                else:
                    template_values['favorited'] = False
        if 'message' in self.session:
            template_values['message'] = self.session['message']
            del self.session['message']
        if one is not False:
            if browser['ios']:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile',
                                    'member_home.html')
            else:
                path = os.path.join(os.path.dirname(__file__), 'tpl',
                                    'desktop', 'member_home.html')
        else:
            if browser['ios']:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile',
                                    'member_not_found.html')
            else:
                path = os.path.join(os.path.dirname(__file__), 'tpl',
                                    'desktop', 'member_not_found.html')
        output = template.render(path, template_values)
        self.response.out.write(output)
Beispiel #17
0
 def post(self):
     self.session = Session()
     site = GetSite()
     browser = detect(self.request)
     template_values = {}
     template_values['site'] = site
     template_values['system_version'] = SYSTEM_VERSION
     errors = 0
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     template_values[
         'page_title'] = site.title + u' › ' + l10n.settings.decode('utf-8')
     if (member):
         template_values['member'] = member
         template_values['member_username'] = member.username
         template_values['member_email'] = member.email
         template_values['member_website'] = member.website
         template_values['member_twitter'] = member.twitter
         # Verification: password
         password_error = 0
         password_update = False
         password_error_messages = [
             '', '新密码长度不能超过 32 个字符', '请输入当前密码', '当前密码不正确'
         ]
         password_new = self.request.get('password_new').strip()
         if (len(password_new) > 0):
             password_update = True
             if (len(password_new) > 32):
                 password_error = 1
             else:
                 password_current = self.request.get(
                     'password_current').strip()
                 if (len(password_current) == 0):
                     password = 2
                 else:
                     password_current_sha1 = hashlib.sha1(
                         password_current).hexdigest()
                     if (password_current_sha1 != member.password):
                         password_error = 3
         template_values['password_error'] = password_error
         template_values[
             'password_error_message'] = password_error_messages[
                 password_error]
         if ((password_error == 0) and (password_update == True)):
             member.password = hashlib.sha1(password_new).hexdigest()
             member.auth = hashlib.sha1(
                 str(member.num) + ':' + member.password).hexdigest()
             member.put()
             self.response.headers[
                 'Set-Cookie'] = 'auth=' + member.auth + '; expires=' + (
                     datetime.datetime.now() + datetime.timedelta(days=365)
                 ).strftime("%a, %d-%b-%Y %H:%M:%S GMT") + '; path=/'
             self.redirect('/settings')
         # Verification: email
         member_email_error = 0
         member_email_error_messages = [
             '', u'请输入你的电子邮件地址', u'电子邮件地址长度不能超过 32 个字符', u'你输入的电子邮件地址不符合规则',
             u'抱歉这个电子邮件地址已经有人注册过了'
         ]
         member_email = self.request.get('email').strip()
         if (len(member_email) == 0):
             errors = errors + 1
             member_email_error = 1
         else:
             if (len(member_email) > 32):
                 errors = errors + 1
                 member_email_error = 2
             else:
                 p = re.compile(
                     r"(?:^|\s)[-a-z0-9_.+]+@(?:[-a-z0-9]+\.)+[a-z]{2,6}(?:\s|$)",
                     re.IGNORECASE)
                 if (p.search(member_email)):
                     q = db.GqlQuery(
                         'SELECT * FROM Member WHERE email = :1 AND num != :2',
                         member_email.lower(), member.num)
                     if (q.count() > 0):
                         errors = errors + 1
                         member_email_error = 4
                 else:
                     errors = errors + 1
                     member_email_error = 3
         template_values['member_email'] = member_email
         template_values['member_email_error'] = member_email_error
         template_values[
             'member_email_error_message'] = member_email_error_messages[
                 member_email_error]
         # Verification: website
         member_website_error = 0
         member_website_error_messages = [
             '', u'个人网站地址长度不能超过 200 个字符', u'这个网站地址不符合规则'
         ]
         member_website = self.request.get('website').strip()
         if (len(member_website) == 0):
             member_website = ''
         else:
             if (len(member_website) > 200):
                 errors = errors + 1
                 member_website_error = 1
             else:
                 p = re.compile(
                     'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
                 )
                 if (p.search(member_website)):
                     errors = errors
                 else:
                     errors = errors + 1
                     member_website_error = 2
         template_values['member_website'] = member_website
         template_values['member_website_error'] = member_website_error
         template_values[
             'member_website_error_message'] = member_website_error_messages[
                 member_website_error]
         # Verification: Twitter
         member_twitter_error = 0
         member_twitter_error_messages = [
             '', u'Twitter 用户名长度不能超过 20 个字符', u'Twitter 用户名不符合规则'
         ]
         member_twitter = self.request.get('twitter').strip()
         if (len(member_twitter) == 0):
             member_twitter = ''
         else:
             if (len(member_twitter) > 20):
                 errors = errors + 1
                 member_twitter_error = 1
             else:
                 p = re.compile('[a-zA-Z0-9\_]+')
                 if (p.search(member_twitter)):
                     errors = errors
                 else:
                     errors = errors + 1
                     member_twitter_error = 2
         template_values['member_twitter'] = member_twitter
         template_values['member_twitter_error'] = member_twitter_error
         template_values[
             'member_twitter_error_message'] = member_twitter_error_messages[
                 member_twitter_error]
         # Verification: psn
         member_psn_error = 0
         member_psn_error_messages = [
             '', u'PSN ID 长度不能超过 20 个字符', u'PSN ID 不符合规则'
         ]
         member_psn = self.request.get('psn').strip()
         if (len(member_psn) == 0):
             member_psn = ''
         else:
             if (len(member_psn) > 20):
                 errors = errors + 1
                 member_psn_error = 1
             else:
                 p = re.compile('^[a-zA-Z0-9\-\_]+$')
                 if (p.search(member_psn)):
                     errors = errors
                 else:
                     errors = errors + 1
                     member_psn_error = 2
         template_values['member_psn'] = member_psn
         template_values['member_psn_error'] = member_psn_error
         template_values[
             'member_psn_error_message'] = member_psn_error_messages[
                 member_psn_error]
         # Verification: my_home
         member_my_home_error = 0
         member_my_home_error_messages = [
             '', u'不是一个合法的自定义首页跳转位置', u'自定义首页跳转位置长度不能超过 32 个字符',
             u'自定义首页跳转位置必须以 / 开头'
         ]
         member_my_home = self.request.get('my_home').strip()
         if len(member_my_home) > 0:
             if member_my_home == '/' or member_my_home.startswith(
                     '/signout'):
                 member_my_home_error = 1
                 errors = errors + 1
             else:
                 if len(member_my_home) > 32:
                     member_my_home_error = 2
                     errors = errors + 1
                 else:
                     if member_my_home.startswith('/') is not True:
                         member_my_home_error = 3
                         errors = errors + 1
         template_values['member_my_home'] = member_my_home
         template_values['member_my_home_error'] = member_my_home_error
         template_values[
             'member_my_home_error_message'] = member_my_home_error_messages[
                 member_my_home_error]
         # Verification: btc
         member_btc_error = 0
         member_btc_error_messages = [
             '', u'BTC 收款地址长度不能超过 40 个字符', u'BTC 收款地址不符合规则'
         ]
         member_btc = self.request.get('btc').strip()
         if (len(member_btc) == 0):
             member_btc = ''
         else:
             if (len(member_btc) > 40):
                 errors = errors + 1
                 member_btc_error = 1
             else:
                 p = re.compile('^[a-zA-Z0-9]+$')
                 if (p.search(member_btc)):
                     errors = errors
                 else:
                     errors = errors + 1
                     member_btc_error = 2
         template_values['member_btc'] = member_btc
         template_values['member_btc_error'] = member_btc_error
         template_values[
             'member_btc_error_message'] = member_btc_error_messages[
                 member_btc_error]
         # Verification: github
         member_github_error = 0
         member_github_error_messages = [
             '', u'GitHub 用户名长度不能超过 40 个字符', u'GitHub 用户名不符合规则'
         ]
         member_github = self.request.get('github').strip()
         if (len(member_github) == 0):
             member_github = ''
         else:
             if (len(member_github) > 40):
                 errors = errors + 1
                 member_github_error = 1
             else:
                 p = re.compile('^[a-zA-Z0-9\_]+$')
                 if (p.search(member_github)):
                     errors = errors
                 else:
                     errors = errors + 1
                     member_github_error = 2
         template_values['member_github'] = member_github
         template_values['member_github_error'] = member_github_error
         template_values[
             'member_github_error_message'] = member_github_error_messages[
                 member_github_error]
         # Verification: location
         member_location_error = 0
         member_location_error_messages = ['', u'所在地长度不能超过 40 个字符']
         member_location = self.request.get('location').strip()
         if (len(member_location) == 0):
             member_location = ''
         else:
             if (len(member_location) > 40):
                 errors = errors + 1
                 member_location_error = 1
         template_values['member_location'] = member_location
         template_values['member_location_error'] = member_location_error
         template_values[
             'member_location_error_message'] = member_location_error_messages[
                 member_location_error]
         # Verification: tagline
         member_tagline_error = 0
         member_tagline_error_messages = ['', u'个人签名长度不能超过 70 个字符']
         member_tagline = self.request.get('tagline').strip()
         if (len(member_tagline) == 0):
             member_tagline = ''
         else:
             if (len(member_tagline) > 70):
                 errors = errors + 1
                 member_tagline_error = 1
         template_values['member_tagline'] = member_tagline
         template_values['member_tagline_error'] = member_tagline_error
         template_values[
             'member_tagline_error_message'] = member_tagline_error_messages[
                 member_tagline_error]
         # Verification: bio
         member_bio_error = 0
         member_bio_error_messages = ['', u'个人简介长度不能超过 2000 个字符']
         member_bio = self.request.get('bio').strip()
         if (len(member_bio) == 0):
             member_bio = ''
         else:
             if (len(member_bio) > 2000):
                 errors = errors + 1
                 member_bio_error = 1
         template_values['member_bio'] = member_bio
         template_values['member_bio_error'] = member_bio_error
         template_values[
             'member_bio_error_message'] = member_bio_error_messages[
                 member_bio_error]
         # Verification: show_home_top and show_quick_post
         try:
             member_show_home_top = int(self.request.get('show_home_top'))
         except:
             member_show_home_top = 1
         try:
             member_show_quick_post = int(
                 self.request.get('show_quick_post'))
         except:
             member_show_quick_post = 0
         if member_show_home_top not in [0, 1]:
             member_show_home_top = 1
         if member_show_quick_post not in [0, 1]:
             member_show_quick_post = 0
         # Verification: l10n
         member_l10n = self.request.get('l10n').strip()
         supported = GetSupportedLanguages()
         if member_l10n == '':
             member_l10n = site.l10n
         else:
             if member_l10n not in supported:
                 member_l10n = site.l10n
         s = GetLanguageSelect(member_l10n)
         template_values['s'] = s
         template_values['member_l10n'] = member_l10n
         # Verification: twitter_sync
         if member.twitter_oauth == 1:
             member_twitter_sync = self.request.get('twitter_sync')
             if member_twitter_sync == 'on':
                 member_twitter_sync = 1
             else:
                 member_twitter_sync = 0
             template_values['member_twitter_sync'] = member_twitter_sync
         # Verification: use_my_css
         member_use_my_css = self.request.get('use_my_css')
         if member_use_my_css == 'on':
             member_use_my_css = 1
         else:
             member_use_my_css = 0
         template_values['member_use_my_css'] = member_use_my_css
         # Verification: my_css
         member_my_css_error = 0
         member_my_css_error_messages = [
             '', u'CSS Hack cannot be longer than 2000 characters'
         ]
         member_my_css = self.request.get('my_css').strip()
         if (len(member_my_css) == 0):
             member_my_css = ''
         else:
             if (len(member_my_css) > 2000):
                 errors = errors + 1
                 member_my_css_error = 1
         template_values['member_my_css'] = member_my_css
         template_values['member_my_css_error'] = member_my_css_error
         template_values[
             'member_my_css_error_message'] = member_my_css_error_messages[
                 member_my_css_error]
         template_values['errors'] = errors
         if (errors == 0):
             member.email = member_email.lower()
             member.website = member_website
             member.twitter = member_twitter
             member.psn = member_psn
             member.btc = member_btc
             member.github = member_github
             member.location = member_location
             member.tagline = member_tagline
             if member.twitter_oauth == 1:
                 member.twitter_sync = member_twitter_sync
             member.use_my_css = member_use_my_css
             member.my_css = member_my_css
             if member_my_home_error == 0 and len(member_my_home) > 0:
                 member.my_home = member_my_home
             else:
                 if member_my_home_error == 0:
                     member.my_home = None
             member.bio = member_bio
             member.show_home_top = member_show_home_top
             member.show_quick_post = member_show_quick_post
             member.l10n = member_l10n
             member.put()
             memcache.delete('Member::' + str(member.username))
             memcache.delete('Member::' + str(member.username_lower))
             memcache.set('Member_' + str(member.num), member, 86400)
             self.session['message'] = '个人设置成功更新'
             self.redirect('/settings')
         else:
             if browser['ios']:
                 path = os.path.join(os.path.dirname(__file__), 'tpl',
                                     'mobile', 'member_settings.html')
             else:
                 path = os.path.join(os.path.dirname(__file__), 'tpl',
                                     'desktop', 'member_settings.html')
             output = template.render(path, template_values)
             self.response.out.write(output)
     else:
         self.redirect('/signin')
Beispiel #18
0
 def get(self):
     site = GetSite()
     browser = detect(self.request)
     self.session = Session()
     template_values = {}
     template_values['site'] = site
     template_values['system_version'] = SYSTEM_VERSION
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     template_values[
         'page_title'] = site.title + u' › ' + l10n.settings.decode('utf-8')
     if (member):
         template_values['member'] = member
         template_values['member_username'] = member.username
         template_values['member_email'] = member.email
         if (member.website == None):
             member.website = ''
         template_values['member_website'] = member.website
         if (member.twitter == None):
             member.twitter = ''
         template_values['member_twitter'] = member.twitter
         if (member.location == None):
             member.location = ''
         if member.psn is None:
             member.psn = ''
         template_values['member_psn'] = member.psn
         if (member.my_home == None):
             member.my_home = ''
         template_values['member_my_home'] = member.my_home
         template_values['member_btc'] = member.btc
         if member.github:
             template_values['member_github'] = member.github
         else:
             template_values['member_github'] = u''
         template_values['member_location'] = member.location
         if (member.tagline == None):
             member.tagline = ''
         template_values['member_tagline'] = member.tagline
         if (member.bio == None):
             member.bio = ''
         template_values['member_bio'] = member.bio
         template_values['member_show_home_top'] = member.show_home_top
         template_values['member_show_quick_post'] = member.show_quick_post
         if member.l10n is None:
             member.l10n = 'en'
         template_values['member_l10n'] = member.l10n
         s = GetLanguageSelect(member.l10n)
         template_values['s'] = s
         if member.twitter_sync == 1:
             template_values['member_twitter_sync'] = 1
         if member.use_my_css == 1:
             template_values['member_use_my_css'] = 1
         if (member.my_css == None):
             member.my_css = ''
         template_values['member_my_css'] = member.my_css
         if 'message' in self.session:
             message = self.session['message']
             del self.session['message']
         else:
             message = None
         template_values['message'] = message
         try:
             blocked = pickle.loads(member.blocked.encode('utf-8'))
         except:
             blocked = []
         template_values['member_stats_blocks'] = len(blocked)
         if browser['ios']:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile',
                                 'member_settings.html')
         else:
             path = os.path.join(os.path.dirname(__file__), 'tpl',
                                 'desktop', 'member_settings.html')
         output = template.render(path, template_values)
         self.response.out.write(output)
     else:
         self.redirect('/signin')
Beispiel #19
0
 def post(self, request):
     site = GetSite()
     browser = detect(self.request)
     self.session = Session()
     template_values = {}
     template_values['site'] = site
     template_values['page_title'] = site.title + u' › 密码设置'
     template_values['system_version'] = SYSTEM_VERSION
     errors = 0
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     if (member):
         template_values['member'] = member
         template_values['member_username'] = member.username
         template_values['member_email'] = member.email
         # Verification: password
         password_error = 0
         password_update = False
         password_error_messages = [
             '', '新密码长度不能超过 32 个字符', '请输入当前密码', '当前密码不正确'
         ]
         password_new = self.request.POST.get('password_new').strip()
         if (len(password_new) > 0):
             password_update = True
             if (len(password_new) > 32):
                 password_error = 1
             else:
                 password_current = self.request.POST.get(
                     'password_current').strip()
                 if (len(password_current) == 0):
                     password_error = 2
                 else:
                     password_current_sha1 = hashlib.sha1(
                         password_current).hexdigest()
                     if (password_current_sha1 != member.password):
                         password_error = 3
         template_values['password_error'] = password_error
         template_values[
             'password_error_message'] = password_error_messages[
                 password_error]
         if ((password_error == 0) and (password_update == True)):
             old_auth = member.auth
             cache.delete(old_auth)
             member.password = hashlib.sha1(password_new).hexdigest()
             member.auth = hashlib.sha1(
                 str(member.num) + ':' + member.password).hexdigest()
             member.save()
             cache.set(member.auth, member.num, 86400 * 14)
             cache.set('Member_' + str(member.num), member, 86400 * 14)
             self.session['message'] = '密码已成功更新,下次请用新密码登录'
             self.response.headers[
                 'Set-Cookie'] = 'auth=' + member.auth + '; expires=' + (
                     datetime.datetime.now() + datetime.timedelta(days=365)
                 ).strftime("%a, %d-%b-%Y %H:%M:%S GMT") + '; path=/'
             #self.redirect('/settings')
             return redirect('/settings')
         else:
             if browser['ios']:
                 path = 'mobile/member_settings_password.html'
             else:
                 path = 'desktop/member_settings_password.html'
             #output = template.render(path, template_values)
             #self.response.out.write(output)
             return render(request, path, template_values)
     else:
         #self.redirect('/signin')
         return redirect('/signin')
Beispiel #20
0
 def get(self):
     self.session = Session()
     member = CheckAuth(self)
     host = self.request.headers['Host']
     if host == 'localhost:10000' or host == '127.0.0.1:10000':
         # Local debugging logic
         if member:
             request_token = self.session['request_token']
             twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET,
                                request_token)
             access_token = twitter.getAccessToken()
             twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
             user = twitter.GetUserInfo()
             memcache.delete('Member_' + str(member.num))
             member = db.GqlQuery("SELECT * FROM Member WHERE num = :1",
                                  member.num)[0]
             member.twitter_oauth = 1
             member.twitter_oauth_key = access_token.key
             member.twitter_oauth_secret = access_token.secret
             member.twitter_oauth_string = access_token.to_string()
             member.twitter_sync = 0
             member.twitter_id = user.id
             member.twitter_name = user.name
             member.twitter_screen_name = user.screen_name
             member.twitter_location = user.location
             member.twitter_description = user.description
             member.twitter_profile_image_url = user.profile_image_url
             member.twitter_url = user.url
             member.twitter_statuses_count = user.statuses_count
             member.twitter_followers_count = user.followers_count
             member.twitter_friends_count = user.friends_count
             member.twitter_favourites_count = user.favourites_count
             member.put()
             memcache.set('Member_' + str(member.num), member, 86400)
             self.redirect('/settings')
         else:
             self.redirect('/signin')
     else:
         # Remote production logic
         if member and 'request_token' in self.session:
             request_token = self.session['request_token']
             twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET,
                                request_token)
             access_token = twitter.getAccessToken()
             twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
             user = twitter.GetUserInfo()
             memcache.delete('Member_' + str(member.num))
             member = db.GqlQuery("SELECT * FROM Member WHERE num = :1",
                                  member.num)[0]
             member.twitter_oauth = 1
             member.twitter_oauth_key = access_token.key
             member.twitter_oauth_secret = access_token.secret
             member.twitter_oauth_string = access_token.to_string()
             member.twitter_sync = 0
             member.twitter_id = user.id
             member.twitter_name = user.name
             member.twitter_screen_name = user.screen_name
             member.twitter_location = user.location
             member.twitter_description = user.description
             member.twitter_profile_image_url = user.profile_image_url
             member.twitter_url = user.url
             member.twitter_statuses_count = user.statuses_count
             member.twitter_followers_count = user.followers_count
             member.twitter_friends_count = user.friends_count
             member.twitter_favourites_count = user.favourites_count
             member.put()
             memcache.set('Member_' + str(member.num), member, 86400)
             self.redirect('/settings')
         else:
             oauth_token = self.request.get('oauth_token')
             if host == 'v2ex.appspot.com':
                 self.redirect(
                     'http://www.v2ex.com/twitter/oauth?oauth_token=' +
                     oauth_token)
             else:
                 self.redirect(
                     'http://v2ex.appspot.com/twitter/oauth?oauth_token=' +
                     oauth_token)
Beispiel #21
0
    def get(self, member_username):
        site = GetSite()
        browser = detect(self.request)
        self.session = Session()
        template_values = {}
        template_values['site'] = site
        template_values['system_version'] = SYSTEM_VERSION
        member = CheckAuth(self)
        if not member:
            self.redirect('/signin')
        template_values['member'] = member
        template_values['show_extra_options'] = False
        if member:
            if member.num == 1:
                template_values['show_extra_options'] = True
        l10n = GetMessages(self, member, site)
        template_values['l10n'] = l10n
        one = False
        one = GetMemberByUsername(member_username)
        if one is not False:
            if one.followers_count is None:
                one.followers_count = 0
            template_values['one'] = one
            template_values['page_title'] = site.title + u' › ' + one.username
            template_values['canonical'] = 'http://' + site.domain + '/member/' + one.username
        if one is not False:
            # 日记和hours
            q = db.GqlQuery("SELECT * FROM Note WHERE member = :1 ORDER BY last_modified DESC", one)
            try:
                notes_count = q.count()
            except:
                q = db.GqlQuery("SELECT * FROM Note WHERE member = :1 ORDER BY created DESC", one)
                notes_count = q.count()
            if (notes_count > 0):
                template_values['notes'] = q

            q = db.GqlQuery("SELECT * FROM Hours WHERE member = :1", one)
            if q.count() == 1:
                template_values['hours'] = q[0]

            q2 = db.GqlQuery("SELECT * FROM Topic WHERE member_num = :1 ORDER BY created DESC LIMIT 10", one.num)
            template_values['topics'] = q2
            replies = memcache.get('member::' + str(one.num) + '::participated')
            if replies is None:
                q3 = db.GqlQuery("SELECT * FROM Reply WHERE member_num = :1 ORDER BY created DESC LIMIT 100", one.num)
                ids = []
                replies = []
                i = 0
                for reply in q3:
                    if reply.topic.num not in ids:
                        i = i + 1
                        if i > 10:
                            break
                        replies.append(reply)
                        ids.append(reply.topic.num)
                if len(replies) > 0:
                    memcache.set('member::' + str(one.num) + '::participated', replies, 7200)
            if len(replies) > 0:
                template_values['replies'] = replies
        template_values['show_block'] = False
        template_values['show_follow'] = False
        template_values['favorited'] = False
        if one and member:
            if one.num != member.num:
                template_values['show_follow'] = True
                template_values['show_block'] = True
                try:
                    blocked = pickle.loads(member.blocked.encode('utf-8'))
                except:
                    blocked = []
                if one.num in blocked:
                    template_values['one_is_blocked'] = True
                else:
                    template_values['one_is_blocked'] = False
                if member.hasFavorited(one):
                    template_values['favorited'] = True
                else:
                    template_values['favorited'] = False
        if 'message' in self.session:
            template_values['message'] = self.session['message']
            del self.session['message']
        if one is not False: 
            if browser['ios']:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'member_home.html')
            else:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'member_home.html')
        else:
            if browser['ios']:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'member_not_found.html')
            else:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'member_not_found.html')
        output = template.render(path, template_values)
        self.response.out.write(output)