def check_auth(update, context): query = update.callback_query user_id = query.from_user.id with conn.cursor() as cur: cur.execute( "SELECT request_token, request_token_secret " "FROM tokens where id = %s", (user_id, )) tokens = cur.fetchone() try: session = goodreads_service.get_auth_session(*tokens) except KeyError: logger.error(f"authorize error: user_id {user_id}") context.bot.answer_callback_query(query.id, "Ошибка авторизации!") return goodreads_id = goodreads_api.me(session) logger.info(f"Success auth, user_id: {user_id}") with conn.cursor() as cur: cur.execute( "UPDATE tokens " "SET (access_token, access_token_secret, " " goodreads_id) = (%s, %s, %s) " "WHERE id = %s", (session.access_token, session.access_token_secret, goodreads_id, user_id)) conn.commit() message = ( """Авторизация успешна 🚀\n""" """Для начала работы просто попробуйте отправить боту название книги 📖\n""" """Либо загляните на свои полки 📚 с помощью /shelves""") update.callback_query.edit_message_text(message)
def check_auth(update, context): query = update.callback_query user_id = query.from_user.id with conn.cursor() as cur: cur.execute( "SELECT request_token, request_token_secret " "FROM tokens where id = %s", (user_id, )) tokens = cur.fetchone() try: session = goodreads_service.get_auth_session(*tokens) except KeyError: logger.error(f"authorize error: user_id {user_id}") context.bot.answer_callback_query(query.id, "Ошибка авторизации!") return goodreads_id = goodreads_api.me(session) logger.info(f"Success auth, user_id: {user_id}") with conn.cursor() as cur: cur.execute( "UPDATE tokens " "SET (access_token, access_token_secret, " " goodreads_id) = (%s, %s, %s) " "WHERE id = %s", (session.access_token, session.access_token_secret, goodreads_id, user_id)) conn.commit() update.callback_query.edit_message_text(str(f"Авторизован:{goodreads_id}"))
def get_db_tokens_session(self, user_id): with conn.cursor() as cur: cur.execute( "SELECT access_token, access_token_secret " "FROM tokens " "where id = %s", (user_id, )) tokens = cur.fetchone() if tokens and all(tokens): return super().get_session(token=tokens)
def _session(user_id): with conn.cursor() as cur: cur.execute( "SELECT access_token, access_token_secret " "FROM tokens where id = %s", (user_id, )) tokens = cur.fetchone() conn.commit() if tokens is not None: session = goodreads_service.get_session(tokens) else: return None return session
def logout(update, context): logger.info(f"message: {update.message.text}") user_id = update.message.from_user.id with conn.cursor() as cur: cur.execute("DELETE FROM tokens " "where id = %s " "RETURNING id", [user_id]) count = cur.fetchone() conn.commit() if not count: return start_handler(update, context) text = ("Готово!\nДля повторной авторизации бота используйте /authorize") update.message.reply_text(text=text)
def authorize(update, context): req_token, req_token_secret = goodreads_service.get_request_token( header_auth=True) authorize_url = goodreads_service.get_authorize_url(req_token) user_id = update.message.from_user.id with conn.cursor() as cur: cur.execute( "INSERT INTO tokens (id, request_token, " " request_token_secret) " "VALUES(%s, %s, %s)" "ON CONFLICT DO NOTHING", (user_id, req_token, req_token_secret)) conn.commit() logger.info(f"Authorize, sending url to user: {str(user_id)}") markup = InlineKeyboardMarkup( [[InlineKeyboardButton('Готово!', callback_data='check_auth')]]) text = f'Для авторизации бота перейдите по ссылке: {authorize_url}' update.message.reply_text(text=text, reply_markup=markup)