diff --git a/server/api_keys.py b/server/api_keys.py new file mode 100644 index 0000000..e4fe3c0 --- /dev/null +++ b/server/api_keys.py @@ -0,0 +1,7 @@ +# api_keys.py + +api_keys = { + "your_api_key": "user1", + "another_api_key": "user2", + # Add more API keys as needed +} diff --git a/server/config.py b/server/config.py new file mode 100644 index 0000000..529f2eb --- /dev/null +++ b/server/config.py @@ -0,0 +1 @@ +SQLALCHEMY_DATABASE_URI = 'mysql+mariadb://your_username:your_password@your_database_host/scenesense_db' \ No newline at end of file diff --git a/server/server-api.py b/server/server-api.py deleted file mode 100644 index e69de29..0000000 diff --git a/server/server_api.py b/server/server_api.py new file mode 100644 index 0000000..5af1f2c --- /dev/null +++ b/server/server_api.py @@ -0,0 +1,104 @@ +from flask import Flask, request, jsonify +from flask_sqlalchemy import SQLAlchemy +from api_keys import api_keys +from config import SQLALCHEMY_DATABASE_URI +import datetime + +app = Flask(__name__) + +# Configuration for SQLAlchemy and your database connection +app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI +db = SQLAlchemy(app) + +# Database Model for Records +class Record(db.Model): + id = db.Column(db.Integer, primary_key=True) + timestamp = db.Column(db.String(255), nullable=False) + description = db.Column(db.String(255), nullable=False) + +def parse_timestamp(timestamp_str): + try: + return datetime.strptime(timestamp_str, '%Y-%m-%d %H:%M:%S') + except ValueError: + return None + +# Custom middleware for API key authentication +@app.before_request +def authenticate(): + api_key = request.headers.get("Authorization") + + if api_key not in api_keys: + return jsonify({'error': 'Invalid API key'}), 401 + + +@app.route('/add_record', methods=['POST']) +def add_record(): + try: + data = request.get_json() + timestamp = data['timestamp'] + description = data['description'] + + # Create a new record and add it to the database + new_record = Record(timestamp=timestamp, description=description) + db.session.add(new_record) + db.session.commit() + + return jsonify({'message': 'Record added successfully'}), 201 + except Exception as e: + return jsonify({'error': 'An error occurred: {}'.format(e)}), 500 + + +@app.route('/get_last_record', methods=['GET']) +def get_last_record(): + last_record = Record.query.order_by(Record.id.desc()).first() + if last_record: + return jsonify({'id': last_record.id, 'timestamp': last_record.timestamp, 'description': last_record.description}) + else: + return jsonify({'message': 'No records found'}), 404 + + +@app.route('/get_all_records', methods=['GET']) +def get_all_records(): + records = Record.query.order_by(Record.id.desc()).all() + records_list = [{'id': record.id, 'timestamp': record.timestamp, 'description': record.description} for record in records] + return jsonify(records_list) + + + +# Route to get records from a given timestamp till now +@app.route('/get_records_since/', methods=['GET']) +def get_records_since(timestamp_str): + timestamp = parse_timestamp(timestamp_str) + if timestamp is None: + return jsonify({'error': 'Invalid timestamp format'}), 400 + + records = Record.query.filter(Record.timestamp >= timestamp).order_by(Record.id.desc()).all() + records_list = [{'id': record.id, 'timestamp': record.timestamp, 'description': record.description} for record in records] + return jsonify(records_list) + +# Route to get records between two timestamps +@app.route('/get_records_between//', methods=['GET']) +def get_records_between(start_timestamp_str, end_timestamp_str): + start_timestamp = parse_timestamp(start_timestamp_str) + end_timestamp = parse_timestamp(end_timestamp_str) + if start_timestamp is None or end_timestamp is None: + return jsonify({'error': 'Invalid timestamp format'}), 400 + + records = Record.query.filter(Record.timestamp.between(start_timestamp, end_timestamp)).order_by(Record.id.desc()).all() + records_list = [{'id': record.id, 'timestamp': record.timestamp, 'description': record.description} for record in records] + return jsonify(records_list) + +# Route to get records from now up until a timestamp +@app.route('/get_records_until/', methods=['GET']) +def get_records_until(timestamp_str): + timestamp = parse_timestamp(timestamp_str) + if timestamp is None: + return jsonify({'error': 'Invalid timestamp format'}), 400 + + records = Record.query.filter(Record.timestamp <= timestamp).order_by(Record.id.desc()).all() + records_list = [{'id': record.id, 'timestamp': record.timestamp, 'description': record.description} for record in records] + return jsonify(records_list) + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000)