|
from flask import Flask, request, render_template_string, send_from_directory, jsonify, render_template, Response |
|
from flask import render_template |
|
import sqlite3 |
|
import os |
|
import uuid |
|
import shutil |
|
import requests |
|
|
|
from datetime import datetime |
|
import pytz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from ns import send_ns |
|
api_key_sys = os.getenv('api_key_sys') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app = Flask(__name__, template_folder="./") |
|
|
|
app.config['DEBUG'] = True |
|
|
|
UPLOAD_FOLDER = 'static' |
|
HTML_FOLDER = 'html' |
|
|
|
|
|
if not os.path.exists(UPLOAD_FOLDER): |
|
os.makedirs(UPLOAD_FOLDER) |
|
|
|
if not os.path.exists(HTML_FOLDER): |
|
os.makedirs(HTML_FOLDER) |
|
|
|
|
|
|
|
|
|
@app.route('/get_current_time', methods=['GET']) |
|
def get_current_time(): |
|
utc_now = datetime.utcnow() |
|
msk_tz = pytz.timezone('Europe/Moscow') |
|
msk_now = utc_now.replace(tzinfo=pytz.utc).astimezone(msk_tz) |
|
current_time = msk_now.strftime('%Y-%m-%d %H:%M:%S') |
|
return jsonify({'current_time': current_time}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.route('/add_ns', methods=['GET']) |
|
def handle_in1(): |
|
datas = request.json |
|
name = datas.get('name') |
|
email = datas.get('email') |
|
phone = datas.get('phone') |
|
base_url = 'https://api.notisend.ru/v1' |
|
token = datas.get('token') |
|
list_id = datas.get('list_id') |
|
phone_id = datas.get('phone_id') |
|
name_id = datas.get('name_id') |
|
|
|
|
|
|
|
response_ns = send_request(base_url, token, list_id, email, phone, name, phone_id, name_id) |
|
|
|
|
|
|
|
return jsonify({'responses': [response_ns]}) |
|
|
|
def send_for_ns(*args): |
|
|
|
|
|
return {'status': 'success', 'message': 'Request sent successfully'} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.route('/upload', methods=['POST']) |
|
def upload_file(): |
|
if 'file' not in request.files: |
|
return "No file part", 400 |
|
file = request.files['file'] |
|
if file.filename == '': |
|
return "No selected file", 400 |
|
|
|
|
|
unique_filename = str(uuid.uuid4()) + os.path.splitext(file.filename)[1] |
|
save_path = os.path.join(UPLOAD_FOLDER, unique_filename) |
|
file.save(save_path) |
|
|
|
|
|
full_url = request.url_root.replace('http://', 'https://') + 'uploads/' + unique_filename |
|
return f"File uploaded successfully and saved to {full_url}", 200 |
|
|
|
|
|
|
|
|
|
@app.route('/uploads/<filename>', methods=['GET']) |
|
def uploaded_file(filename): |
|
return send_from_directory(UPLOAD_FOLDER, filename) |
|
|
|
|
|
|
|
|
|
|
|
@app.route('/up_fa', methods=['GET']) |
|
def up_fa(): |
|
return render_template('up_fa.html') |
|
|
|
|
|
@app.route('/ns_info', methods=['GET']) |
|
def ns_info(): |
|
return render_template('ns_info.html') |
|
|
|
@app.route('/api/group/<int:group_id>/parameters', methods=['GET']) |
|
def get_group_parameters(group_id): |
|
api_token = request.args.get('apiToken') |
|
|
|
if not api_token: |
|
return jsonify({'error': 'API Token is required'}), 400 |
|
|
|
url = f'https://api.notisend.ru/v1/email/lists/{group_id}/parameters' |
|
headers = { |
|
'Content-Type': 'application/json', |
|
'Authorization': f'Bearer {api_token}' |
|
} |
|
|
|
try: |
|
response = requests.get(url, headers=headers) |
|
response.raise_for_status() |
|
data = response.json() |
|
return jsonify(data) |
|
except requests.RequestException as e: |
|
return jsonify({'error': str(e)}), 500 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.route('/up_page', methods=['POST']) |
|
def upload_page(): |
|
if 'file' not in request.files: |
|
return "No file part", 400 |
|
file = request.files['file'] |
|
if file.filename == '': |
|
return "No selected file", 400 |
|
|
|
filename = request.form.get('filename') |
|
if not filename: |
|
return "Filename is required", 400 |
|
|
|
save_path = os.path.join(HTML_FOLDER, filename + '.html') |
|
file.save(save_path) |
|
|
|
|
|
full_url = request.url_root.replace('http://', 'https://') + filename |
|
return f"Page uploaded successfully and saved to {full_url}", 200 |
|
|
|
@app.route('/<path:filename>', methods=['GET']) |
|
def serve_html(filename): |
|
if not filename.endswith('.html'): |
|
filename += '.html' |
|
return send_from_directory(HTML_FOLDER, filename) |
|
|
|
@app.route('/up_page', methods=['GET']) |
|
def up_page(): |
|
return render_template('up_page.html') |
|
|
|
@app.route('/monitor', methods=['GET']) |
|
def monitor(): |
|
|
|
files = os.listdir(UPLOAD_FOLDER) |
|
html_files = os.listdir(HTML_FOLDER) |
|
|
|
|
|
total, used, free = shutil.disk_usage("/") |
|
|
|
|
|
total_gb = total // (2**30) |
|
used_gb = used // (2**30) |
|
free_gb = free // (2**30) |
|
|
|
return render_template('monitor.html', |
|
uploaded_files=files, |
|
uploaded_html_files=html_files, |
|
disk_space={ |
|
'total': f"{total_gb} GB", |
|
'used': f"{used_gb} GB", |
|
'free': f"{free_gb} GB" |
|
}) |
|
|
|
if __name__ == '__main__': |
|
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860))) |