예제 #1
0
def vkontakte_authorized():

    next_url = request.args.get('next') or url_for('index.index')
    if request.args.get('code'):
        token = vkontakte.get_token(code=request.args.get('code'))
        session['access_token'] = token.get('access_token')
        if not token.get('email'):
            return redirect(url_for('error.error', error='Помилка при логуванні. '
                                                         'Можливо ви не підтвердили вашу електронну адресу в vkontakte '
                                                         'або заборонили доступ до вашої електронної адреси в '
                                                         'налаштуваннях. Спробуйте залогуватися через іншу систему'))
        else:
            user = db_query(User, email=token.get('email')).first()
            if user is None:
                user_name = json.load(urllib.urlopen(
                    "https://api.vk.com/method/users.get?v=5.8&access_token={access_token}".format(
                        access_token=token.get('access_token'))))['response'][0]
                print(user_name)
                user_name = user_name.get('first_name') + ' ' + user_name.get('last_name')
                new_user = User(email=token.get('email'), registered_via='vkontakte',
                                username=token.get('email'), shown_name=user_name,
                                confirmed_at=datetime.datetime.utcnow(), active=True)
                g.db.add(new_user)
                g.db.commit()
                login_user(new_user)
            else:
                login_user(user)
    else:
        return redirect(url_for('error.error', error='Помилка при логуванні. Спробуйте ще раз, '
                                                     'або спробуйте залогуватися через іншу систему'))
    session['login_via'] = 'vkontakte'
    return redirect(next_url)
예제 #2
0
def google_login():
    try:
        flow = client.flow_from_clientsecrets(os.getcwd() + '/app-root/runtime/repo/client_secret.json',
                                              scope=['https://www.googleapis.com/auth/userinfo.email',
                                                     'https://www.googleapis.com/auth/userinfo.profile'],
                                              redirect_uri='{host}/auth/google_login'.format(host=get_app_url()))
    except IOError as e:
        flow = client.flow_from_clientsecrets('client_secret.json',
                                              scope=['https://www.googleapis.com/auth/userinfo.email',
                                                     'https://www.googleapis.com/auth/userinfo.profile'],
                                              redirect_uri='{host}/auth/google_login'.format(host=get_app_url()))
    flow.params['access_type'] = 'online'
    if 'code' not in request.args:
        auth_uri = flow.step1_get_authorize_url()
        return redirect(auth_uri)
    else:
        auth_code = request.args.get('code')
        credentials = flow.step2_exchange(auth_code)
        user_data = json.load(
            urllib.urlopen('https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token={token}'.format(
                token=credentials.access_token)))
        session['credentials'] = credentials.to_json()
    if not user_data.get('email'):
        return redirect(url_for('error.error', error='Помилка при логуванні. '
                                                     'Можливо ви не підтвердили вашу електронну адресу в vkontakte '
                                                     'або заборонили доступ до вашої електронної адреси в '
                                                     'налаштуваннях. Спробуйте залогуватися через іншу систему'))
    user = db_query(User, email=user_data.get('email')).first()
    if user is None:
        new_user = User(email=user_data.get('email'), registered_via='google',
                        username=user_data.get('email'), shown_name=user_data.get('name'),
                        confirmed_at=datetime.datetime.utcnow(), active=True, google_id=user_data['id'])
        g.db.add(new_user)
        login_user(new_user)
        g.db.commit()
    else:
        if not user.google_id:
            user.google_id = user_data['id']
        login_user(user)
    g.db.commit()
    session['login_via'] = 'google'
    return redirect(url_for('index.index'))
예제 #3
0
def facebook_authorized(resp):
    next_url = request.args.get('next') or url_for('index.index')
    if resp is None:
        return redirect(url_for('error.error', error='Помилка при логуванні, попробуйте ще раз'))
    session['oauth_token'] = (resp['access_token'], '')
    user_data = facebook.get('me?fields=id,email,name').data
    user = db_query(User, email=user_data.get('email')).first()
    if user is None:
        new_user = User(email=user_data['email'], registered_via='facebook',
                        username=user_data['email'], shown_name=user_data['name'],
                        confirmed_at=datetime.datetime.utcnow(), active=True, facebook_id=user_data['id'])
        g.db.add(new_user)
        login_user(new_user)
    else:
        if not user.facebook_id:
            user.facebook_id=user_data['id']
        login_user(user)
    g.db.commit()
    session['login_via'] = 'facebook'
    return redirect(next_url)
예제 #4
0
def login():
    """ Prompt for username/email and password and sign the user in."""
    user_manager = current_app.user_manager
    db_adapter = user_manager.db_adapter
    data = request.form
    next = request.args.get('next', _endpoint_url(user_manager.after_login_endpoint))
    reg_next = request.args.get('reg_next', _endpoint_url(user_manager.after_register_endpoint))

    # Immediately redirect already logged in users

    if _call_or_get(current_user.is_authenticated) and user_manager.auto_login_at_login:
        return redirect(next)
    user = None
    user_email = None

    # user = user_manager.find_user_by_username(data.get('user_name'))
    user = db_query(User).filter(or_(User.email == data.get('user_name'),
                                     User.username == data.get('user_name'))).first()
    if not user:
        return ajax_response(message="Ви ввели невірний логін або пароль")
    else:
        if user.password:
            if not verify_password(user_manager, data.get('password'), user.password):
                user = None
                return ajax_response(message="Ви ввели невірний логін або пароль")
        else:
            return ajax_response(message="Ви ввели невірний логін або пароль")
    user_email = None
    session['login_via'] = request.host
    remember_me = True if data.get('remember_me') else False
    if user and db_adapter.UserEmailClass:
        user_email = db_adapter.find_first_object(db_adapter.UserEmailClass,
                                                  user_id=int(user.get_id()), is_primary=True, )
    if not user and user_manager.enable_email:
        user, user_email = user_manager.find_user_by_email(data.get('user_name'))
    if user:
        _do_login_user(user, request.referrer, remember_me=remember_me)
    return ajax_response(message="Ви були успішно залоговані", reload_page = True)