Пример #1
0
def google_login(email, google_id):
    """ Log in for google users"""

    user_exists = User.query.filter_by(email=email).first()

    if user_exists != None:
        session["user_id"] = user_exists.user_id
        session["seen"] = []
        session["food_seen"] = []
    else:
        now = datetime.now()
        created_date = now.strftime('%Y/%m/%d %H:%M:%S')
        new_user = User(username=email,
                        email=email,
                        password=None,
                        created_date=now)
        db.session.add(new_user)
        db.session.commit()
        new_google_user = GoogleUser(user_id=new_user.user_id,
                                     google_id=google_id)
        db.session.add(new_google_user)
        db.session.commit()
        session["user_id"] = new_user.user_id
        session["seen"] = []
        session["food_seen"] = []
Пример #2
0
 def cur_user(self):
     if self.request.user:
         from model import Member, GoogleUser
         req_user = self.request.user
         gu_obj = GoogleUser.get_or_insert(req_user.email())
         if gu_obj.name:
             return Member.get_by_key_name(gu_obj.name)
         return None
     else:
         return None
Пример #3
0
 def cur_user(self):
     if self.request.user:
         from model import Member, GoogleUser
         req_user = self.request.user
         gu_obj = GoogleUser.get_or_insert(req_user.user_id())
         if gu_obj.name:
             return Member.get_by_key_name(gu_obj.name)
         return None
     else:
         return None
Пример #4
0
 def get(self):
     req_user = self.request.user
     gu_obj = GoogleUser.get_or_insert(req_user.user_id())
     if gu_obj.name:
         self.redirect('/')
         return
     else:
         self.echo('setname.html', {
             'title': "设置名字",
             'errors':[],
             'name':'',
             'newest_node': Node.get_newest(),
         }, layout='_layout.html')
Пример #5
0
 def post(self):
     req_user = self.request.user
     gu_obj = GoogleUser.get_or_insert(req_user.user_id())
     if gu_obj.name:
         self.redirect('/')
         return
     
     errors = []
     name = self.POST['name'].strip().lower()
     if name:
         if len(name)<20:
             if re.search('^[a-zA-Z0-9]+$', name):
                 check_obj = Member.get_by_key_name(str(name))
                 if check_obj:
                     errors.append('该用户名已被注册,请换一个吧')
                 else:
                     #get member id
                     mid_obj = Counter.get_or_insert('member_auto_increment',name = 'member_auto_increment', value = 1)
                     nuser_obj = Member(key_name=name, id = mid_obj.value, flag = 1, add = int(time()))
                     nuser_obj.put()
                     if nuser_obj.is_saved():
                         #set google user
                         gu_obj.name = name
                         db.run_in_transaction(obj_runput,gu_obj)
                         #all member num +1
                         mid_obj.value += 1
                         db.run_in_transaction(obj_runput,mid_obj)
                         self.redirect('/setavatar')
                         return
                     else:
                         errors.append('服务器出现意外错误,请稍后再试')
             else:
                 errors.append('用户名只能包含字母和数字')
         else:
             errors.append('用户名太长了')
     else:
         errors.append('用户名必填')
     
     self.echo('setname.html', {
         'title': "设置名字",
         'errors':errors,
         'name':name,
         'newest_node': Node.get_newest(),
     }, layout='_layout.html')
Пример #6
0
    def post(self):
        req_user = self.request.user
        gu_obj = GoogleUser.get_or_insert(req_user.email())
        if gu_obj.name:
            self.redirect('/')
            return

        errors = []
        name = self.POST['name'].strip().lower()
        if name:
            if len(name) < 20:
                if re.search('^[a-zA-Z0-9]+$', name):
                    check_obj = Member.get_by_key_name(str(name))
                    if check_obj:
                        errors.append('该用户名已被注册,请换一个吧')
                    else:
                        #get member id
                        mid_obj = Counter.get_or_insert(
                            'member_auto_increment',
                            name='member_auto_increment',
                            value=1)
                        nuser_obj = Member(key_name=name,
                                           id=mid_obj.value,
                                           flag=1,
                                           add=int(time()))
                        nuser_obj.put()
                        if nuser_obj.is_saved():
                            #set google user
                            gu_obj.name = name
                            db.run_in_transaction(obj_runput, gu_obj)
                            #all member num +1
                            mid_obj.value += 1
                            db.run_in_transaction(obj_runput, mid_obj)

                            #try to Fetch Google Plus Profile Picture
                            try:
                                img_url = 'https://profiles.google.com/s2/photos/profile/' + req_user.nickname(
                                )
                                img_data = read_img(img_url)
                                #self.header['Content-Type'] = "image/jpg"
                                if img_data:
                                    pass
                                else:
                                    img_url = 'https://www.gravatar.com/avatar/%s?s=73&d=monsterid' % md5(
                                        req_user.email()).hexdigest()
                                    img_data = read_img(img_url)

                                if img_data:
                                    imgobj = images.Image(img_data)
                                    if imgobj.width <= 73 and imgobj.height <= 73:
                                        img_large = img_data
                                    else:
                                        imgobj.resize(73, 73)
                                        imgobj.im_feeling_lucky()
                                        img_large = imgobj.execute_transforms(
                                            output_encoding=images.JPEG,
                                            quality=95)

                                    u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER,
                                              UPYUN_PW)
                                    file_path_name = '/avatar/%s.jpg' % self.cur_user.name
                                    avatar = u.writeFile(
                                        file_path_name, img_large, True)

                                    if avatar:
                                        m_obj = self.cur_user  #Member.get_by_key_name(self.cur_user.name)
                                        if m_obj.flag == 1:
                                            if m_obj.id == 1:
                                                m_obj.flag = 99
                                            else:
                                                m_obj.flag = 2
                                            db.run_in_transaction(
                                                obj_runput, m_obj, [
                                                    'cur_user:'******'Fetch Google Plus Profile Picture Failure: '
                                    + req_user.email())
                            #
                            self.redirect('/setavatar')
                            return
                        else:
                            errors.append('服务器出现意外错误,请稍后再试')
                else:
                    errors.append('用户名只能包含字母和数字')
            else:
                errors.append('用户名太长了')
        else:
            errors.append('用户名必填')

        self.echo('setname.html', {
            'title': "设置名字",
            'errors': errors,
            'name': name,
            'newest_node': Node.get_newest(),
        },
                  layout='_layout.html')