57 lines
No EOL
1.3 KiB
Python
57 lines
No EOL
1.3 KiB
Python
import json
|
|
import os
|
|
|
|
PORTS_FILE = 'ports.json'
|
|
BASE_PORT = 25500
|
|
PORTS_PER_USER = 3
|
|
MAX_PORTS = 100
|
|
|
|
|
|
def load_ports():
|
|
if not os.path.exists(PORTS_FILE):
|
|
with open(PORTS_FILE, 'w') as f:
|
|
json.dump({}, f)
|
|
with open(PORTS_FILE, 'r') as f:
|
|
return json.load(f)
|
|
|
|
|
|
def save_ports(ports):
|
|
with open(PORTS_FILE, 'w') as f:
|
|
json.dump(ports, f, indent=2)
|
|
|
|
|
|
def assign_ports(username):
|
|
ports = load_ports()
|
|
if username in ports:
|
|
return ports[username]
|
|
|
|
used = {p for group in ports.values() for p in group}
|
|
for i in range(0, MAX_PORTS * PORTS_PER_USER, PORTS_PER_USER):
|
|
trial = [BASE_PORT + i + j for j in range(PORTS_PER_USER)]
|
|
if not any(p in used for p in trial):
|
|
ports[username] = trial
|
|
save_ports(ports)
|
|
return trial
|
|
|
|
raise Exception("Brak dostępnych portów")
|
|
|
|
|
|
def free_ports_for_user(username):
|
|
if not os.path.exists(PORTS_FILE):
|
|
return
|
|
|
|
with open(PORTS_FILE, "r") as f:
|
|
data = json.load(f)
|
|
|
|
container_name = f"mc-{username}"
|
|
if container_name in data:
|
|
del data[container_name]
|
|
with open(PORTS_FILE, "w") as f:
|
|
json.dump(data, f, indent=2)
|
|
|
|
def get_user_ports(username):
|
|
ports = load_ports()
|
|
if username in ports:
|
|
return ports[username]
|
|
|
|
return None |