Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -936,106 +936,47 @@ def handle_calculation():
|
|
| 936 |
|
| 937 |
# Глобальные переменные
|
| 938 |
messages = []
|
| 939 |
-
users = {}
|
| 940 |
-
|
| 941 |
-
# Шифрование (используем пароль для генерации ключа)
|
| 942 |
-
SECRET_PASSWORD = "my_secret_chat_password" # Можете вдвоём придумать свой
|
| 943 |
-
|
| 944 |
-
def get_cipher():
|
| 945 |
-
"""Генерируем ключ шифрования на основе пароля"""
|
| 946 |
-
password = SECRET_PASSWORD.encode()
|
| 947 |
-
salt = b"fixed_salt_for_chat" # Можно сделать уникальным для каждой сессии
|
| 948 |
-
kdf = PBKDF2HMAC(
|
| 949 |
-
algorithm=hashes.SHA256(),
|
| 950 |
-
length=32,
|
| 951 |
-
salt=salt,
|
| 952 |
-
iterations=100000,
|
| 953 |
-
)
|
| 954 |
-
key = base64.urlsafe_b64encode(kdf.derive(password))
|
| 955 |
-
return Fernet(key)
|
| 956 |
-
|
| 957 |
-
def encrypt_message(text):
|
| 958 |
-
"""Шифруем сообщение"""
|
| 959 |
-
cipher = get_cipher()
|
| 960 |
-
encrypted_text = cipher.encrypt(text.encode())
|
| 961 |
-
return encrypted_text.decode()
|
| 962 |
-
|
| 963 |
-
def decrypt_message(encrypted_text):
|
| 964 |
-
"""Расшифровываем сообщение"""
|
| 965 |
-
try:
|
| 966 |
-
cipher = get_cipher()
|
| 967 |
-
decrypted_text = cipher.decrypt(encrypted_text.encode())
|
| 968 |
-
return decrypted_text.decode()
|
| 969 |
-
except Exception:
|
| 970 |
-
return "[не удалось расшифровать]"
|
| 971 |
-
|
| 972 |
-
|
| 973 |
|
| 974 |
@app.route('/chat')
|
| 975 |
-
def
|
| 976 |
user_id = str(uuid.uuid4())[:8]
|
| 977 |
-
users[user_id] = {
|
| 978 |
-
'joined': datetime.now().strftime("%H:%M:%S")
|
| 979 |
-
}
|
| 980 |
return render_template('chat.html', user_id=user_id)
|
| 981 |
|
| 982 |
@app.route('/send_message', methods=['POST'])
|
| 983 |
def send_message():
|
| 984 |
data = request.json
|
| 985 |
-
user_id = data.get('user_id', '
|
| 986 |
-
|
| 987 |
-
|
| 988 |
-
|
| 989 |
-
|
| 990 |
-
|
| 991 |
-
|
| 992 |
-
|
| 993 |
-
|
| 994 |
-
|
| 995 |
-
|
| 996 |
-
|
| 997 |
-
|
| 998 |
-
|
| 999 |
-
messages.
|
| 1000 |
-
|
| 1001 |
-
if len(messages) > 100:
|
| 1002 |
-
messages.pop(0)
|
| 1003 |
-
|
| 1004 |
-
return jsonify({'status': 'success'})
|
| 1005 |
-
|
| 1006 |
-
return jsonify({'status': 'error', 'message': 'Empty message'})
|
| 1007 |
|
| 1008 |
@app.route('/get_messages')
|
| 1009 |
def get_messages():
|
| 1010 |
-
|
| 1011 |
-
decrypted_messages = []
|
| 1012 |
-
for msg in messages:
|
| 1013 |
-
decrypted_msg = msg.copy()
|
| 1014 |
-
decrypted_msg['text'] = decrypt_message(msg['encrypted_text'])
|
| 1015 |
-
decrypted_messages.append(decrypted_msg)
|
| 1016 |
-
|
| 1017 |
-
return jsonify({'messages': decrypted_messages})
|
| 1018 |
|
| 1019 |
@app.route('/get_new_messages')
|
| 1020 |
def get_new_messages():
|
| 1021 |
last_id = request.args.get('last_id', 0, type=int)
|
| 1022 |
-
new_messages = [
|
| 1023 |
-
|
| 1024 |
-
# Расшифровываем новые сообщения
|
| 1025 |
-
decrypted_messages = []
|
| 1026 |
-
for msg in new_messages:
|
| 1027 |
-
decrypted_msg = msg.copy()
|
| 1028 |
-
decrypted_msg['text'] = decrypt_message(msg['encrypted_text'])
|
| 1029 |
-
decrypted_messages.append(decrypted_msg)
|
| 1030 |
-
|
| 1031 |
-
return jsonify({'messages': decrypted_messages})
|
| 1032 |
|
| 1033 |
@app.route('/clear_chat', methods=['POST'])
|
| 1034 |
def clear_chat():
|
| 1035 |
-
"""Очистка всех сообщений"""
|
| 1036 |
global messages
|
| 1037 |
messages.clear()
|
| 1038 |
-
return jsonify({'status': 'success', 'message': '
|
| 1039 |
|
| 1040 |
|
| 1041 |
|
|
|
|
| 936 |
|
| 937 |
# Глобальные переменные
|
| 938 |
messages = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 939 |
|
| 940 |
@app.route('/chat')
|
| 941 |
+
def chat_page():
|
| 942 |
user_id = str(uuid.uuid4())[:8]
|
|
|
|
|
|
|
|
|
|
| 943 |
return render_template('chat.html', user_id=user_id)
|
| 944 |
|
| 945 |
@app.route('/send_message', methods=['POST'])
|
| 946 |
def send_message():
|
| 947 |
data = request.json
|
| 948 |
+
user_id = data.get('user_id', 'anon')
|
| 949 |
+
encrypted_text = data.get('encrypted_text', '')
|
| 950 |
+
if not encrypted_text:
|
| 951 |
+
return jsonify({'status': 'error', 'message': 'Empty encrypted message'})
|
| 952 |
+
|
| 953 |
+
message = {
|
| 954 |
+
'id': len(messages) + 1,
|
| 955 |
+
'user_id': user_id,
|
| 956 |
+
'encrypted_text': encrypted_text,
|
| 957 |
+
'timestamp': datetime.now().strftime("%H:%M:%S"),
|
| 958 |
+
'username': f"User_{user_id}"
|
| 959 |
+
}
|
| 960 |
+
messages.append(message)
|
| 961 |
+
if len(messages) > 200:
|
| 962 |
+
messages.pop(0)
|
| 963 |
+
return jsonify({'status': 'success'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 964 |
|
| 965 |
@app.route('/get_messages')
|
| 966 |
def get_messages():
|
| 967 |
+
return jsonify({'messages': messages})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 968 |
|
| 969 |
@app.route('/get_new_messages')
|
| 970 |
def get_new_messages():
|
| 971 |
last_id = request.args.get('last_id', 0, type=int)
|
| 972 |
+
new_messages = [m for m in messages if m['id'] > last_id]
|
| 973 |
+
return jsonify({'messages': new_messages})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 974 |
|
| 975 |
@app.route('/clear_chat', methods=['POST'])
|
| 976 |
def clear_chat():
|
|
|
|
| 977 |
global messages
|
| 978 |
messages.clear()
|
| 979 |
+
return jsonify({'status': 'success', 'message': 'Chat cleared'})
|
| 980 |
|
| 981 |
|
| 982 |
|