def new_gmail_account(): logger = get_logger() authcode = request.values.get('authcode') redirecturi = request.values.get('redirecturi') reauth = True auth_handler = GmailAuthHandler(provider_name='gmail') auth_handler.OAUTH_REDIRECT_URI = redirecturi auth_info = auth_handler._get_authenticated_user(authcode) auth_info['contacts'] = True auth_info['events'] = True auth_info['provider'] = 'gmail' email_address = auth_info['email'] account_exists = False # Check for email in allowed emails list emails_filter_enabled = config.get('EMAILS_FILTER_ENABLED') allowed_emails = config.get('ALLOWED_EMAILS') if emails_filter_enabled and allowed_emails and email_address not in allowed_emails: return jsonify({"code": "email_not_allowed", "message": "Email not allowed", "profile": auth_info}) with session_scope(0) as db_session: account = db_session.query(Account).filter_by(email_address=email_address).first() if account is not None and not reauth: api_id = account.namespace.public_id return jsonify({"code": "account_exist", "message": "Account already exist", "api_id": api_id}) elif account is not None and reauth: account_exists = True account = auth_handler.update_account(account, auth_info) else: account = auth_handler.create_account(email_address, auth_info) try: if auth_handler.verify_account(account): db_session.add(account) db_session.commit() except NotSupportedError as e: return default_json_error(e) api_id = account.namespace.public_id if account_exists: return jsonify({"code": "account_updated", "message": "Account already exist and Updated", "api_id": api_id}) return jsonify({"code": "account_created", "message": "new account created", "api_id": api_id})
def login_gmail_account(): authcode = request.values.get('authcode') redirecturi = request.values.get('redirecturi') auth_handler = GmailAuthHandler(provider_name='gmail') auth_handler.OAUTH_REDIRECT_URI = redirecturi auth_info = auth_handler._get_authenticated_user(authcode) email_address = auth_info['email'] with session_scope(0) as db_session: account = db_session.query(Account).filter_by(email_address=email_address).first() if account is None: return default_json_error('The account does not exist!') api_id = account.namespace.public_id return jsonify({"message": "Login successful", "api_id": api_id})