Merge branch 'develop' into main

This commit is contained in:
Nathan Woodburn 2023-08-25 15:54:41 +10:00
commit cd598cce47
Signed by: nathanwoodburn
GPG Key ID: 203B000478AD0EF1
3 changed files with 40 additions and 8 deletions

View File

@ -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) | | Red Connections | Secured by VPN or over LAN ONLY. (NOT API SECURED) |
| Yellow Connections | HTTP/HTTPS public traffic | | 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 ## Usage
@ -105,4 +109,10 @@ Alternatively you can use the discord bot to add the worker to the master server
Docker install Docker install
```sh ```sh
docker run -d -e MASTER_IP=<MASTER SERVER IP> -e DISCORD_TOKEN=<YOUR-BOT-TOKEN> -e LICENCE_KEY=your-api-key -e WORKER_KEY=your-api-key --name hnshosting-bot git.woodburn.au/nathanwoodburn/hnshosting-bot:latest docker run -d -e MASTER_IP=<MASTER SERVER IP> -e DISCORD_TOKEN=<YOUR-BOT-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
``` ```

View File

@ -13,9 +13,14 @@ Master_Port = os.getenv('MASTER_PORT')
if Master_Port == None: if Master_Port == None:
Master_Port = "5000" Master_Port = "5000"
FREE_LICENCE = os.getenv('FREE_LICENCE') FREE_LICENCE = os.getenv('FREE_MODE')
if FREE_LICENCE == None: if FREE_LICENCE == None:
FREE_LICENCE = False FREE_LICENCE = False
else:
if FREE_LICENCE.lower() == "true":
FREE_LICENCE = True
else:
FREE_LICENCE = False
intents = discord.Intents.default() intents = discord.Intents.default()
client = discord.Client(intents=intents) client = discord.Client(intents=intents)
@ -50,9 +55,8 @@ async def listworkers(ctx):
@tree.command(name="licence", description="Gets a licence key") @tree.command(name="licence", description="Gets a licence key")
async def license(ctx): async def license(ctx):
if ctx.user.id != ADMINID: 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)
await ctx.response.send_message("You do not have permission to use this command",ephemeral=True) return
return
r = requests.post(f"http://{Master_IP}:{Master_Port}/add-licence",headers={"key":os.getenv('LICENCE_KEY')}) r = requests.post(f"http://{Master_IP}:{Master_Port}/add-licence",headers={"key":os.getenv('LICENCE_KEY')})
if r.status_code == 200: 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) await ctx.response.send_message(f"Error getting license\n" + r.text,ephemeral=True)
@tree.command(name="createsite", description="Create a new WordPress site") @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}) r = requests.post(f"http://{Master_IP}:{Master_Port}/new-site?domain={domain}",headers={"key":licence})
if r.status_code == 200: if r.status_code == 200:
json = r.json() json = r.json()

View File

@ -37,14 +37,22 @@ def new_site():
# Verify both API key and domain exist # Verify both API key and domain exist
if api_key == None: if api_key == None:
return jsonify({'error': 'Missing API key', 'success': 'false'}) return jsonify({'error': 'No licence provided', 'success': 'false'})
if domain == None: if domain == None:
return jsonify({'error': 'Missing domain', 'success': 'false'}) return jsonify({'error': 'Missing domain', 'success': 'false'})
# Check if API key is a valid site key # Check if API key is a valid site key
if api_key not in open('/data/licence_key.txt', 'r').read(): key_file = open('/data/licence_key.txt', 'r')
return jsonify({'error': 'Invalid API key', 'success': 'false'}) 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 # Check if domain already exists
if site_exists(domain): if site_exists(domain):