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

This commit is contained in:
Nathan Woodburn 2023-08-24 16:53:39 +10:00
parent 969e5e17a5
commit eb137b85d3
Signed by: nathanwoodburn
GPG Key ID: 203B000478AD0EF1
2 changed files with 40 additions and 8 deletions

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 <Optional>
```
## Worker server install ## Worker server install

View File

@ -2,7 +2,8 @@ from flask import Flask, request, jsonify
import dotenv import dotenv
import os import os
import requests import requests
import stripe import stripe # For stripe payments
import smtplib, ssl # For sending emails
dotenv.load_dotenv() dotenv.load_dotenv()
@ -236,8 +237,6 @@ def tlsa():
@app.route('/stripe', methods=['POST']) @app.route('/stripe', methods=['POST'])
def stripeapi(): def stripeapi():
print(request.json, flush=True)
print(request.headers, flush=True)
payload = request.data payload = request.data
stripe.api_key = os.getenv('STRIPE_SECRET') stripe.api_key = os.getenv('STRIPE_SECRET')
endpoint_secret = os.getenv('STRIPE_ENDPOINT_SECRET') endpoint_secret = os.getenv('STRIPE_ENDPOINT_SECRET')
@ -255,12 +254,32 @@ def stripeapi():
# Handle the event # Handle the event
if event.type == 'payment_intent.succeeded': if event.type == 'payment_intent.succeeded':
payment_intent = event.data.object # contains a stripe.PaymentIntent 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 = user
context = ssl.create_default_context()
with smtplib.SMTP_SSL(host, port, context=context) as server:
server.login(user, password)
server.sendmail(from_email, email, "Your licence key is: " + licence_key)
print('PaymentIntent was successful!', flush=True) print('PaymentIntent was successful!', flush=True)
elif event.type == 'payment_method.attached':
payment_method = event.data.object # contains a stripe.PaymentMethod
print('PaymentMethod was attached to a Customer!', flush=True)
# ... handle other event types
else: else:
print('Unhandled event type {}'.format(event.type)) print('Unhandled event type {}'.format(event.type))
return jsonify({'success': 'true'}) return jsonify({'success': 'true'})