コード例 #1
0
 def member(self):
     if not hasattr(self, "_member"):
         ip = False
         member = False
         if 'X-Real-IP' in self.request.headers:
             ip = self.request.headers['X-Real-IP']
         else:
             ip = self.request.remote_ip
         #cookies = Cookies(self, max_age = 86400 * 14, path = '/')
         auth = self.get_cookie('auth')
         #if 'auth' in cookies:
         if auth is not None:
             #auth = cookies['auth']
             member_num = memcache.get(auth)
             if member_num > 0:
                 member = memcache.get('Member_' + str(member_num))
                 if member is None:
                     #q = db.GqlQuery("SELECT * FROM Member WHERE num = :1", member_num)
                     q = Member.selectBy(num=member_num)
                     if q.count() == 1:
                         member = q[0]
                         memcache.set('Member_' + str(member_num), member, 86400 * 14)
                 if member:
                     member.ip = ip
             else:
                 #q = db.GqlQuery("SELECT * FROM Member WHERE auth = :1", auth)
                 q = Member.selectBy(auth=auth)
                 if (q.count() == 1):
                     member_num = q[0].num
                     member = q[0]
                     memcache.set(auth, member_num, 86400 * 14)
                     memcache.set('Member_' + str(member_num), member, 86400 * 14)
                     member.ip = ip
         self._member = member
     return self._member
コード例 #2
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:
                         bookmark = q[0]
                         bookmark.delete()
                         member = Member.get(member.id)
                         member.favorited_members = member.favorited_members - 1
                         member.sync()
                         memcache.set('Member_' + str(member.num), member,
                                      86400)
                         n = 'r/m' + str(one.num) + '/m' + str(member.num)
                         memcache.delete(n)
                         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.redirect(go)
コード例 #3
0
def CheckAuth(handler):
    ip = GetIP(handler)
    cookies = handler.request.cookies
    if 'auth' in cookies:
        auth = cookies['auth'].value
        member_num = memcache.get(auth)
        if (member_num > 0):
            member = memcache.get('Member_' + str(member_num))
            if member is None:
                #q = db.GqlQuery("SELECT * FROM Member WHERE num = :1", member_num)
                q = Member.selectBy(num=member_num)
                if q.count() == 1:
                    member = q[0]
                    memcache.set(auth, member.num)
                    memcache.set('Member_' + str(member_num), member)
                else:
                    member = False
            if member:
                member.ip = ip
            return member
        else:
            #q = db.GqlQuery("SELECT * FROM Member WHERE auth = :1", auth)
            q = Member.selectBy(auth=auth)
            if (q.count() == 1):
                member_num = q[0].num
                member = q[0]
                memcache.set(auth, member_num)
                memcache.set('Member_' + str(member_num), member)
                member.ip = ip
                return member
            else:
                return False
    else:
        return False
コード例 #4
0
ファイル: __init__.py プロジェクト: coderyy/v2ex-tornado-2
def CheckAuth(handler):
    ip = GetIP(handler)
    cookies = handler.request.cookies
    if 'auth' in cookies:
        auth = cookies['auth'].value
        member_num = memcache.get(auth)
        if (member_num > 0):
            member = memcache.get('Member_' + str(member_num))
            if member is None:
                #q = db.GqlQuery("SELECT * FROM Member WHERE num = :1", member_num)
                q = Member.selectBy(num=member_num)
                if q.count() == 1:
                    member = q[0]
                    memcache.set(auth, member.num)
                    memcache.set('Member_' + str(member_num), member)
                else:
                    member = False
            if member:
                member.ip = ip
            return member
        else:
            #q = db.GqlQuery("SELECT * FROM Member WHERE auth = :1", auth)
            q = Member.selectBy(auth=auth)
            if (q.count() == 1):
                member_num = q[0].num
                member = q[0]
                memcache.set(auth, member_num)
                memcache.set('Member_' + str(member_num), member)
                member.ip = ip
                return member
            else:
                return False
    else:
        return False
コード例 #5
0
ファイル: favorite.py プロジェクト: coderyy/v2ex-tornado-2
 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:
                         bookmark = q[0]
                         bookmark.delete()
                         member = Member.get(member.id)
                         member.favorited_members = member.favorited_members - 1
                         member.sync()
                         memcache.set('Member_' + str(member.num), member, 86400)
                         n = 'r/m' + str(one.num) + '/m' + str(member.num)
                         memcache.delete(n)
                         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.redirect(go)
コード例 #6
0
 def get(self, node_name):
     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):
             node = GetKindByName('Node', node_name)
             if node is not False:
                 #q = db.GqlQuery("SELECT * FROM NodeBookmark WHERE node = :1 AND member = :2", node, member)
                 q = NodeBookmark.selectBy(node=node, member=member)
                 if q.count() > 0:
                     bookmark = q[0]
                     bookmark.delete()
                     member = Member.get(member.id)
                     member.favorited_nodes = member.favorited_nodes - 1
                     member.sync()
                     store.commit()  #jon add
                     memcache.set('Member_' + str(member.num), member,
                                  86400)
                     n = 'r/n' + str(node.num) + '/m' + str(member.num)
                     memcache.delete(n)
     self.redirect(go)
コード例 #7
0
 def get(self, topic_num):
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/'
     member = CheckAuth(self)
     t = self.request.argument['t'][0].strip()
     if member:
         if member.username_lower_md5 == t:
             topic = GetKindByNum('Topic', int(topic_num))
             if topic is not False:
                 #q = db.GqlQuery("SELECT * FROM TopicBookmark WHERE topic = :1 AND member = :2", topic, member)
                 q = TopicBookmark.selectBy(topic=topic, member=member)
                 if q.count() > 0:
                     bookmark = q[0]
                     bookmark.delete()
                     member = Member.get(member.id)
                     member.favorited_topics = member.favorited_topics - 1
                     member.sync()
                     store.commit()  #jon add
                     memcache.set('Member_' + str(member.num), member,
                                  86400)
                     n = 'r/t' + str(topic.num) + '/m' + str(member.num)
                     memcache.delete(n)
                     #taskqueue.add(url='/minus/star/topic/' + str(topic.id))
                     topic.stars = topic.stars - 1
                     topic.sync()
                     store.commit()  #jon add
                     memcache.set('Topic_' + str(topic.num), topic, 86400)
     self.redirect(go)
コード例 #8
0
ファイル: favorite.py プロジェクト: coderyy/v2ex-tornado-2
 def get(self, topic_num):
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/'
     member = CheckAuth(self)
     t = self.request.argument['t'][0].strip()
     if member:
         if member.username_lower_md5 == t:
             topic = GetKindByNum('Topic', int(topic_num))
             if topic is not False:
                 #q = db.GqlQuery("SELECT * FROM TopicBookmark WHERE topic = :1 AND member = :2", topic, member)
                 q = TopicBookmark.selectBy(topic=topic,member=member)
                 if q.count() == 0:
                     bookmark = TopicBookmark(member=member)
                     bookmark.topic = topic
                     bookmark.member = member
                     bookmark.sync()
                     member = Member.get(member.id)
                     member.favorited_topics = member.favorited_topics + 1
                     member.sync()
                     store.commit()  #jon add
                     memcache.set('Member_' + str(member.num), member, 86400)
                     n = 'r/t' + str(topic.num) + '/m' + str(member.num)
                     memcache.set(n, True, 86400 * 14)
                     #taskqueue.add(url='/add/star/topic/' + str(topic.id))
                     topic.stars = topic.stars + 1
                     topic.sync()
                     store.commit()  #jon add
                     memcache.set('Topic_' + str(topic.num), topic, 86400)
     self.redirect(go)
コード例 #9
0
 def get(self, private_token):
     n = memcache.get('n_' + private_token)
     if n is not None:
         self.values['notification'] = n
         self.set_header('Content-type', 'application/xml;charset=UTF-8')
         self.values['member'] = self.member
         self.finalize(template_name='notifications', template_root='feed', template_type='xml')
     else:
         #q = db.GqlQuery("SELECT * FROM Member WHERE private_token = :1", private_token)
         q = Member.selectBy(private_token=private_token)
         count = q.count()
         if count > 0:
             member = q[0]
             #q = db.GqlQuery("SELECT * FROM Notification WHERE for_member_num = :1 ORDER BY num DESC LIMIT 20", member.num)
             q = Notification.selectBy(for_member_num=member.num).orderBy('-num').limit(20)
             notifications = []
             i = 0
             for n in q:
                 if n.type == 'reply':
                     n.title = u'' + n.member.username + u' 在 ' + self.escape(n.label1) + u' 里回复了你'
                     n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在 <a href="' + n.link1 + '">' + self.escape(n.label1) + u'</a> 里回复了你'
                     notifications.append(n)
                 if n.type == 'mention_reply':
                     n.title = u'' + n.member.username + u' 在回复 ' + self.escape(n.label1) + u' 时提到了你'
                     n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在回复 <a href="' + n.link1 + '">' + self.escape(n.label1) + u'</a> 时提到了你'
                     notifications.append(n)
                 i = i + 1
             self.values['notifications'] = notifications
             memcache.set('n_' + private_token, notifications, 600)
             self.set_header('Content-type', 'application/xml;charset=UTF-8')
             self.values['site'] = GetSite()
             self.values['member'] = member
             self.finalize(template_name='notifications', template_root='feed', template_type='xml')
コード例 #10
0
ファイル: favorite.py プロジェクト: coderyy/v2ex-tornado-2
 def get(self, node_name):
     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):
             node = GetKindByName('Node', node_name)
             if node is not False:
                 #q = db.GqlQuery("SELECT * FROM NodeBookmark WHERE node = :1 AND member = :2", node, member)
                 q = NodeBookmark.selectBy(node=node, member=member)
                 if q.count() == 0:
                     bookmark = NodeBookmark(member=member)
                     bookmark.node = node
                     bookmark.member = member
                     bookmark.sync()
                     member = Member.get(member.id)
                     member.favorited_nodes = member.favorited_nodes + 1
                     member.sync()
                     store.commit()  #jon add
                     memcache.set('Member_' + str(member.num), member, 86400)
                     n = 'r/n' + str(node.num) + '/m' + str(member.num)
                     memcache.set(n, True, 86400 * 14)
     self.redirect(go)
コード例 #11
0
 def receive(self, message):
     bodies = message.bodies(content_type='text/plain')
     for body in bodies:
         to = extract_address(message.to)
         sender = extract_address(message.sender.lower())
         if to[0:5].lower() == 'tweet':
             #q = db.GqlQuery("SELECT * FROM Member WHERE email = :1", sender)
             q = Member.selectBy(email=sender)
             if q.count() == 1:
                 member = q[0]
                 if member.twitter_oauth == 1:
                     access_token = OAuthToken.from_string(
                         member.twitter_oauth_string)
                     twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET,
                                        access_token)
                     status = body[1].decode()
                     if len(status) > 140:
                         status = status[0:140]
                     try:
                         logging.info("About to send tweet: " + status)
                         twitter.PostUpdate(status.encode('utf-8'))
                         logging.info("Successfully tweet: " + status)
                     except:
                         logging.error("Failed to tweet for " +
                                       member.username)
             else:
                 logging.error("User " + sender +
                               " doesn't have Twitter link.")
コード例 #12
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)
コード例 #13
0
 def get(self, key):
     go = '/'
     member = CheckAuth(self)
     if member:
         member = Member.get(member.id)
         one = Member.get(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.sync()
                 store.commit()  #jon add
                 memcache.set('Member_' + str(member.num), member, 86400)
     self.redirect(go)
コード例 #14
0
def GetMemberByUsername(name):
    one = memcache.get('Member::' + str(name).lower())
    if one:
        return one
    else:
        #q = db.GqlQuery("SELECT * FROM Member WHERE username_lower = :1", str(name).lower())
        q = Member.selectBy(username_lower=str(name).lower())
        if q.count() == 1:
            one = q[0]
            memcache.set('Member::' + str(name).lower(), one, 86400)
            return one
        else:
            return False
コード例 #15
0
ファイル: favorite.py プロジェクト: coderyy/v2ex-tornado-2
 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)
コード例 #16
0
def GetMemberByEmail(email):
    cache = 'Member::email::' + hashlib.md5(email.lower()).hexdigest()
    one = memcache.get(cache)
    if one:
        return one
    else:
        #q = db.GqlQuery("SELECT * FROM Member WHERE email = :1", str(email).lower())
        q = Member.selectBy(email=str(email).lower())
        if q.count() == 1:
            one = q[0]
            memcache.set(cache, one, 86400)
            return one
        else:
            return False
コード例 #17
0
 def get(self, member_key):
     member = Member.get(member_key)
     if member:
         if member.notification_position is None:
             member.notification_position = 0
         #q = db.GqlQuery("SELECT __key__ FROM Notification WHERE for_member_num = :1 AND num > :2 ORDER BY num DESC", member.num, member.notification_position)
         q = Notification.select(AND(Notification.q.for_m==member.num, Notification.q.num>member.notification_position)).orderBy('-num')
         count = q.count()
         if count > 0:
             member.notifications = count
             member.sync()
             store.commit()  #jon add
             memcache.delete('nn::' + member.username_lower)
             memcache.set('Member_' + str(member.num), member, 86400)
コード例 #18
0
 def get(self, member_key):
     member = Member.get(member_key)
     if member:
         if member.notification_position is None:
             member.notification_position = 0
         #q = db.GqlQuery("SELECT __key__ FROM Notification WHERE for_member_num = :1 AND num > :2 ORDER BY num DESC", member.num, member.notification_position)
         q = Notification.select(
             AND(Notification.q.for_m == member.num, Notification.q.num >
                 member.notification_position)).orderBy('-num')
         count = q.count()
         if count > 0:
             member.notifications = count
             member.sync()
             store.commit()  #jon add
             memcache.delete('nn::' + member.username_lower)
             memcache.set('Member_' + str(member.num), member, 86400)
コード例 #19
0
 def get(self, private_token):
     n = memcache.get('n_' + private_token)
     if n is not None:
         self.values['notification'] = n
         self.set_header('Content-type', 'application/xml;charset=UTF-8')
         self.values['member'] = self.member
         self.finalize(template_name='notifications',
                       template_root='feed',
                       template_type='xml')
     else:
         #q = db.GqlQuery("SELECT * FROM Member WHERE private_token = :1", private_token)
         q = Member.selectBy(private_token=private_token)
         count = q.count()
         if count > 0:
             member = q[0]
             #q = db.GqlQuery("SELECT * FROM Notification WHERE for_member_num = :1 ORDER BY num DESC LIMIT 20", member.num)
             q = Notification.selectBy(
                 for_member_num=member.num).orderBy('-num').limit(20)
             notifications = []
             i = 0
             for n in q:
                 if n.type == 'reply':
                     n.title = u'' + n.member.username + u' 在 ' + self.escape(
                         n.label1) + u' 里回复了你'
                     n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在 <a href="' + n.link1 + '">' + self.escape(
                         n.label1) + u'</a> 里回复了你'
                     notifications.append(n)
                 if n.type == 'mention_reply':
                     n.title = u'' + n.member.username + u' 在回复 ' + self.escape(
                         n.label1) + u' 时提到了你'
                     n.text = u'<a href="/member/' + n.member.username + u'"><strong>' + n.member.username + u'</strong></a> 在回复 <a href="' + n.link1 + '">' + self.escape(
                         n.label1) + u'</a> 时提到了你'
                     notifications.append(n)
                 i = i + 1
             self.values['notifications'] = notifications
             memcache.set('n_' + private_token, notifications, 600)
             self.set_header('Content-type',
                             'application/xml;charset=UTF-8')
             self.values['site'] = GetSite()
             self.values['member'] = member
             self.finalize(template_name='notifications',
                           template_root='feed',
                           template_type='xml')
コード例 #20
0
ファイル: mail.py プロジェクト: coderyy/v2ex-tornado-2
 def receive(self, message):
     bodies = message.bodies(content_type = 'text/plain')
     for body in bodies:
         to = extract_address(message.to)
         sender = extract_address(message.sender.lower())
         if to[0:5].lower() == 'tweet':
             #q = db.GqlQuery("SELECT * FROM Member WHERE email = :1", sender)
             q = Member.selectBy(email=sender)
             if q.count() == 1:
                 member = q[0]
                 if member.twitter_oauth == 1:
                     access_token = OAuthToken.from_string(member.twitter_oauth_string)
                     twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
                     status = body[1].decode()
                     if len(status) > 140:
                         status = status[0:140]
                     try:
                         logging.info("About to send tweet: " + status)
                         twitter.PostUpdate(status.encode('utf-8'))
                         logging.info("Successfully tweet: " + status)
                     except:
                         logging.error("Failed to tweet for " + member.username)
             else:
                 logging.error("User " + sender + " doesn't have Twitter link.")
コード例 #21
0
ファイル: main.py プロジェクト: ljxia/v2ex
 def post(self):
     browser = detect(self.request)
     template_values = {}
     template_values['system_version'] = SYSTEM_VERSION
     errors = 0
     # Verification: username
     member_username_error = 0
     member_username_error_messages = ['',
         u'请输入你的用户名',
         u'用户名长度不能超过 32 个字符',
         u'用户名只能由 a-Z 0-9 及 - 和 _ 组成',
         u'抱歉这个用户名已经有人使用了']
     member_username = self.request.get('username').strip()
     if (len(member_username) == 0):
         errors = errors + 1
         member_username_error = 1
     else:
         if (len(member_username) > 32):
             errors = errors + 1
             member_username_error = 2
         else:
             if (re.search('^[a-zA-Z0-9\-\_]+$', member_username)):
                 q = db.GqlQuery('SELECT __key__ FROM Member WHERE username_lower = :1', member_username.lower())
                 if (q.count() > 0):
                     errors = errors + 1
                     member_username_error = 4
             else:
                 errors = errors + 1
                 member_username_error = 3
     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: password
     member_password_error = 0
     member_password_error_messages = ['',
         u'请输入你的密码',
         u'密码长度不能超过 32 个字符'
     ]
     member_password = self.request.get('password').strip()
     if (len(member_password) == 0):
         errors = errors + 1
         member_password_error = 1
     else:
         if (len(member_password) > 32):
             errors = errors + 1
             member_password_error = 2
     template_values['member_password'] = member_password
     template_values['member_password_error'] = member_password_error
     template_values['member_password_error_message'] = member_password_error_messages[member_password_error]
     # 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 __key__ FROM Member WHERE email = :1', member_email.lower())
                 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]
     template_values['errors'] = errors
     if (errors == 0):
         member = Member()
         q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.max')
         if (q.count() == 1):
             counter = q[0]
             counter.value = counter.value + 1
         else:
             counter = Counter()
             counter.name = 'member.max'
             counter.value = 1
         q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.total')
         if (q2.count() == 1):
             counter2 = q2[0]
             counter2.value = counter2.value + 1
         else:
             counter2 = Counter()
             counter2.name = 'member.total'
             counter2.value = 1
         member.num = counter.value
         member.username = member_username
         member.username_lower = member_username.lower()
         member.password = hashlib.sha1(member_password).hexdigest()
         member.email = member_email.lower()
         member.auth = hashlib.sha1(str(member.num) + ':' + member.password).hexdigest()
         member.put()
         counter.put()
         counter2.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('/')
     else:
         if browser['ios']:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'signup.html')
         else:
             path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'signup.html')
         output = template.render(path, template_values)
         self.response.out.write(output)
コード例 #22
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.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 = 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.sync()
                store.commit()  #jon add
                self.response.headers['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')
            # Verification: email
            member_email_error = 0
            member_email_error_messages = ['',
                u'请输入你的电子邮件地址',
                u'电子邮件地址长度不能超过 32 个字符',
                u'你输入的电子邮件地址不符合规则',
                u'抱歉这个电子邮件地址已经有人注册过了']
            member_email = self.request.arguments['email'][0].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)
                        q = Member.select(AND(Member.q.email==member_email.lower(), Member.q.num!=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.arguments['website'][0].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.arguments['twitter'][0].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.arguments['psn'][0].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.arguments['my_home'][0].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.arguments['btc'][0].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.arguments['github'][0].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.arguments['location'][0].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.arguments['tagline'][0].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.arguments['bio'][0].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.arguments['show_home_top'][0])
            except:
                member_show_home_top = 1
            try:
                member_show_quick_post = int(self.request.arguments['show_quick_post'][0])
            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.arguments['l10n'][0].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.arguments['twitter_sync'][0]
                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.arguments['use_my_css'][0]
            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.arguments['my_css'][0].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.sync()
                store.commit()  #jon add
                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')
                else:
                    path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop')
                t=self.get_template(path, 'member_settings.html')
                self.finish(t.render(template_values))

        else:
            self.redirect('/signin')
コード例 #23
0
    def post(self):
        site = GetSite()
        member = False
        browser = detect(self.request)
        template_values = {}
        template_values['site'] = site
        template_values['page_title'] = site.title + u' › 注册'
        template_values['system_version'] = SYSTEM_VERSION
        l10n = GetMessages(self, member, site)
        template_values['l10n'] = l10n
        errors = 0
        # Verification: username
        member_username_error = 0
        member_username_error_messages = ['',
            l10n.username_empty,
            l10n.username_too_long,
            l10n.username_invalid,
            l10n.username_taken]
        member_username = self.request.get('username').strip()
        if (len(member_username) == 0):
            errors = errors + 1
            member_username_error = 1
        else:
            if (len(member_username) > 32):
                errors = errors + 1
                member_username_error = 2
            else:
                if (re.search('^[a-zA-Z0-9\_]+$', member_username)):
                    q = db.GqlQuery('SELECT __key__ FROM Member WHERE username_lower = :1', member_username.lower())
                    if (q.count() > 0):
                        errors = errors + 1
                        member_username_error = 4
                else:
                    errors = errors + 1
                    member_username_error = 3
        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: password
        member_password_error = 0
        member_password_error_messages = ['',
            u'请输入你的密码',
            u'密码长度不能超过 32 个字符'
        ]
        member_password = self.request.get('password').strip()
        if (len(member_password) == 0):
            errors = errors + 1
            member_password_error = 1
        else:
            if (len(member_password) > 32):
                errors = errors + 1
                member_password_error = 2
        template_values['member_password'] = member_password
        template_values['member_password_error'] = member_password_error
        template_values['member_password_error_message'] = member_password_error_messages[member_password_error]
        # 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 __key__ FROM Member WHERE email = :1', member_email.lower())
                    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: invitation
        invitation = self.request.get('invitation').strip()
        q = db.GqlQuery('SELECT * FROM Invitation WHERE code = :1', invitation)
        if q.count() > 0:
            invi = q[0]
            logging.info('invitation code %s used.' % invitation)
            template_values['invitation_error'] = 0
        else:
            errors = errors + 1
            template_values['invitation_error'] = 1
            template_values['invitation_error_message'] = "无效的邀请码"
        # Verification: reCAPTCHA
        challenge = self.request.get('recaptcha_challenge_field')
        response  = self.request.get('recaptcha_response_field')
        remoteip  = os.environ['REMOTE_ADDR']
        
        cResponse = captcha.submit(
                         challenge,
                         response,
                         config.recaptcha_private_key,
                         remoteip)

        if cResponse.is_valid:
            logging.info('reCAPTCHA verification passed')
            template_values['recaptcha_error'] = 0
        else:
            errors = errors + 1
            error = cResponse.error_code
            chtml = captcha.displayhtml(
                public_key = config.recaptcha_public_key,
                use_ssl = False,
                error = cResponse.error_code)
            template_values['captchahtml'] = chtml
            template_values['recaptcha_error'] = 1
            template_values['recaptcha_error_message'] = '请重新输入 reCAPTCHA 验证码'
        template_values['errors'] = errors
        if (errors == 0):
            member = Member()
            q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.max')
            if (q.count() == 1):
                counter = q[0]
                counter.value = counter.value + 1
            else:
                counter = Counter()
                counter.name = 'member.max'
                counter.value = 1
            q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.total')
            if (q2.count() == 1):
                counter2 = q2[0]
                counter2.value = counter2.value + 1
            else:
                counter2 = Counter()
                counter2.name = 'member.total'
                counter2.value = 1
            member.num = counter.value
            member.username = member_username
            member.username_lower = member_username.lower()
            member.password = hashlib.sha1(member_password).hexdigest()
            member.email = member_email.lower()
            member.auth = hashlib.sha1(str(member.num) + ':' + member.password).hexdigest()
            member.put()
            counter.put()
            counter2.put()
            invi.used = True
            invi.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('/')
        else:
            if browser['ios']:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'signup.html')
            else:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'signup.html')
            output = template.render(path, template_values)
            self.response.out.write(output)
コード例 #24
0
ファイル: main.py プロジェクト: iksky/v2ex
    def post(self):
        site = GetSite()
        member = False
        browser = detect(self.request)
        template_values = {}
        template_values['site'] = site
        template_values['page_title'] = site.title + u' › 注册'
        template_values['system_version'] = SYSTEM_VERSION
        l10n = GetMessages(self, member, site)
        template_values['l10n'] = l10n
        errors = 0
        # Verification: username
        member_username_error = 0
        member_username_error_messages = ['',
            l10n.username_empty,
            l10n.username_too_long,
            l10n.username_invalid,
            l10n.username_taken]
        member_username = self.request.get('username').strip()
        if (len(member_username) == 0):
            errors = errors + 1
            member_username_error = 1
        else:
            if (len(member_username) > 32):
                errors = errors + 1
                member_username_error = 2
            else:
                if (re.search('^[a-zA-Z0-9\_]+$', member_username)):
                    q = db.GqlQuery('SELECT __key__ FROM Member WHERE username_lower = :1', member_username.lower())
                    if (q.count() > 0):
                        errors = errors + 1
                        member_username_error = 4
                else:
                    errors = errors + 1
                    member_username_error = 3
        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: password
        member_password_error = 0
        member_password_error_messages = ['',
            u'请输入你的密码',
            u'密码长度不能超过 32 个字符'
        ]
        member_password = self.request.get('password').strip()
        if (len(member_password) == 0):
            errors = errors + 1
            member_password_error = 1
        else:
            if (len(member_password) > 32):
                errors = errors + 1
                member_password_error = 2
        template_values['member_password'] = member_password
        template_values['member_password_error'] = member_password_error
        template_values['member_password_error_message'] = member_password_error_messages[member_password_error]
        # 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 __key__ FROM Member WHERE email = :1', member_email.lower())
                    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: reCAPTCHA
        challenge = self.request.get('recaptcha_challenge_field')
        response  = self.request.get('recaptcha_response_field')
        remoteip  = os.environ['REMOTE_ADDR']
        
        cResponse = captcha.submit(
                         challenge,
                         response,
                         config.recaptcha_private_key,
                         remoteip)

        if cResponse.is_valid:
            logging.info('reCAPTCHA verification passed')
            template_values['recaptcha_error'] = 0
        else:
            errors = errors + 1
            error = cResponse.error_code
            chtml = captcha.displayhtml(
                public_key = config.recaptcha_public_key,
                use_ssl = False,
                error = cResponse.error_code)
            template_values['captchahtml'] = chtml
            template_values['recaptcha_error'] = 1
            template_values['recaptcha_error_message'] = '请重新输入 reCAPTCHA 验证码'
        template_values['errors'] = errors
        if (errors == 0):
            member = Member()
            q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.max')
            if (q.count() == 1):
                counter = q[0]
                counter.value = counter.value + 1
            else:
                counter = Counter()
                counter.name = 'member.max'
                counter.value = 1
            q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.total')
            if (q2.count() == 1):
                counter2 = q2[0]
                counter2.value = counter2.value + 1
            else:
                counter2 = Counter()
                counter2.name = 'member.total'
                counter2.value = 1
            member.num = counter.value
            member.username = member_username
            member.username_lower = member_username.lower()
            member.password = hashlib.sha1(member_password).hexdigest()
            member.email = member_email.lower()
            member.auth = hashlib.sha1(str(member.num) + ':' + member.password).hexdigest()
            member.l10n = site.l10n
            member.put()
            counter.put()
            counter2.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('/')
        else:
            if browser['ios']:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'signup.html')
            else:
                path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'signup.html')
            output = template.render(path, template_values)
            self.response.out.write(output)
コード例 #25
0
ファイル: main.py プロジェクト: qhm123/the10000
    def post(self):
        site = GetSite()
        member = False
        browser = detect(self.request)
        template_values = {}
        template_values["site"] = site
        template_values["page_title"] = site.title + u" › 注册"
        template_values["system_version"] = SYSTEM_VERSION
        l10n = GetMessages(self, member, site)
        template_values["l10n"] = l10n
        errors = 0
        # Verification: username
        member_username_error = 0
        member_username_error_messages = [
            "",
            l10n.username_empty,
            l10n.username_too_long,
            l10n.username_invalid,
            l10n.username_taken,
        ]
        member_username = self.request.get("username").strip()
        if len(member_username) == 0:
            errors = errors + 1
            member_username_error = 1
        else:
            if len(member_username) > 32:
                errors = errors + 1
                member_username_error = 2
            else:
                if re.search("^[a-zA-Z0-9\_]+$", member_username):
                    q = db.GqlQuery("SELECT __key__ FROM Member WHERE username_lower = :1", member_username.lower())
                    if q.count() > 0:
                        errors = errors + 1
                        member_username_error = 4
                else:
                    errors = errors + 1
                    member_username_error = 3
        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: password
        member_password_error = 0
        member_password_error_messages = ["", u"请输入你的密码", u"密码长度不能超过 32 个字符"]
        member_password = self.request.get("password").strip()
        if len(member_password) == 0:
            errors = errors + 1
            member_password_error = 1
        else:
            if len(member_password) > 32:
                errors = errors + 1
                member_password_error = 2
        template_values["member_password"] = member_password
        template_values["member_password_error"] = member_password_error
        template_values["member_password_error_message"] = member_password_error_messages[member_password_error]
        # 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 __key__ FROM Member WHERE email = :1", member_email.lower())
                    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: invitation
        invitation = self.request.get("invitation").strip()
        q = db.GqlQuery("SELECT * FROM Invitation WHERE code = :1", invitation)
        if q.count() > 0:
            invi = q[0]
            logging.info("invitation code %s used." % invitation)
            template_values["invitation_error"] = 0
        else:
            errors = errors + 1
            template_values["invitation_error"] = 1
            template_values["invitation_error_message"] = "无效的邀请码"
        # Verification: reCAPTCHA
        challenge = self.request.get("recaptcha_challenge_field")
        response = self.request.get("recaptcha_response_field")
        remoteip = os.environ["REMOTE_ADDR"]

        cResponse = captcha.submit(challenge, response, config.recaptcha_private_key, remoteip)

        if cResponse.is_valid:
            logging.info("reCAPTCHA verification passed")
            template_values["recaptcha_error"] = 0
        else:
            errors = errors + 1
            error = cResponse.error_code
            chtml = captcha.displayhtml(
                public_key=config.recaptcha_public_key, use_ssl=False, error=cResponse.error_code
            )
            template_values["captchahtml"] = chtml
            template_values["recaptcha_error"] = 1
            template_values["recaptcha_error_message"] = "请重新输入 reCAPTCHA 验证码"
        template_values["errors"] = errors
        if errors == 0:
            member = Member()
            q = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", "member.max")
            if q.count() == 1:
                counter = q[0]
                counter.value = counter.value + 1
            else:
                counter = Counter()
                counter.name = "member.max"
                counter.value = 1
            q2 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", "member.total")
            if q2.count() == 1:
                counter2 = q2[0]
                counter2.value = counter2.value + 1
            else:
                counter2 = Counter()
                counter2.name = "member.total"
                counter2.value = 1
            member.num = counter.value
            member.username = member_username
            member.username_lower = member_username.lower()
            member.password = hashlib.sha1(member_password).hexdigest()
            member.email = member_email.lower()
            member.auth = hashlib.sha1(str(member.num) + ":" + member.password).hexdigest()
            member.put()
            counter.put()
            counter2.put()
            invi.used = True
            invi.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("/")
        else:
            if browser["ios"]:
                path = os.path.join(os.path.dirname(__file__), "tpl", "mobile", "signup.html")
            else:
                path = os.path.join(os.path.dirname(__file__), "tpl", "desktop", "signup.html")
            output = template.render(path, template_values)
            self.response.out.write(output)
コード例 #26
0
ファイル: main.py プロジェクト: cwyark/v2ex
    def post(self):
        if self.member is not None:
            self.abort(404)

        errors = 0
        # Verification: username
        member_username_error = 0
        member_username_error_messages = ['' , self.l10n.username_empty, self.l10n.username_too_long, self.l10n.username_too_short, self.l10n.username_invalid, self.l10n.username_taken]
        member_username = self.request.get('username').strip()
        # Special cases
       
        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 = db.GqlQuery('SELECT __key__ FROM Member WHERE username_lower = :1', member_username.lower())
                        if (q.count() > 0):
                            errors = errors + 1
                            member_username_error = 5
                    else:
                        errors = errors + 1
                        member_username_error = 4

        self.template_values['member_username'] = member_username
        self.template_values['member_username_error'] = member_username_error
        self.template_values['member_username_error_message'] = member_username_error_messages[member_username_error]
        # Verification: password
        member_password_error = 0
        member_password_error_messages = ['',
                u'請輸入您的密碼',
                u'密碼長度不能超過32個字母'
                ]
        member_password = self.request.get('password').strip()
        if (len(member_password) == 0):
            errors = errors + 1
            member_password_error = 1
        else:
            if (len(member_password) > 32):
                errors = errors + 1
                member_password_error = 2
        self.template_values['member_password'] = member_password
        self.template_values['member_password_error'] = member_password_error
        self.template_values['member_password_error_message'] = member_password_error_messages[member_password_error]
        # 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 __key__ FROM Member WHERE email = :1', member_email.lower())
                    if (q.count() > 0):
                        errors = errors + 1
                        member_email_error = 4
                else:
                    errors = errors + 1
                    member_email_error = 3
        self.template_values['member_email'] = member_email
        self.template_values['member_email_error'] = member_email_error
        self.template_values['member_email_error_message'] = member_email_error_messages[member_email_error]
        # Verification: reCAPTCHA
        challenge = self.request.get('recaptcha_challenge_field')
        response = self.request.get('recaptcha_response_field')
        try:
            remoteip = os.environ['REMOTE_ADDR']
        except:
            remoteip = self.request.remote_addr

        cResponse = captcha.submit(
                challenge,
                response,
                config.recaptcha_private_key,
                remoteip)

        if cResponse.is_valid:
            logging.info('reCAPTCHA verification passed')
            self.template_values['recaptcha_error'] = 0
        else:
            errors = errors + 1
            error = cResponse.error_code
            chtml = captcha.displayhtml(
                public_key = config.recaptcha_public_key,
                use_ssl = False,
                error = cResponse.error_code)
            self.template_values['captchahtml'] = chtml
            self.template_values['recaptcha_error'] = 1
            self.template_values['recaptcha_error_message'] = '請重新輸入 reCAPTCHA 驗證碼'
        self.template_values['errors'] = errors
        if (errors == 0):
            member = Member()
            q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.max')
            if (q.count() == 1):
                counter = q[0]
                counter.value = counter.value + 1
            else:
                counter = Counter()
                counter.name = 'member.max'
                counter.value = 1
            q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.total')
            if (q2.count() == 1):
                counter2 = q2[0]
                counter2.value = counter2.value + 1
            else:
                counter2 = Counter()
                counter2.name = 'member.total'
                counter2.value = 1

            member.num = counter.value
            member.username = member_username
            member.username_lower = member_username.lower()
            member.password = hashlib.sha1(member_password).hexdigest()
            member.email = member_email.lower()
            member.auth = hashlib.sha1(str(member.num) + ':' + member.password).hexdigest()
            member.l10n = self.site.l10n
            member.newbie = 1
            member.noob = 0
            if member.num == 1:
                member.level = 0
            else:
                member.level = 1000
            member.put()
            counter.put()
            counter2.put()
            self.response.headers['Set-Cookie'] = str('auth=' + member.auth + '; expires=' + (datetime.datetime.now() + datetime.timedelta(days=365)).strftime("%a, %d-%b-%Y %H:%M:%S GMT") + '; path=/')
            memcache.delete('member_total')
            self.redirect('/')
        else:
            self.finalize(template_name='signup')