|
from flask import Flask, request, jsonify |
|
import random |
|
import string |
|
from threading import Lock |
|
|
|
app = Flask(__name__) |
|
lock = Lock() |
|
transfers = {} |
|
|
|
def generate_id(): |
|
return ''.join(random.choices(string.ascii_letters + string.digits, k=8)) |
|
|
|
@app.route('/create_transfer', methods=['POST']) |
|
def create_transfer(): |
|
with lock: |
|
transfer_id = generate_id() |
|
transfers[transfer_id] = { |
|
'sender': None, |
|
'receiver': None, |
|
'filename': request.json['filename'], |
|
'filesize': request.json['filesize'] |
|
} |
|
return jsonify({'transfer_id': transfer_id}) |
|
|
|
@app.route('/register_sender/<transfer_id>', methods=['POST']) |
|
def register_sender(transfer_id): |
|
with lock: |
|
transfers[transfer_id]['sender'] = { |
|
'ip': request.remote_addr, |
|
'port': request.json['port'] |
|
} |
|
return jsonify({'status': 'sender registered'}) |
|
|
|
@app.route('/register_receiver/<transfer_id>', methods=['POST']) |
|
def register_receiver(transfer_id): |
|
with lock: |
|
transfers[transfer_id]['receiver'] = { |
|
'ip': request.remote_addr, |
|
'port': request.json['port'] |
|
} |
|
return jsonify({'status': 'receiver registered'}) |
|
|
|
@app.route('/get_peer_info/<transfer_id>') |
|
def get_peer_info(transfer_id): |
|
return jsonify({ |
|
'sender': transfers.get(transfer_id, {}).get('sender'), |
|
'receiver': transfers.get(transfer_id, {}).get('receiver') |
|
}) |
|
|
|
if __name__ == '__main__': |
|
app.run(host='0.0.0.0', port=5000) |