wip: peers

This commit is contained in:
Constantin
2025-09-13 18:56:00 +03:00
parent 3e8a1bd530
commit 4f65f95ac9
6 changed files with 1634 additions and 100 deletions
+51 -14
View File
@@ -154,16 +154,16 @@ def clear_log_context(exc):
request_context.set({})
# Initialize managers with proper directories
network_manager = NetworkManager(data_dir='./data', config_dir='./config')
wireguard_manager = WireGuardManager(data_dir='./data', config_dir='./config')
peer_registry = PeerRegistry(data_dir='./data', config_dir='./config')
email_manager = EmailManager(data_dir='./data', config_dir='./config')
calendar_manager = CalendarManager(data_dir='./data', config_dir='./config')
file_manager = FileManager(data_dir='./data', config_dir='./config')
routing_manager = RoutingManager(data_dir='./data', config_dir='./config')
cell_manager = CellManager(data_dir='./data', config_dir='./config')
app.vault_manager = VaultManager(data_dir='./data', config_dir='./config')
container_manager = ContainerManager(data_dir='./data', config_dir='./config')
network_manager = NetworkManager(data_dir='/app/data', config_dir='/app/config')
wireguard_manager = WireGuardManager(data_dir='/app/data', config_dir='/app/config')
peer_registry = PeerRegistry(data_dir='/app/data', config_dir='/app/config')
email_manager = EmailManager(data_dir='/app/data', config_dir='/app/config')
calendar_manager = CalendarManager(data_dir='/app/data', config_dir='/app/config')
file_manager = FileManager(data_dir='/app/data', config_dir='/app/config')
routing_manager = RoutingManager(data_dir='/app/data', config_dir='/app/config')
cell_manager = CellManager(data_dir='/app/data', config_dir='/app/config')
app.vault_manager = VaultManager(data_dir='/app/data', config_dir='/app/config')
container_manager = ContainerManager(data_dir='/app/data', config_dir='/app/config')
# Register services with service bus
service_bus.register_service('network', network_manager)
@@ -839,12 +839,43 @@ def get_peer_config():
if data is None or 'name' not in data:
return jsonify({"error": "Missing peer name"}), 400
# For now, return not implemented - this would need to be implemented
return jsonify({"error": "Not implemented yet"}), 501
peer_name = data['name']
# Get peer from peer registry
peer = peer_registry.get_peer(peer_name)
if not peer:
return jsonify({"config": "Peer not found"})
# Get server configuration
server_config = wireguard_manager.get_server_config()
# Generate client configuration using peer registry data
config = f"""[Interface]
PrivateKey = {peer.get('private_key', 'YOUR_PRIVATE_KEY_HERE')}
Address = {peer.get('ip', '10.0.0.2')}/32
DNS = 8.8.8.8, 1.1.1.1
[Peer]
PublicKey = {server_config.get('public_key', 'SERVER_PUBLIC_KEY_PLACEHOLDER')}
Endpoint = {server_config.get('endpoint', 'YOUR_SERVER_IP:51820')}
AllowedIPs = {peer.get('allowed_ips', '0.0.0.0/0')}
PersistentKeepalive = {peer.get('persistent_keepalive', 25)}"""
return jsonify({"config": config})
except Exception as e:
logger.error(f"Error getting peer config: {e}")
return jsonify({"error": str(e)}), 500
@app.route('/api/wireguard/server-config', methods=['GET'])
def get_server_config():
try:
# Get server configuration from WireGuard manager
config = wireguard_manager.get_server_config()
return jsonify(config)
except Exception as e:
logger.error(f"Error getting server config: {e}")
return jsonify({"error": str(e)}), 500
# Peer Registry API
@app.route('/api/peers', methods=['GET'])
def get_peers():
@@ -870,11 +901,17 @@ def add_peer():
if field not in data:
return jsonify({"error": f"Missing required field: {field}"}), 400
# Add peer to registry
# Add peer to registry with all provided fields
peer_info = {
'peer': data['name'],
'ip': data['ip'],
'public_key': data['public_key']
'public_key': data['public_key'],
'private_key': data.get('private_key'),
'server_public_key': data.get('server_public_key'),
'server_endpoint': data.get('server_endpoint'),
'allowed_ips': data.get('allowed_ips'),
'persistent_keepalive': data.get('persistent_keepalive'),
'description': data.get('description')
}
success = peer_registry.add_peer(peer_info)