hnshosting-wp/worker/main.py

97 lines
2.4 KiB
Python
Raw Permalink Normal View History

2023-08-16 13:48:11 +10:00
# API server
from flask import Flask, request, jsonify
import dotenv
import os
import threading
2023-08-16 13:48:11 +10:00
dotenv.load_dotenv()
app = Flask(__name__)
# API route for POST requests for new-site (takes variable 'domain')
@app.route('/new-site', methods=['POST'])
def new_site():
# Get the URL from the request
domain = request.args.get('domain')
count = get_sites_count()
if site_exists(domain):
return jsonify({'error': 'Site already exists', 'success': 'false'})
# Add site to file
sites_file = open('sites.txt', 'a')
sites_file.write(domain + '\n')
2023-08-17 13:12:51 +10:00
sites_file.close()
2023-08-16 13:48:11 +10:00
2023-08-17 13:27:57 +10:00
# New site in background
2023-08-24 18:29:08 +10:00
thread = threading.Thread(target=new_site_script, args=(domain,))
thread.start()
2023-08-17 13:10:12 +10:00
2023-08-16 13:48:11 +10:00
# Return the domain and the number of sites
return jsonify({'domain': domain, 'count': count})
2023-08-17 13:27:57 +10:00
@app.route('/tlsa', methods=['GET'])
def tlsa():
domain = request.args.get('domain')
if domain == None:
return jsonify({'error': 'Invalid domain', 'success': 'false'})
2023-08-17 13:48:08 +10:00
tlsa = None
try:
tlsa_file = open('wordpress-'+domain+'/tlsa.txt', 'r')
tlsa = tlsa_file.readlines()
tlsa_file.close()
2023-09-20 22:21:00 +10:00
except FileNotFoundError as e:
return jsonify({'error': 'TLSA record not found', 'success': 'false', 'ex': str(e)})
2023-08-17 13:27:57 +10:00
2023-08-17 13:52:23 +10:00
# Remove newlines
2023-08-17 13:53:30 +10:00
tlsa = tlsa[0].strip('\n')
2023-08-17 13:27:57 +10:00
return jsonify({'domain': domain, 'tlsa': tlsa})
2023-08-16 16:59:57 +10:00
# Return status
@app.route('/status', methods=['GET'])
def status():
num_Sites = get_sites_count()
availability=(num_Sites < int(os.getenv('MAX_SITES')))
return jsonify({'availability': availability, 'num_sites': num_Sites})
# Ping status
@app.route('/ping')
def ping():
return 'pong'
2023-08-16 13:48:11 +10:00
def get_sites_count():
2023-08-25 11:56:06 +10:00
# Get number of files in nginx/sites
dir = os.listdir('/etc/nginx/sites-available')
num_Sites = len(dir) - 1
2023-08-16 13:48:11 +10:00
# Return number of lines in file
2023-08-25 11:56:06 +10:00
return num_Sites
2023-08-16 13:48:11 +10:00
def site_exists(domain):
# If file doesn't exist, create it
try:
sites_file = open('sites.txt', 'r')
except FileNotFoundError:
sites_file = open('sites.txt', 'w')
sites_file.close()
sites_file = open('sites.txt', 'r')
# Check if domain is in file
if domain in sites_file.read():
return True
else:
return False
2023-08-17 13:27:57 +10:00
2023-08-24 18:29:08 +10:00
def new_site_script(domain):
2023-08-24 18:15:01 +10:00
script = 'bash wp.sh ' + domain
2023-08-17 13:27:57 +10:00
os.system(script)
2023-08-16 13:48:11 +10:00
# Start the server
if __name__ == '__main__':
2023-08-16 17:05:15 +10:00
app.run(debug=False, port=5000,host='0.0.0.0')