Starchik1 commited on
Commit
07d1566
·
verified ·
1 Parent(s): 5a094ab

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +45 -58
main.py CHANGED
@@ -1,66 +1,53 @@
1
- from flask import Flask, render_template, request, jsonify
2
- from flask_socketio import SocketIO, emit
3
  import uuid
4
 
5
  app = Flask(__name__)
6
- app.config['SECRET_KEY'] = 'secret!'
7
- socketio = SocketIO(app)
8
 
9
- # Словарь для хранения соответствия токена и идентификатора сессии (socket id)
10
- clients = {} # {token: sid}
 
11
 
12
- @app.route('/')
13
- def index():
14
- # Главная страница с базовой информацией
15
- return render_template('index.html')
16
-
17
- @app.route('/register')
18
  def register():
19
- # Генерация уникального токена для нового пользователя
20
- token = str(uuid.uuid4())
21
- # Изначально сессия не установлена
22
- clients[token] = None
23
- return render_template('register.html', token=token)
24
-
25
- @app.route('/file/<token>')
26
- def file_info(token):
27
- """
28
- Эндпоинт для проверки статуса клиента по токену.
29
- Если клиент (отправитель) онлайн – возвращается статус "ready",
30
- иначе – "offline".
31
- """
32
- if token in clients and clients[token] is not None:
33
- return jsonify({"status": "ready"})
34
- return jsonify({"status": "offline"})
35
-
36
- @socketio.on('register')
37
- def handle_register(data):
38
- """
39
- При подключении через WebSocket клиент отправляет свой токен.
40
- Здесь мы сохраняем привязку токена к session id.
41
- """
42
- token = data.get('token')
43
- if token:
44
- clients[token] = request.sid
45
- emit('registered', {'message': f'Токен {token} успешно зарегистрирован.'})
46
- else:
47
- emit('error', {'message': 'Токен отсутствует.'})
48
-
49
- @socketio.on('signal')
50
- def handle_signal(data):
51
- """
52
- Обработка сигналов для установления P2P-соединения.
53
- Клиент передаёт объект с полями:
54
- - target: токен целевого клиента
55
- - signal: сигнальные данные (например, offer/answer ICE)
56
- Сервер пересылает сигнал нужному клиенту по session id.
57
- """
58
- target = data.get('target')
59
- signal_data = data.get('signal')
60
- if target in clients and clients[target]:
61
- socketio.emit('signal', {'signal': signal_data, 'from': request.sid}, room=clients[target])
62
- else:
63
- emit('error', {'message': 'Целевой клиент не доступен.'})
64
 
65
  if __name__ == '__main__':
66
- socketio.run(app, debug=True)
 
 
1
+ from flask import Flask, request, jsonify
 
2
  import uuid
3
 
4
  app = Flask(__name__)
 
 
5
 
6
+ # В памяти храним зарегистрированных пользователей и сессии передачи файлов
7
+ users = {}
8
+ transfers = {}
9
 
10
+ @app.route('/register', methods=['POST'])
 
 
 
 
 
11
  def register():
12
+ data = request.json
13
+ username = data.get('username')
14
+ password = data.get('password')
15
+ if not username or not password:
16
+ return jsonify({'error': 'Не переданы обязательные поля'}), 400
17
+ if username in users:
18
+ return jsonify({'error': 'Пользователь уже существует'}), 400
19
+ users[username] = {'password': password}
20
+ return jsonify({'message': 'Регистрация прошла успешно'})
21
+
22
+ @app.route('/create_transfer', methods=['POST'])
23
+ def create_transfer():
24
+ data = request.json
25
+ filename = data.get('filename')
26
+ ip = data.get('ip')
27
+ port = data.get('port')
28
+ filesize = data.get('filesize', 0)
29
+ if not filename or not ip or not port:
30
+ return jsonify({'error': 'Отсутствуют необходимые параметры'}), 400
31
+
32
+ transfer_id = str(uuid.uuid4())
33
+ transfers[transfer_id] = {
34
+ 'filename': filename,
35
+ 'ip': ip,
36
+ 'port': port,
37
+ 'filesize': filesize,
38
+ 'downloaded': False
39
+ }
40
+ # Формируем ссылку для скачивания. request.host_url учитывает адрес сервера.
41
+ download_link = request.host_url + 'download/' + transfer_id
42
+ return jsonify({'download_link': download_link})
43
+
44
+ @app.route('/download/<transfer_id>', methods=['GET'])
45
+ def get_transfer(transfer_id):
46
+ transfer = transfers.get(transfer_id)
47
+ if not transfer:
48
+ return jsonify({'error': 'Неверный идентификатор передачи'}), 404
49
+ return jsonify(transfer)
 
 
 
 
 
 
 
50
 
51
  if __name__ == '__main__':
52
+ # Запускаем сервер на всех интерфейсах на порту 5000
53
+ app.run(host='0.0.0.0', port=5000)