from flask import Flask, render_template, request, redirect, url_for, session, g, jsonify, flash, make_response
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from flask_limiter import RateLimitExceeded
from flask_bcrypt import Bcrypt
from flask_caching import Cache
from flask_minify import Minify
from flask_compress import Compress
from fastapi import FastAPI
from urllib.parse import quote
from starlette.middleware.wsgi import WSGIMiddleware
from werkzeug.utils import secure_filename
from http.server import HTTPServer, BaseHTTPRequestHandler
from telegram_bot.database import get_user_info
import sqlite3
import hashlib
from capcha import generate_captcha
from config import *
from utils import *
from db import create_db
from ai_bot import generate_response, conversation_history
from api.v2.routes import v2_blueprint
from apscheduler.schedulers.background import BackgroundScheduler
from yoomoney import Quickpay, Client
import random
import datetime
import pytz
import sys
import os
import logging
import requests
from logging.handlers import RotatingFileHandler
import asyncio
import threading
# Инициализация приложения Flask
app = Flask(__name__)
bcrypt = Bcrypt(app)
cache = Cache(app, config={'CACHE_TYPE': 'SimpleCache'})
#Minify(app=app, html=True, js=True, cssless=True, bypass=['image/*', 'application/octet-stream'], fail_safe=True)
Compress(app)
app.register_blueprint(v2_blueprint, url_prefix='/api/v2')
app.config['SECRET_KEY'] = SECRET_KEY
app.config['UPLOAD_FOLDER'] = "static/images/"
app.config['SESSION_COOKIE_SECURE'] = False # Игнорировать secure cookies для .onion
app.config['SESSION_COOKIE_HTTPONLY'] = True # Предотвратить доступ к куке через JavaScript
LOG_FOLDER = 'logs'
SERVER_LOG_FOLDER = 'server_logs'
DATABASE_BACKUP = "DataBase_backup"
NONE_AVATAR_FOLDER = 'static/images/none_avatar.png'
limiter = Limiter(key_func=get_remote_address, app=app, default_limits=["20000 per day", "5000 per hour"])
# Маршрут для главной страницы
@app.route("/")
def index():
write_to_log(message="Зашли на сайт", folder=LOG_FOLDER)
update_online()
title = "Dialogia"
conn = sqlite3.connect('db.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM categories')
rows = cursor.fetchall()
categories = []
for row in rows:
category = {'id': row[0], 'name': row[1]}
cursor.execute('SELECT * FROM forums WHERE category_id=?', (row[0],))
forums_rows = cursor.fetchall()
forums = []
for forum_row in forums_rows:
forum = {'id': forum_row[0], 'name': forum_row[2]}
forums.append(forum)
category['forums'] = forums
categories.append(category)
conn.close()
return render_template("index.html", title=title, categories=categories)
# Запуск приложения
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
write_to_serverlog("Сервер запущен!", SERVER_LOG_FOLDER)
try:
# Код запуска вашего сервера
app.run(debug=True, host="127.0.0.1", port=5000)
#app.wsgi_app = WSGIMiddleware(fastapi_app ,app.wsgi_app)
except Exception as e:
write_to_serverlog(f'Ошибка при запуске сервера: {e}', SERVER_LOG_FOLDER)
finally:
write_to_serverlog('Сервер остановлен', SERVER_LOG_FOLDER)