78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
from flask import Flask, request, jsonify
|
|
import psycopg2
|
|
from psycopg2 import sql
|
|
from flask_cors import CORS
|
|
from twilio.twiml.messaging_response import MessagingResponse
|
|
import logging
|
|
import os
|
|
|
|
# Set up logging
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
app = Flask(__name__, static_url_path='', static_folder='static')
|
|
CORS(app, resources={r"/*": {"origins": "*"}})
|
|
|
|
# Database configuration from environment variables
|
|
DB_HOST = os.getenv('DB_HOST', '38.102.124.126')
|
|
DB_NAME = os.getenv('DB_NAME', 'sms_app')
|
|
DB_USER = os.getenv('DB_USER', 'sms_user')
|
|
DB_PASS = os.getenv('DB_PASS', 'rusty2281')
|
|
|
|
def get_db_connection():
|
|
try:
|
|
conn = psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST)
|
|
return conn
|
|
except Exception as e:
|
|
logging.error(f"Database connection failed: {e}")
|
|
raise
|
|
|
|
@app.route('/sms', methods=['POST'])
|
|
def sms_reply():
|
|
try:
|
|
sender = request.form['From']
|
|
body = request.form['Body']
|
|
logging.debug(f"Received SMS from {sender}: {body}")
|
|
|
|
conn = get_db_connection()
|
|
with conn.cursor() as cur:
|
|
cur.execute("INSERT INTO messages (sender, body) VALUES (%s, %s)", (sender, body))
|
|
conn.commit()
|
|
conn.close()
|
|
logging.debug("Message saved to database")
|
|
|
|
# Respond to the sender
|
|
resp = MessagingResponse()
|
|
resp.message("Message received")
|
|
return str(resp)
|
|
except Exception as e:
|
|
logging.error(f"Error saving message: {e}")
|
|
return str(e), 500
|
|
|
|
@app.route('/api/messages', methods=['GET'])
|
|
def get_messages():
|
|
try:
|
|
logging.debug("Fetching messages from database")
|
|
conn = get_db_connection()
|
|
with conn.cursor() as cur:
|
|
cur.execute("SELECT sender, body, received FROM messages ORDER BY received DESC")
|
|
messages = cur.fetchall()
|
|
conn.close()
|
|
logging.debug(f"Fetched messages: {messages}")
|
|
return jsonify(messages)
|
|
except Exception as e:
|
|
logging.error(f"Error fetching messages: {e}")
|
|
return str(e), 500
|
|
|
|
@app.route('/')
|
|
def index():
|
|
try:
|
|
logging.debug("Serving index.html")
|
|
return app.send_static_file('index.html')
|
|
except Exception as e:
|
|
logging.error(f"Error serving index.html: {e}")
|
|
return str(e), 500
|
|
|
|
if __name__ == '__main__':
|
|
logging.debug("Starting Flask server")
|
|
app.run(debug=True, host='0.0.0.0', port=5001)
|