diff --git a/README.md b/README.md index 3245bc4..6957d02 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,10 @@ The bot will be used to provide an easier way to manage the master server. | Red Connections | Secured by VPN or over LAN ONLY. (NOT API SECURED) | | Yellow Connections | HTTP/HTTPS public traffic | +## Features +- [x] Add new worker server to master server pool +- [x] Create wordpress site on random worker server +- [x] Optional Free mode (see Bot section) ## Usage @@ -105,4 +109,10 @@ Alternatively you can use the discord bot to add the worker to the master server Docker install ```sh docker run -d -e MASTER_IP= -e DISCORD_TOKEN= -e LICENCE_KEY=your-api-key -e WORKER_KEY=your-api-key --name hnshosting-bot git.woodburn.au/nathanwoodburn/hnshosting-bot:latest +``` + +Enable the free mode by setting the following environment variable. +This will allow you to create a wordpress site without using a licence key using the /createsite command. +``` +FREE_MODE: true ``` \ No newline at end of file diff --git a/discord-bot/bot.py b/discord-bot/bot.py index 0450dbc..e0da690 100644 --- a/discord-bot/bot.py +++ b/discord-bot/bot.py @@ -13,9 +13,14 @@ Master_Port = os.getenv('MASTER_PORT') if Master_Port == None: Master_Port = "5000" -FREE_LICENCE = os.getenv('FREE_LICENCE') +FREE_LICENCE = os.getenv('FREE_MODE') if FREE_LICENCE == None: FREE_LICENCE = False +else: + if FREE_LICENCE.lower() == "true": + FREE_LICENCE = True + else: + FREE_LICENCE = False intents = discord.Intents.default() client = discord.Client(intents=intents) @@ -50,9 +55,8 @@ async def listworkers(ctx): @tree.command(name="licence", description="Gets a licence key") async def license(ctx): if ctx.user.id != ADMINID: - if FREE_LICENCE == False: # If free licences are enabled then anyone can get a licence - await ctx.response.send_message("You do not have permission to use this command",ephemeral=True) - return + await ctx.response.send_message("You do not have permission to use this command",ephemeral=True) + return r = requests.post(f"http://{Master_IP}:{Master_Port}/add-licence",headers={"key":os.getenv('LICENCE_KEY')}) if r.status_code == 200: @@ -65,7 +69,17 @@ async def license(ctx): await ctx.response.send_message(f"Error getting license\n" + r.text,ephemeral=True) @tree.command(name="createsite", description="Create a new WordPress site") -async def createsite(ctx, domain: str, licence: str): +async def createsite(ctx, domain: str, licence: str = None): + if FREE_LICENCE == True: # If free licences are enabled then auto generate a licence + r = requests.post(f"http://{Master_IP}:{Master_Port}/add-licence",headers={"key":os.getenv('LICENCE_KEY')}) + if r.status_code == 200: + json = r.json() + if json['success'] == "true": + licence = json['licence_key'] + else: + await ctx.response.send_message(f"Error getting license\n" + json['error']) + return + r = requests.post(f"http://{Master_IP}:{Master_Port}/new-site?domain={domain}",headers={"key":licence}) if r.status_code == 200: json = r.json() diff --git a/master/main.py b/master/main.py index dd5037d..45ffc35 100644 --- a/master/main.py +++ b/master/main.py @@ -37,14 +37,22 @@ def new_site(): # Verify both API key and domain exist if api_key == None: - return jsonify({'error': 'Missing API key', 'success': 'false'}) + return jsonify({'error': 'No licence provided', 'success': 'false'}) if domain == None: return jsonify({'error': 'Missing domain', 'success': 'false'}) # Check if API key is a valid site key - if api_key not in open('/data/licence_key.txt', 'r').read(): - return jsonify({'error': 'Invalid API key', 'success': 'false'}) + key_file = open('/data/licence_key.txt', 'r') + valid_key = False + for line in key_file.readlines(): + if api_key == line.strip('\n'): + valid_key = True + break + key_file.close() + if not valid_key: + return jsonify({'error': 'Invalid licence', 'success': 'false'}) + # Check if domain already exists if site_exists(domain):