def test_create_and_oauth(): ''' test create user ''' _mail = '*****@*****.**' with pytest.raises(Exception) as error: User.create(mail=_mail) assert str(error.value) == f'mail: `{_mail}` not in the oauth dbs' OAuthDB().add_data(mail=_mail, data={}) OAuthDB().find_one_and_update({'_id': _mail}, {'$set': { 'owner': '00000000' }}) with pytest.raises(Exception) as error: User.create(mail=_mail) assert str(error.value) == f'mail:`{_mail}` already bind'
def test_update_profile(): ''' Test update profile ''' _mail = '*****@*****.**' OAuthDB().add_data(mail=_mail, data={}) created_user = User.create(mail=_mail) data = {'nickname': 'nick coscup'} updated_user = User(uid=created_user['_id']).update_profile(data=data) assert updated_user['profile']['nickname'] == 'nick coscup' real_data = {'name': 'COSCUP'} updated_user = User(uid=created_user['_id']).update_profile_real( data=real_data) assert updated_user['profile_real']['name'] == 'COSCUP' suspend_user = User(uid=created_user['_id']).property_suspend() assert suspend_user['property']['suspend']
def user_add() -> None: ''' Create an dev user ''' user_info = { 'id': '000000000000000000000', 'email': '*****@*****.**', 'verified_email': True, 'name': 'Volunteer Dev (testing)', 'given_name': 'Volunteer', 'family_name': 'Dev', 'picture': '', 'locale': 'en', } # ----- save oauth info ----- # OAuth.add(mail=user_info['email'], data=user_info, token=Token()) # ----- Check account or create ----- # owner = OAuth.owner(mail=user_info['email']) if owner: user = User(uid=owner).get() else: user = User.create(mail=user_info['email']) user_session = USession.make_new(uid=user['_id'], header={}) click.echo(click.style('\n[!] Next step', bold=True)) click.echo( click.style(' | Please visit these link to setup the cookie/session:', fg='yellow', bold=True)) click.echo( click.style( f' -> http://127.0.0.1/dev/cookie?sid={user_session.inserted_id}', fg='green', bold=True)) click.echo('') click.echo( click.style('Thank you for your contribution!', fg='cyan', bold=True)) click.echo('')
def test_create_success(): ''' Test create user success ''' _mail = '*****@*****.**' OAuthDB().add_data(mail=_mail, data={}) created_user = User.create(mail=_mail) assert created_user['mail'] == _mail
def oauth2callback(): ''' oauth2callback ''' if 'r' in request.args and request.args['r'].startswith('/'): session['r'] = request.args['r'] flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( './client_secret.json', scopes=( 'openid', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', ), redirect_uri=f'https://{setting.DOMAIN}/oauth2callback', ) if 'code' not in request.args: authorization_url, state = flow.authorization_url( access_type='offline', include_granted_scopes='true', state=hashlib.sha256(os.urandom(2048)).hexdigest(), ) session['state'] = state return redirect(authorization_url) url = request.url.replace('http://', 'https://') url_query = parse_qs(urlparse(url).query) if 'state' in url_query and url_query['state'] and \ url_query['state'][0] == session.get('state'): flow.fetch_token(authorization_response=url) auth_client = discovery.build('oauth2', 'v2', credentials=flow.credentials, cache_discovery=False) user_info = auth_client.userinfo().get().execute() # ----- save oauth info ----- # OAuth.add(mail=user_info['email'], data=user_info, token=flow.credentials) # ----- Check account or create ----- # owner = OAuth.owner(mail=user_info['email']) if owner: user = User(uid=owner).get() else: user = User.create(mail=user_info['email']) MailLetterDB().create(uid=user['_id']) user_session = USession.make_new(uid=user['_id'], header=dict(request.headers)) session['sid'] = user_session.inserted_id if 'r' in session: redirect_path = session['r'] logging.info('login r: %s', redirect_path) session.pop('r', None) session.pop('state', None) return redirect(redirect_path) return redirect(url_for('index', _scheme='https', _external=True)) session.pop('state', None) return redirect(url_for('oauth2callback', _scheme='https', _external=True))