def UnfollowMemberHandler(request, one_num): if request.method == 'GET': if 'HTTP_REFERER' in request.META: go = request.META['HTTP_REFERER'] else: go = '/' member = CheckAuth(request) if member: one = GetKindByNum('Member', int(one_num)) if one is not False: if one.num != member.num: q = MemberBookmark.objects.filter(one=one, member_num=member.num) if len(q) > 0: bookmark = q[0] bookmark.delete() member = Member.objects.get(id=member.id) member.favorited_members = member.favorited_members - 1 member.save() memcache.set('Member_' + str(member.num), member, 86400) n = 'r/m' + str(one.num) + '/m' + str(member.num) memcache.delete(n) one = Member.objects.get(id=one.id) one.followers_count = one.followers_count - 1 one.save() memcache.set('Member_' + str(one.num), one, 86400) memcache.set('Member::' + str(one.username_lower), one, 86400) return HttpResponseRedirect(go)
def MyNodesHandler(request): if request.method == 'GET': member = CheckAuth(request) if member: site = GetSite() l10n = GetMessages(member, site) template_values = {} template_values['site'] = site template_values['member'] = member template_values['l10n'] = l10n template_values['page_title'] = site.title + u' › 我收藏的节点' template_values['rnd'] = random.randrange(1, 100) if member.favorited_nodes > 0: template_values['has_nodes'] = True q = NodeBookmark.objects.filter(member=member).order_by('-created')[:10] template_values['column_1'] = q if member.favorited_nodes > 10: q2 = NodeBookmark.objects.filter(member=member).order_by('-created')[10:10] template_values['column_2'] = q2 else: template_values['has_nodes'] = False path = os.path.join('desktop', 'my_nodes.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/')
def MyTopicsHandler(request): if request.method == 'GET': member = CheckAuth(request) if member: site = GetSite() l10n = GetMessages(member, site) template_values = {} template_values['site'] = site template_values['member'] = member template_values['l10n'] = l10n template_values['page_title'] = site.title + u' › 我收藏的主题' template_values['rnd'] = random.randrange(1, 100) if member.favorited_topics > 0: template_values['has_topics'] = True q = TopicBookmark.objects.filter(member=member).order_by('-created') bookmarks = [] for bookmark in q: try: topic = bookmark.topic bookmarks.append(bookmark) except: bookmark.delete() template_values['bookmarks'] = bookmarks else: template_values['has_topics'] = False path = os.path.join('desktop', 'my_topics.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/')
def TwitterTweetHandler(request): if request.method == 'POST': if 'HTTP_REFERER' in request.META: go = request.META['HTTP_REFERER'] else: go = '/' member = CheckAuth(request) if member: if member.twitter_oauth == 1: status = request.POST['status'] if len(status) > 140: status = status[0:140] access_token = OAuthToken.from_string( member.twitter_oauth_string) twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret, access_token) try: twitter.PostUpdate(status.encode('utf-8')) memcache.delete('member::' + str(member.num) + '::twitter::home') except: logging.error('Failed to tweet: ' + status) return HttpResponseRedirect(go) else: return HttpResponseRedirect('/twitter/link/') else: return HttpResponseRedirect('/')
def NotificationsHandler(request): if request.method == 'GET': site = GetSite() browser = detect(request) template_values = {} template_values['site'] = site template_values['system_version'] = SYSTEM_VERSION member = CheckAuth(request) l10n = GetMessages(member, site) template_values['l10n'] = l10n template_values[ 'page_title'] = site.title + u' › ' + l10n.create_new_topic.decode( 'utf-8') if member: template_values['member'] = member if member.private_token is None: member.private_token = hashlib.sha256( str(member.num) + ';' + config.site_key).hexdigest() member.save() notifications = memcache.get('nn::' + member.username_lower) if notifications is None: q = Notification.objects.filter( for_member_num=member.num).order_by('-num')[:50] notifications = [] i = 0 for n in q: if i == 0: if member.notification_position != n.num: member.notification_position = n.num member.save() if n.type == 'reply': n.text = u'<a href="/member/' + n.member.user.username + u'"><strong>' + n.member.user.username + u'</strong></a> 在 <a href="' + n.link1 + '">' + escape( n.label1) + u'</a> 里回复了你' notifications.append(n) if n.type == 'mention_reply': n.text = u'<a href="/member/' + n.member.user.username + u'"><strong>' + n.member.user.username + u'</strong></a> 在回复 <a href="' + n.link1 + '">' + escape( n.label1) + u'</a> 时提到了你' notifications.append(n) if n.type == 'mention_topic': n.text = u'<a href="/member/' + n.member.user.username + u'"><strong>' + n.member.user.username + u'</strong></a> 在创建主题 <a href="' + n.link1 + '">' + escape( n.label1) + u'</a> 时提到了你' notifications.append(n) if n.type == 'follow': n.text = u'<a href="/member/' + n.member.user.username + u'"><strong>' + n.member.user.username + u'</strong></a> 关注了你' notifications.append(n) i = i + 1 member.notifications = 0 member.save() memcache.set('Member_' + str(member.num), member, 86400) memcache.set('nn::' + member.username_lower, notifications, 360) template_values['notifications'] = notifications template_values['title'] = u'提醒系统' path = os.path.join('desktop', 'notifications.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/signin')
def TwitterUserTimelineHandler(request, screen_name): if request.method == 'GET': site = GetSite() member = CheckAuth(request) if member: if member.twitter_oauth == 1: template_values = {} template_values['site'] = site template_values['rnd'] = random.randrange(1, 100) template_values['member'] = member l10n = GetMessages(member, site) template_values['l10n'] = l10n template_values[ 'page_title'] = site.title + u' › Twitter › ' + screen_name template_values['screen_name'] = screen_name access_token = OAuthToken.from_string( member.twitter_oauth_string) twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret, access_token) rate_limit = memcache.get( str(member.twitter_id) + '::rate_limit') if rate_limit is None: try: rate_limit = twitter.GetRateLimit() memcache.set( str(member.twitter_id) + '::rate_limit', rate_limit, 60) except: logging.info('Failed to get rate limit for @' + member.twitter_screen_name) template_values['rate_limit'] = rate_limit cache_tag = 'twitter::' + screen_name + '::home' statuses = memcache.get(cache_tag) if statuses is None: statuses = twitter.GetUserTimeline(user=screen_name, count=50) i = 0 for status in statuses: statuses[i].source = statuses[i].source.replace( '<a', '<a def="dark"') statuses[i].datetime = datetime.datetime.fromtimestamp( time.mktime( time.strptime(status.created_at, '%a %b %d %H:%M:%S +0000 %Y'))) statuses[i].text = twitter.ConvertMentions(status.text) #statuses[i].text = twitter.ExpandBitly(status.text) i = i + 1 memcache.set(cache_tag, statuses, 120) template_values['statuses'] = statuses path = os.path.join('desktop', 'twitter_user.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/settings/') else: return HttpResponseRedirect('/')
def TwitterDMInboxHandler(request): if request.method == 'GET': member = CheckAuth(request) site = GetSite() if member: if member.twitter_oauth == 1: template_values = {} template_values['site'] = site template_values['rnd'] = random.randrange(1, 100) template_values['member'] = member l10n = GetMessages(member, site) template_values['l10n'] = l10n template_values[ 'page_title'] = site.title + u' › Twitter › Direct Messages › Inbox' access_token = OAuthToken.from_string( member.twitter_oauth_string) twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret, access_token) rate_limit = memcache.get( str(member.twitter_id) + '::rate_limit') if rate_limit is None: try: rate_limit = twitter.GetRateLimit() memcache.set( str(member.twitter_id) + '::rate_limit', rate_limit, 60) except: logging.info('Failed to get rate limit for @' + member.twitter_screen_name) template_values['rate_limit'] = rate_limit cache_tag = 'member::' + str( member.num) + '::twitter::dm::inbox' messages = memcache.get(cache_tag) if messages is None: messages = twitter.GetDirectMessages() i = 0 for message in messages: messages[i].datetime = datetime.datetime.fromtimestamp( time.mktime( time.strptime(message.created_at, '%a %b %d %H:%M:%S +0000 %Y'))) messages[i].text = twitter.ConvertMentions( message.text) #statuses[i].text = twitter.ExpandBitly(status.text) i = i + 1 memcache.set(cache_tag, messages, 120) template_values['messages'] = messages path = os.path.join('desktop', 'twitter_dm_inbox.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/settings') else: return HttpResponseRedirect('/')
def TwitterLinkHandler(request): if request.method == 'GET': session = request.session member = CheckAuth(request) if member: twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret) request_token = twitter.getRequestToken() authorization_url = twitter.getAuthorizationURL(request_token) session['request_token'] = request_token return HttpResponseRedirect(authorization_url) else: return HttpResponseRedirect('/signin')
def TwitterUnlinkHandler(request): if request.method == 'GET': member = CheckAuth(request) 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.save() memcache.set('Member_' + str(member.num), member, 86400) return HttpResponseRedirect('/settings') else: return HttpResponseRedirect('/signin')
def PlaceMessageRemoveHandler(request, message_num): if request.method == 'GET': site = GetSite() if 'HTTP_REFERER' in request.META: go = request.META['HTTP_REFERER'] else: go = '/place/' member = CheckAuth(request) if member: message = PlaceMessage.objects.filter(num=int(message_num)) if message and len(message) == 1: if message[0].member.num == member.num: message.delete() q = Counter.objects.filter(name='place_message.total') if (q.count() == 1): counter = q[0] counter.value = counter.value - 1 counter.save() return HttpResponseRedirect(go)
def get(self, key): go = '/' member = CheckAuth(request) if member: member = db.get(member.key()) one = db.get(db.Key(key)) if one: if one.num != member.num: try: blocked = pickle.loads(member.blocked.encode('utf-8')) except: blocked = [] if len(blocked) == 0: blocked = [] if one.num not in blocked: blocked.append(one.num) member.blocked = pickle.dumps(blocked) member.put() memcache.set('Member_' + str(member.num), member, 86400) self.redirect(go)
def MyFollowingHandler(request): if request.method == 'GET': member = CheckAuth(request) if member: site = GetSite() l10n = GetMessages(member, site) template_values = {} template_values['site'] = site template_values['member'] = member template_values['l10n'] = l10n template_values['page_title'] = site.title + u' › 我的特别关注' template_values['rnd'] = random.randrange(1, 100) if member.favorited_members > 0: template_values['has_following'] = True q = MemberBookmark.objects.filter(member_num=member.num).order_by('-created') template_values['following'] = q following = [] for bookmark in q: following.append(bookmark.one.num) q2 = Topic.objects.filter(member_num__in=following).order_by('-created')[:20] template_values['latest'] = q2 else: template_values['has_following'] = False path = os.path.join('desktop', 'my_following.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/') #def main(): # application = webapp.WSGIApplication([ # ('/my/nodes', MyNodesHandler), # ('/my/topics', MyTopicsHandler), # ('/my/following', MyFollowingHandler) # ], # debug=True) # util.run_wsgi_app(application) # # #if __name__ == '__main__': # main()
def UnfavoriteTopicHandler(request, topic_num): if request.method == 'GET': if 'HTTP_REFERER' in request.META: go = request.META['HTTP_REFERER'] else: go = '/' member = CheckAuth(request) if member: topic = GetKindByNum('Topic', int(topic_num)) if topic is not False: q = TopicBookmark.objects.filter(topic=topic, member=member) if len(q) > 0: bookmark = q[0] bookmark.delete() member = Member.objects.get(id=member.id) member.favorited_topics = member.favorited_topics - 1 member.save() memcache.set('Member_' + str(member.num), member, 86400) n = 'r/t' + str(topic.num) + '/m' + str(member.num) memcache.delete(n) MinusStarTopicHandler(topic.id) return HttpResponseRedirect(go)
def UnfavoriteNodeHandler(request, node_name): print node_name if request.method == 'GET': if 'HTTP_REFERER' in request.META: go = request.META['HTTP_REFERER'] else: go = '/' member = CheckAuth(request) if member: node = GetKindByName('Node', node_name) if node is not False: q = NodeBookmark.objects.filter(node=node, member=member) if len(q) > 0: bookmark = q[0] bookmark.delete() member = Member.objects.get(id=member.id) member.favorited_nodes = member.favorited_nodes - 1 member.save() memcache.set('Member_' + str(member.num), member, 86400) n = 'r/n' + str(node.num) + '/m' + str(member.num) memcache.delete(n) return HttpResponseRedirect(go)
def get(self, key): go = '/' member = CheckAuth(request) if member: member = db.get(member.key()) one = db.get(db.Key(key)) if one: if one.num != member.num: try: blocked = pickle.loads(member.blocked.encode('utf-8')) except: blocked = [] if len(blocked) == 0: blocked = [] if one.num in blocked: blocked.remove(one.num) member.blocked = pickle.dumps(blocked) member.put() memcache.set('Member_' + str(member.num), member, 86400) self.redirect(go) #def main(): # application = webapp.WSGIApplication([ # ('/member/([a-z0-9A-Z\_\-]+)', MemberHandler), # ('/member/([a-z0-9A-Z\_\-]+).json', MemberApiHandler), # ('/settings', SettingsHandler), # ('/settings/password', SettingsPasswordHandler), # ('/settings/avatar', SettingsAvatarHandler), # ('/block/(.*)', MemberBlockHandler), # ('/unblock/(.*)', MemberUnblockHandler) # ], # debug=True) # util.run_wsgi_app(application) # # #if __name__ == '__main__': # main()
def SettingsHandler(request): if request.method == 'GET': site = GetSite() browser = detect(request) session = request.session template_values = {} template_values['site'] = site template_values['system_version'] = SYSTEM_VERSION member = CheckAuth(request) l10n = GetMessages(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_realname'] = member.truename template_values['member_sex'] = member.sex template_values['member_username'] = member.user.username template_values['member_email'] = member.user.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 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 session: message = session['message'] del 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('mobile', 'member_settings.html') else: path = os.path.join('desktop', 'member_settings.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/signin') else: session = request.session site = GetSite() browser = detect(request) template_values = {} template_values['site'] = site template_values['system_version'] = SYSTEM_VERSION errors = 0 member = CheckAuth(request) l10n = GetMessages(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_realname'] = member.truename template_values['member_sex'] = member.sex template_values['member_username'] = member.user.username template_values['member_email'] = member.user.email template_values['member_website'] = member.website template_values['member_twitter'] = member.twitter # Verification: realname member_realname_error = 0 member_realname_error_messages = [ '', l10n.realname_empty, l10n.realname_too_long, ] member_realname = request.POST['realname'].strip() if (len(member_realname) == 0): errors = errors + 1 member_realname_error = 1 else: if (len(member_realname) > 20): errors = errors + 1 member_realname_error = 2 template_values['member_realname'] = member_realname template_values['member_realname_error'] = member_realname_error template_values[ 'member_realname_error_message'] = member_realname_error_messages[ member_realname_error] # Verification: sex member_sex_error = 0 member_sex_error_messages = [ '', l10n.sex_empty, ] if 'sex' in request.POST: member_sex = request.POST['sex'].strip() else: member_sex = '' if (len(member_sex) == 0): errors = errors + 1 member_sex_error = 1 template_values['member_sex'] = member_sex template_values['member_sex_error'] = member_sex_error template_values[ 'member_sex_error_message'] = member_sex_error_messages[ member_sex_error] # Verification: username member_username_error = 0 member_username_error_messages = [ '', l10n.username_empty, l10n.username_too_long, l10n.username_too_short, l10n.username_invalid, l10n.username_taken, '你已经更改过一次账户' ] member_username = request.POST['username'].strip() if (len(member_username) == 0): errors = errors + 1 member_username_error = 1 else: if (len(member_username) > 16): errors = errors + 1 member_username_error = 2 else: if (len(member_username) < 3): errors = errors + 1 member_username_error = 3 else: if (re.search('^[a-zA-Z0-9\_]+$', member_username)): q = Member.objects.filter( username_lower=member_username.lower( )).exclude(id=member.id) if len(q) > 0: errors = errors + 1 member_username_error = 5 else: if request.user.username != member_username and member.username_editable == 0: errors = errors + 1 member_username_error = 6 else: errors = errors + 1 member_username_error = 4 template_values['member_username'] = member_username template_values['member_username_error'] = member_username_error template_values[ 'member_username_error_message'] = member_username_error_messages[ member_username_error] # Verification: email member_email_error = 0 member_email_error_messages = [ '', u'请输入你的电子邮件地址', u'电子邮件地址长度不能超过 32 个字符', u'你输入的电子邮件地址不符合规则', u'抱歉这个电子邮件地址已经有人注册过了' ] if 'email' in request.POST: member_email = request.POST['email'].strip() else: member_email = '' 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 = User.objects.filter( email=member_email.lower()).exclude( id=request.user.id) if (len(q) > 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 = request.POST['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 = request.POST['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 = request.POST['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 = request.POST['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 = request.POST['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: location member_location_error = 0 member_location_error_messages = ['', u'所在地长度不能超过 40 个字符'] member_location = request.POST['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 = request.POST['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 = request.POST['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(request.POST['show_home_top']) except: member_show_home_top = 1 template_values['member_show_home_top'] = member_show_home_top try: member_show_quick_post = int(request.POST['show_quick_post']) except: member_show_quick_post = 0 template_values['member_show_quick_post'] = member_show_quick_post 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 = request.POST['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: if 'twitter_sync' in request.POST: member_twitter_sync = request.POST['twitter_sync'] else: member_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 = None if 'use_my_css' in request.POST: member_use_my_css = request.POST['use_my_css'] else: member_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 = request.POST['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): user = request.user member.truename = member_realname member.sex = member_sex # 如果用户更改了账户,则editable置为0 if user.username != member_username: user.username = member_username member.username_editable = 0 member.username_lower = member_username.lower() user.email = member_email.lower() member.website = member_website member.twitter = member_twitter member.psn = member_psn member.btc = member_btc 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 = '' member.bio = member_bio member.show_home_top = member_show_home_top member.show_quick_post = member_show_quick_post member.l10n = member_l10n user.save() member.save() memcache.delete('Member::' + str(member.user.username)) memcache.delete('Member::' + str(member.username_lower)) memcache.set('Member_' + str(member.num), member, 86400) session['message'] = '个人设置成功更新' return HttpResponseRedirect('/settings') else: if browser['ios']: path = os.path.join('mobile', 'member_settings.html') else: path = os.path.join('desktop', 'member_settings.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/signin')
def SettingsPasswordHandler(request): if request.method == 'POST': site = GetSite() browser = detect(request) session = request.session template_values = {} template_values['site'] = site template_values['page_title'] = site.title + u' › 密码设置' template_values['system_version'] = SYSTEM_VERSION errors = 0 member = CheckAuth(request) l10n = GetMessages(member, site) template_values['l10n'] = l10n if (member): template_values['member'] = member template_values['member_username'] = member.user.username template_values['member_email'] = member.user.email # Verification: password password_error = 0 password_update = False password_error_messages = [ '', '新密码长度不能超过 32 个字符', '请输入当前密码', '当前密码不正确' ] password_new = request.POST['password_new'].strip() if (len(password_new) > 0): password_update = True if (len(password_new) > 32): password_error = 1 else: password_current = request.POST['password_current'].strip() if (len(password_current) == 0): password_error = 2 else: if not member.user.check_password(password_current): 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.user.set_password(password_new) member.user.save() member.auth = hashlib.sha1( str(member.num) + ':' + member.user.password).hexdigest() member.save() memcache.set(member.auth, member.num, 86400 * 365) memcache.set('Member_' + str(member.num), member, 86400 * 365) 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 HttpResponseRedirect('/settings') else: if browser['ios']: path = os.path.join('mobile', 'member_settings_password.html') else: path = os.path.join('desktop', 'member_settings_password.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/signin')
def SettingsAvatarHandler(request): if request.method == 'GET': site = GetSite() session = request.session browser = detect(request) template_values = {} template_values['site'] = site template_values['page_title'] = site.title + u' › 头像' template_values['system_version'] = SYSTEM_VERSION member = CheckAuth(request) l10n = GetMessages(member, site) template_values['l10n'] = l10n if (member): if 'message' in session: template_values['message'] = session['message'] del session['message'] template_values['member'] = member if browser['ios']: path = os.path.join('mobile', 'member_settings_avatar.html') else: path = os.path.join('desktop', 'member_settings_avatar.html') return render_to_response(path, template_values) else: return HttpResponseRedirect('/signin') else: site = GetSite() session = request.session browser = detect(request) template_values = {} template_values['site'] = site template_values['system_version'] = SYSTEM_VERSION member = CheckAuth(request) l10n = GetMessages(member, site) template_values['l10n'] = l10n if (member): dest = '/settings-avatar/' timestamp = str(int(time.time())) try: image_req = request.FILES['avatar'] if image_req is None: return HttpResponseRedirect(dest) ext = str(image_req).split('.') # 图片文件格式,并且文件大小不能超过2MB if len(ext) == 2 and image_req.size < 1024 * 1024 * 2: ext = ext[1].lower() if ext == "jpg" or ext == "jpeg" or ext == "bmp" or ext == 'png': timestamp = str( int( time.mktime( datetime.datetime.now().timetuple()))) datetoday = str( datetime.datetime.today())[0:10].replace('-', '') new_name_src = timestamp + "." + ext new_name_large = timestamp + "_l." + ext new_name_normal = timestamp + "_n." + ext new_name_small = timestamp + "_s." + ext save_path = settings.STATIC_UPLOAD + "/" + member.user.username + "/" + datetoday if not os.path.exists(save_path): os.makedirs(save_path) # Source image image = Image.open(image_req) image.save(save_path + "/" + new_name_src, 'jpeg') # Large 73x73 image.thumbnail((73, 73), Image.ANTIALIAS) image.save(save_path + "/" + new_name_large, 'jpeg') member.avatar_large_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_large # Normal 48x48 image.thumbnail((48, 48), Image.ANTIALIAS) image.save(save_path + "/" + new_name_normal, 'jpeg') member.avatar_normal_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_normal # Small 24x24 image.thumbnail((24, 24), Image.ANTIALIAS) image.save(save_path + "/" + new_name_small, 'jpeg') member.avatar_mini_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_small # Save avatar info member.save() else: return HttpResponseRedirect(dest) else: return HttpResponseRedirect(dest) except: print "Unexpected error:", sys.exc_info() return HttpResponseRedirect(dest) memcache.set('Member_' + str(member.num), member, 86400 * 365) memcache.set('Member::' + member.username_lower, member, 86400 * 365) memcache.delete('Avatar::avatar_' + str(member.num) + '_large') memcache.delete('Avatar::avatar_' + str(member.num) + '_normal') memcache.delete('Avatar::avatar_' + str(member.num) + '_mini') session['message'] = '新头像设置成功' return HttpResponseRedirect('/settings-avatar/') else: return HttpResponseRedirect('/signin')
def PlaceHandler(request, ip): if request.method == 'GET': site = GetSite() template_values = {} template_values['site'] = site template_values['rnd'] = random.randrange(1, 100) member = CheckAuth(request) if member: template_values['member'] = member l10n = GetMessages(member, site) template_values['l10n'] = l10n template_values['ip'] = ip substance = GetPlaceByIP(ip) if substance: template_values['substance'] = substance template_values['messages'] = PlaceMessage.objects.filter( place=substance).order_by('-created')[:30] else: if member: if member.ip == ip: substance = CreatePlaceByIP(ip) template_values['substance'] = substance can_post = False can_see = True if member: if member.ip == ip: can_post = True can_see = True else: can_see = False else: if 'X-Real-IP' in request.META: ip_guest = request.META['X-Real-IP'] else: ip_guest = request.META['REMOTE_ADDR'] if ip_guest == ip: can_see = True else: can_see = False template_values['can_post'] = can_post template_values['can_see'] = can_see if member: template_values['ip_guest'] = member.ip else: template_values['ip_guest'] = ip_guest template_values['page_title'] = site.title + u' › ' + ip path = os.path.join('desktop', 'place.html') return render_to_response(path, template_values) else: site = GetSite() if 'HTTP_REFERER' in request.META: go = request.META['HTTP_REFERER'] else: go = '/place/' member = CheckAuth(request) place = GetPlaceByIP(ip) say = request.POST['say'].strip() if len(say) > 0 and len(say) < 280 and member and place: if member.ip == ip: message = PlaceMessage() q = Counter.objects.filter(name='place_message.max') if (q.count() == 1): counter = q[0] counter.value = counter.value + 1 else: counter = Counter() counter.name = 'place_message.max' counter.value = 1 q2 = Counter.objects.filter(name='place_message.total') if (q2.count() == 1): counter2 = q2[0] counter2.value = counter2.value + 1 else: counter2 = Counter() counter2.name = 'place_message.total' counter2.value = 1 message.num = counter.value message.place = place message.place_num = place.num message.member = member message.content = say message.save() counter.save() counter2.save() return HttpResponseRedirect(go)
def FollowMemberHandler(request, one_num): if request.method == 'GET': if 'HTTP_REFERER' in request.META: go = request.META['HTTP_REFERER'] else: go = '/' member = CheckAuth(request) if member: one = GetKindByNum('Member', int(one_num)) if one is not False: if one.num != member.num: q = MemberBookmark.objects.filter(one=one, member_num=member.num) if len(q) == 0: member = Member.objects.get(id=member.id) member.favorited_members = member.favorited_members + 1 if member.favorited_members > 30: session = request.session session['message'] = '最多只能添加 30 位特别关注' else: bookmark = MemberBookmark() bookmark.one = one bookmark.member_num = member.num bookmark.save() member.save() 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.objects.get(id=one.id) one.followers_count = one.followers_count + 1 memcache.set('Member_' + str(one.num), one, 86400) memcache.set('Member::' + str(one.username_lower), one, 86400) session = request.session session['message'] = '特别关注添加成功,还可以添加 ' + str( 30 - member.favorited_members) + ' 位' # Send notification to following q = Counter.objects.filter(name='notification.max') if (len(q) == 1): counter = q[0] counter.value = counter.value + 1 else: counter = Counter() counter.name = 'notification.max' counter.value = 1 q2 = Counter.objects.filter( name='notification.total') if (len(q2) == 1): counter2 = q2[0] counter2.value = counter2.value + 1 else: counter2 = Counter() counter2.name = 'notification.total' counter2.value = 1 notification = Notification() notification.num = counter.value notification.type = 'follow' notification.payload = '' notification.label1 = '' notification.link1 = '' notification.member = member notification.for_member_num = one.num one.notifications = one.notifications + 1 one.save() counter.save() counter2.save() notification.save() return HttpResponseRedirect(go)
def TwitterCallbackHandler(request): if request.method == 'GET': session = request.session member = CheckAuth(request) host = request.META['HTTP_HOST'] if host == 'localhost:8000' or host == '127.0.0.1:8000': # Local debugging logic if member: request_token = session['request_token'] twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret, request_token) access_token = twitter.getAccessToken() twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret, access_token) user = twitter.GetUserInfo() memcache.delete('Member_' + str(member.num)) member = Member.objects.filter(num=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.save() memcache.set('Member_' + str(member.num), member, 86400) return HttpResponseRedirect('/settings') else: return HttpResponseRedirect('/signin') else: # Remote production logic if member and 'request_token' in session: request_token = session['request_token'] twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret, request_token) access_token = twitter.getAccessToken() twitter = OAuthApi(config.twitter_consumer_key, config.twitter_consumer_secret, access_token) user = twitter.GetUserInfo() memcache.delete('Member_' + str(member.num)) member = Member.objects.filter(num=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 if not user.location or len(user.location) == 0: member.twitter_location = '' else: member.twitter_location = user.location if not user.description or len(user.description) == 0: member.twitter_description = '' else: member.twitter_description = user.description member.twitter_profile_image_url = user.profile_image_url if not user.url or len(user.url) == 0: member.twitter_url = '' else: 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.save() memcache.set('Member_' + str(member.num), member, 86400) return HttpResponseRedirect('/settings') else: oauth_token = request.GET['oauth_token'] if host == 'www.woosuko.com': return HttpResponseRedirect( 'http://www.woosuko.com/twitter-oauth?oauth_token=' + oauth_token) else: return HttpResponseRedirect( 'http://localhost:8000/twitter-oauth?oauth_token=' + oauth_token)
def MemberHandler(request, member_username): if request.method == 'GET': site = GetSite() browser = detect(request) session = request.session template_values = {} template_values['site'] = site template_values['system_version'] = SYSTEM_VERSION member = CheckAuth(request) template_values['member'] = member template_values['show_extra_options'] = False if member: if member.num == 1: template_values['show_extra_options'] = True l10n = GetMessages(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.user.username template_values[ 'canonical'] = 'http://' + site.domain + '/member/' + one.user.username if one is not False: blog = Topic.objects.filter( node_name='blog', member_num=one.num).order_by('-created') if len(blog) > 0: template_values['blog'] = blog[0] q2 = Topic.objects.filter( member_num=one.num).order_by('-created')[:10] template_values['topics'] = q2 replies = memcache.get('member::' + str(one.num) + '::participated') if replies is None: q3 = Reply.objects.filter( member_num=one.num).order_by('-created')[0:100] 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 session: template_values['message'] = session['message'] del session['message'] if one is not False: if browser['ios']: path = os.path.join('mobile', 'member_home.html') else: path = os.path.join('desktop', 'member_home.html') else: if browser['ios']: path = os.path.join('mobile', 'member_not_found.html') else: path = os.path.join('desktop', 'member_not_found.html') return render_to_response(path, template_values)