from flask import Flask, request, redirect, session, url_for, abort import requests import os import logging app = Flask(__name__) app.secret_key = os.getenv('SECRET_KEY') logging.basicConfig(level=logging.INFO) def get_access_token(code): try: client_id = os.getenv('APP_ID') client_secret = os.getenv('APP_SECRET') redirect_uri = os.getenv('red_uri') url = f'https://oauth.vk.com/access_token?client_id={client_id}&client_secret={client_secret}&redirect_uri={redirect_uri}&code={code}' response = requests.get(url) response.raise_for_status() data = response.json() if 'access_token' in data: access_token = data['access_token'] user_id = data['user_id'] return access_token, user_id else: logging.error("Ошибка при получении access_token: %s", data) return None, None except requests.RequestException as e: logging.error("Ошибка при запросе access_token: %s", e) return None, None @app.route('/login') def login(): code = request.args.get('code') if code: access_token, user_id = get_access_token(code) if access_token and user_id: session['access_token'] = access_token session['user_id'] = user_id return redirect(url_for('protected_route')) else: return "Ошибка при получении access_token", 400 else: return "Код авторизации не найден", 400 def is_authenticated(): return 'access_token' in session and 'user_id' in session @app.route('/protected') def protected_route(): if is_authenticated(): user_id = session['user_id'] return f"Добро пожаловать, пользователь с ID {user_id}!" else: return redirect(url_for('login')) if __name__ == '__main__': app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))