main: Initial private ip for api

This commit is contained in:
Nathan Woodburn 2023-08-25 12:25:23 +10:00
parent 6eef78a48f
commit f54d805371
Signed by: nathanwoodburn
GPG Key ID: 203B000478AD0EF1
2 changed files with 36 additions and 12 deletions

View File

@ -90,9 +90,14 @@ screen -dmS hnshosting-worker python3 main.py
``` ```
Add worker to master server pool: Add worker to master server pool:
The master server will need to be able to access port 5000 on the worker server over the PRIVATE ip. This is not secured by the api key so make sure you don't allow anyone else to access it.
```sh ```sh
curl -X POST http://master-server-ip:5000/add-worker?worker=worker-name&ip=worker-server-ip -H "key: api-key" curl -X POST http://master-server-ip:5000/add-worker?worker=worker-name&ip=worker-server-ip&priv=worker-server-private-ip -H "key: api-key"
```
Alternatively you can use the discord bot to add the worker to the master server pool.
```
/addworker <ip> <private ip> <name>
``` ```
## Discord bot install ## Discord bot install

View File

@ -107,9 +107,10 @@ def new_site():
def add_worker(): def add_worker():
worker=request.args.get('worker') worker=request.args.get('worker')
worker_IP=request.args.get('ip') worker_IP=request.args.get('ip')
worker_PRIV=request.args.get('priv')
# Get API header # Get API header
api_key = request.headers.get('key') api_key = request.headers.get('key')
if api_key == None or worker == None or worker_IP == None: if api_key == None or worker == None or worker_IP == None or worker_PRIV == None:
return jsonify({'error': 'Invalid API key or worker info', 'success': 'false'}) return jsonify({'error': 'Invalid API key or worker info', 'success': 'false'})
if api_key != os.getenv('WORKER_KEY'): if api_key != os.getenv('WORKER_KEY'):
return jsonify({'error': 'Invalid API key', 'success': 'false'}) return jsonify({'error': 'Invalid API key', 'success': 'false'})
@ -130,11 +131,11 @@ def add_worker():
# Add worker to file # Add worker to file
workers_file = open('/data/workers.txt', 'a') workers_file = open('/data/workers.txt', 'a')
workers_file.write(worker + ":" + worker_IP + '\n') workers_file.write(worker + ":" + worker_PRIV + ":"+ worker_IP + '\n')
workers_file.close() workers_file.close()
online=True online=True
resp=requests.get("http://"+worker_IP + ":5000/ping",timeout=2) resp=requests.get("http://"+worker_PRIV + ":5000/ping",timeout=2)
if (resp.status_code != 200): if (resp.status_code != 200):
online=False online=False
@ -174,14 +175,14 @@ def list_workers():
resp=requests.get("http://"+worker.split(':')[1].strip('\n') + ":5000/status",timeout=2) resp=requests.get("http://"+worker.split(':')[1].strip('\n') + ":5000/status",timeout=2)
if (resp.status_code != 200): if (resp.status_code != 200):
online=False online=False
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': 0, 'status': 'offline'}) worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[2].strip('\n'), 'online': online, 'sites': 0, 'status': 'offline'})
continue continue
sites = resp.json()['num_sites'] sites = resp.json()['num_sites']
availability = resp.json()['availability'] availability = resp.json()['availability']
if availability == True: if availability == True:
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': sites, 'status': 'ready'}) worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[2].strip('\n'), 'online': online, 'sites': sites, 'status': 'ready'})
else: else:
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': sites, 'status': 'full'}) worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[2].strip('\n'), 'online': online, 'sites': sites, 'status': 'full'})
if len(worker_list) == 0: if len(worker_list) == 0:
return jsonify({'error': 'No workers available', 'success': 'false'}) return jsonify({'error': 'No workers available', 'success': 'false'})
@ -203,17 +204,18 @@ def site_status():
return jsonify({'error': 'Domain does not exist', 'success': 'false'}) return jsonify({'error': 'Domain does not exist', 'success': 'false'})
# Get worker ip # Get worker ip
ip = workerIP(worker) ip = workerIP_PRIV(worker)
# Get TLSA record # Get TLSA record
resp=requests.get("http://"+ip + ":5000/tlsa?domain=" + domain,timeout=2) resp=requests.get("http://"+ip + ":5000/tlsa?domain=" + domain,timeout=2)
json = resp.json() json = resp.json()
publicIP = workerIP(worker)
if "tlsa" in json: if "tlsa" in json:
tlsa = json['tlsa'] tlsa = json['tlsa']
return jsonify({'success': 'true', 'domain': domain, 'ip': ip, 'tlsa': tlsa}) return jsonify({'success': 'true', 'domain': domain, 'ip': publicIP, 'tlsa': tlsa})
else: else:
return jsonify({'success': 'false', 'domain': domain, 'ip': ip, 'tlsa': 'none','error': 'No TLSA record found'}) return jsonify({'success': 'false', 'domain': domain, 'ip': publicIP, 'tlsa': 'none','error': 'No TLSA record found'})
@app.route('/tlsa', methods=['GET']) @app.route('/tlsa', methods=['GET'])
@ -232,7 +234,7 @@ def tlsa():
return jsonify({'error': 'Domain does not exist', 'success': 'false'}) return jsonify({'error': 'Domain does not exist', 'success': 'false'})
# Get worker ip # Get worker ip
ip = workerIP(worker) ip = workerIP_PRIV(worker)
# Get TLSA record # Get TLSA record
resp=requests.get("http://"+ip + ":5000/tlsa?domain=" + domain,timeout=2) resp=requests.get("http://"+ip + ":5000/tlsa?domain=" + domain,timeout=2)
@ -343,6 +345,24 @@ def site_worker(domain):
sites_file.close() sites_file.close()
return worker return worker
def workerIP_PRIV(worker):
# If file doesn't exist, create it
try:
workers_file = open('/data/workers.txt', 'r')
except FileNotFoundError:
workers_file = open('/data/workers.txt', 'w')
workers_file.close()
workers_file = open('/data/workers.txt', 'r')
ip = None
for line in workers_file.readlines():
if worker == line.split(':')[0]:
ip = line.split(':')[2].strip('\n')
break
workers_file.close()
return ip
def workerIP(worker): def workerIP(worker):
# If file doesn't exist, create it # If file doesn't exist, create it
try: try:
@ -362,7 +382,6 @@ def workerIP(worker):
return ip return ip
# Start the server # Start the server
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=False, port=5000, host='0.0.0.0') app.run(debug=False, port=5000, host='0.0.0.0')