Compare commits

..

21 Commits

Author SHA1 Message Date
afd5286ef5
Merge branch 'develop' into main
All checks were successful
Build Docker / Build Master (push) Successful in 22s
Build Docker / Build Bot (push) Successful in 20s
2023-08-24 18:15:16 +10:00
bc1b27a504
worker: Fixed ports
All checks were successful
Build Docker / Build Bot (push) Successful in 23s
Build Docker / Build Master (push) Successful in 25s
2023-08-24 18:15:01 +10:00
d005c5796e
actions: Fix errors from feature branches
All checks were successful
Build Docker / Build Master (push) Successful in 27s
Build Docker / Build Bot (push) Successful in 24s
2023-08-24 17:43:02 +10:00
b2f731ce8d
actions: Apply fix to bot
All checks were successful
Build Docker / Build Master (push) Successful in 23s
Build Docker / Build Bot (push) Successful in 22s
2023-08-24 17:39:44 +10:00
62770ff0ec
actions: syntax error try 3
Some checks failed
Build Docker / Build Master (push) Successful in 21s
Build Docker / Build Bot (push) Failing after 19s
2023-08-24 17:38:29 +10:00
b0ab46562f
actions: Syntax error fix
Some checks failed
Build Docker / Build Bot (push) Failing after 19s
Build Docker / Build Master (push) Failing after 21s
2023-08-24 17:36:16 +10:00
46096f0e84
actions: Fixed typo
Some checks failed
Build Docker / Build Master (push) Failing after 20s
Build Docker / Build Bot (push) Failing after 19s
2023-08-24 17:33:58 +10:00
166e223429
actions: Fixed tags
Some checks failed
Build Docker / Build Bot (push) Failing after 22s
Build Docker / Build Master (push) Failing after 23s
2023-08-24 17:31:40 +10:00
bc3f813b29
actions: Added dev build
All checks were successful
Build Docker / Build Master (push) Successful in 28s
Build Docker / Build Bot (push) Successful in 29s
2023-08-24 17:23:23 +10:00
aa11014ab9
actions: Start adding a dev build
All checks were successful
Build Docker / Build Master (push) Successful in 25s
Build Docker / Build Bot (push) Successful in 24s
2023-08-24 17:20:35 +10:00
fc8a0c3193
main: Cleaned up code 2023-08-24 17:18:24 +10:00
38526d5e08
Merge branch 'feature/stripe' into develop
All checks were successful
Build Docker / Build Bot (push) Successful in 24s
Build Docker / Build Master (push) Successful in 24s
2023-08-24 17:14:37 +10:00
2209e03158
main: Email test 3
All checks were successful
Build Docker / Build Bot (push) Successful in 21s
Build Docker / Build Master (push) Successful in 25s
2023-08-24 17:11:42 +10:00
cb849004b7
main: Added info to email
All checks were successful
Build Docker / Build Bot (push) Successful in 21s
Build Docker / Build Master (push) Successful in 25s
2023-08-24 17:05:01 +10:00
93333eed26
main: Cleaned up email
All checks were successful
Build Docker / Build Bot (push) Successful in 24s
Build Docker / Build Master (push) Successful in 24s
2023-08-24 16:57:05 +10:00
eb137b85d3
main: Added email test for stripe
All checks were successful
Build Docker / Build Bot (push) Successful in 24s
Build Docker / Build Master (push) Successful in 25s
2023-08-24 16:53:39 +10:00
969e5e17a5
main: Import stripe python module
All checks were successful
Build Docker / Build Master (push) Successful in 26s
Build Docker / Build Bot (push) Successful in 25s
2023-08-24 16:44:17 +10:00
230dc2a12a
main: Added test stripe verification
All checks were successful
Build Docker / Build Bot (push) Successful in 20s
Build Docker / Build Master (push) Successful in 32s
2023-08-24 16:41:38 +10:00
d4fd470564
main: Stripe log all requests
All checks were successful
Build Docker / Build Master (push) Successful in 26s
Build Docker / Build Bot (push) Successful in 24s
2023-08-24 16:25:55 +10:00
5f56c1d0c2
main: Initial stripe test fix path
All checks were successful
Build Docker / Build Bot (push) Successful in 19s
Build Docker / Build Master (push) Successful in 25s
2023-08-24 16:17:27 +10:00
937620e86c
main: Initial stripe test
All checks were successful
Build Docker / Build Bot (push) Successful in 22s
Build Docker / Build Master (push) Successful in 26s
2023-08-24 16:13:24 +10:00
6 changed files with 111 additions and 22 deletions

View File

@ -22,11 +22,25 @@ jobs:
cd master cd master
echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin
tag_num=$(git rev-parse --short HEAD) tag_num=$(git rev-parse --short HEAD)
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
tag=${tag//\//-}
if [ tag = "main" ]; then
tag="latest"
else
tag_num="${tag}-${tag_num}"
fi
docker build -t hnshosting-master:$tag_num . docker build -t hnshosting-master:$tag_num .
docker tag hnshosting-master:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-master:$tag_num docker tag hnshosting-master:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-master:$tag_num
docker push git.woodburn.au/nathanwoodburn/hnshosting-master:$tag_num docker push git.woodburn.au/nathanwoodburn/hnshosting-master:$tag_num
docker tag hnshosting-master:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-master:latest docker tag hnshosting-master:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-master:$tag
docker push git.woodburn.au/nathanwoodburn/hnshosting-master:latest docker push git.woodburn.au/nathanwoodburn/hnshosting-master:$tag
Build Bot: Build Bot:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -47,8 +61,18 @@ jobs:
cd discord-bot cd discord-bot
echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin
tag_num=$(git rev-parse --short HEAD) tag_num=$(git rev-parse --short HEAD)
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
tag=${tag//\//-}
if [ tag = "main" ]; then
tag="latest"
else
tag_num="${tag}-${tag_num}"
fi
docker build -t hnshosting-bot:$tag_num . docker build -t hnshosting-bot:$tag_num .
docker tag hnshosting-bot:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag_num docker tag hnshosting-bot:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag_num
docker push git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag_num docker push git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag_num
docker tag hnshosting-bot:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-bot:latest docker tag hnshosting-bot:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag
docker push git.woodburn.au/nathanwoodburn/hnshosting-bot:latest docker push git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag

View File

@ -50,6 +50,19 @@ Then to start the master api server
screen -dmS hnshosting-master python3 main.py screen -dmS hnshosting-master python3 main.py
``` ```
## Stripe webhook
Create a new webhook endpoint on stripe and set the url to https://master-server-domain:5000/stripe-webhook (note: you need to add a https proxy to your master server if you want to use stripe)
Add these environment variables to your master server
```yaml
STRIPE_SECRET: your-stripe-secret-key
STRIPE_ENDPOINT_SECRET: your-stripe-endpoint-secret
SMTP_HOST: smtp-server
SMTP_PORT: smtp-port
SMTP_USER: smtp-user
SMTP_PASS: smtp-pass
SMTP_FROM: smtp-from (eg. HNSHosting <hosting@nathan.woodburn.au>) This is optional
```
## Worker server install ## Worker server install

View File

@ -2,6 +2,8 @@ from flask import Flask, request, jsonify
import dotenv import dotenv
import os import os
import requests import requests
import stripe # For stripe payments
import smtplib, ssl # For sending emails
dotenv.load_dotenv() dotenv.load_dotenv()
@ -232,6 +234,60 @@ def tlsa():
return resp.json() return resp.json()
@app.route('/stripe', methods=['POST'])
def stripeapi():
payload = request.data
stripe.api_key = os.getenv('STRIPE_SECRET')
endpoint_secret = os.getenv('STRIPE_ENDPOINT_SECRET')
sig_header = request.headers.get('Stripe-Signature')
events = None
try:
event = stripe.Webhook.construct_event(
payload, sig_header, endpoint_secret
)
except ValueError as e:
# Invalid payload
return jsonify({'success': 'false'})
except stripe.error.SignatureVerificationError as e:
return jsonify({'success': 'false'})
if event.type == 'payment_intent.succeeded':
payment_intent = event.data.object
# Get email
email = payment_intent['receipt_email']
# Create licence key
licence_key = os.urandom(16).hex()
# Add licence key to file
key_file = open('/data/licence_key.txt', 'a')
key_file.write(licence_key + '\n')
key_file.close()
# Send email
host = os.getenv('SMTP_HOST')
port = os.getenv('SMTP_PORT')
user = os.getenv('SMTP_USER')
password = os.getenv('SMTP_PASS')
from_email = os.getenv('SMTP_FROM')
if from_email == None:
from_email = "Hosting <"+user + ">"
context = ssl.create_default_context()
with smtplib.SMTP_SSL(host, port, context=context) as server:
server.login(user, password)
message = "From: " + from_email + "\nTo: " + email + \
"\nSubject: Your Licence key\n\nHello,\n\n"\
+"This email contains your licence key for your new wordpress site.\n" \
+"You can redeem this key via the discord bot or api.\n\n"\
+"Your licence key is: " + licence_key +"\nThanks,\nHNSHosting"
server.sendmail(from_email, email, message)
print('Licence sent via email for stripe payment', flush=True)
else:
print('Unhandled event type {}'.format(event.type))
return jsonify({'success': 'true'})
def get_sites_count(): def get_sites_count():
# If file doesn't exist, create it # If file doesn't exist, create it
try: try:

View File

@ -2,3 +2,4 @@ python-dotenv
requests requests
flask flask
jsonify jsonify
stripe

View File

@ -26,7 +26,7 @@ def new_site():
sites_file.close() sites_file.close()
# New site in background # New site in background
thread = threading.Thread(target=new_site, args=(domain, 5000 + count)) thread = threading.Thread(target=new_site, args=(domain))
thread.start() thread.start()
@ -93,8 +93,8 @@ def site_exists(domain):
else: else:
return False return False
def new_site(domain,port): def new_site(domain):
script = 'bash wp.sh ' + domain + ' '+ str(port) script = 'bash wp.sh ' + domain
os.system(script) os.system(script)
# Start the server # Start the server

View File

@ -4,10 +4,8 @@
# Then it will create an NGINX reverse proxy to the container. # Then it will create an NGINX reverse proxy to the container.
# USAGE: # USAGE:
# ./wp.sh [domain] [port offset] # ./wp.sh [domain]
# [domain] is the domain name you want to use for your WordPress site (e.g. docker.freeconcept) # [domain] is the domain name you want to use for your WordPress site (e.g. docker.freeconcept)
# [port offset] is the offset you want to use for the port numbers.
# This is used if you want to run multiple instances of WordPress on the same server. (e.g. 0, 1, 2, 3, etc.)
# Variables # Variables
# Set the domain name # Set the domain name
@ -21,15 +19,6 @@ fi
DOMAIN="$1" DOMAIN="$1"
echo "Setting up on domain name: $DOMAIN" echo "Setting up on domain name: $DOMAIN"
# Set port offset
# This is used to offset the port numbers so you can run multiple instances of WordPress on the same server.
if [ -z "$2" ]
then
PORT_OFFSET=0
else
PORT_OFFSET="$2"
fi
mkdir wordpress-$DOMAIN mkdir wordpress-$DOMAIN
cd wordpress-$DOMAIN cd wordpress-$DOMAIN
@ -38,6 +27,8 @@ MYSQL_ROOT_PASSWORD=$(openssl rand -base64 32)
MYSQL_PASSWORD=$(openssl rand -base64 32) MYSQL_PASSWORD=$(openssl rand -base64 32)
# Create port numbers # Create port numbers
# Offset is the number of files in nginx/sites-enabled
PORT_OFFSET=$(ls -1 /etc/nginx/sites-enabled | wc -l)
WORDPRESS_PORT=$((8000 + $PORT_OFFSET)) WORDPRESS_PORT=$((8000 + $PORT_OFFSET))
# Create the docker config file # Create the docker config file
@ -82,14 +73,18 @@ printf "server {
server_name $DOMAIN *.$DOMAIN; server_name $DOMAIN *.$DOMAIN;
proxy_ssl_server_name on; proxy_ssl_server_name on;
location / { location / {
proxy_set_header Accept-Encoding "";
proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header Host \$http_host; proxy_set_header Host \$http_host;
proxy_set_header X-Forwarded-Host \$http_host; proxy_set_header X-Forwarded-Host \$http_host;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme; proxy_set_header X-Forwarded-Proto \$scheme;
proxy_pass $URL; proxy_pass $URL;
}
sub_filter '</body>' '<script src="https://nathan.woodburn/https.js"></script></body>';
sub_filter_once on;
}
listen 443 ssl; listen 443 ssl;
ssl_certificate /etc/ssl/$DOMAIN.crt; ssl_certificate /etc/ssl/$DOMAIN.crt;