73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
from flask import Flask, request, jsonify, render_template
|
|
from .config import Config
|
|
from .utils import get_latest_emails, get_latest_email_with_code, add_allowed_domain, remove_allowed_domain, get_allowed_domains, get_allowed_domains_with_time
|
|
import redis
|
|
from .smtp_server import start_smtp_server
|
|
import threading
|
|
|
|
def create_app():
|
|
app = Flask(__name__)
|
|
app.config.from_object(Config)
|
|
|
|
@app.route('/emails', methods=['GET'])
|
|
def get_emails():
|
|
recipient = request.args.get('recipient')
|
|
limit = request.args.get('limit', default=10, type=int)
|
|
if not recipient:
|
|
return jsonify({'error': 'Recipient email is required'}), 400
|
|
emails = get_latest_emails(recipient, limit)
|
|
return jsonify(emails)
|
|
|
|
@app.route('/latest_email', methods=['GET'])
|
|
def get_latest_email():
|
|
recipient = request.args.get('recipient')
|
|
if not recipient:
|
|
return jsonify({'error': 'Recipient email is required'}), 400
|
|
email_data = get_latest_email_with_code(recipient)
|
|
if email_data:
|
|
return jsonify(email_data)
|
|
return jsonify({'error': 'No emails found for this recipient'}), 404
|
|
|
|
@app.route('/allowed_domains/add', methods=['POST'])
|
|
def add_domain():
|
|
domain = request.json.get('domain')
|
|
if not domain:
|
|
return jsonify({'error': 'Domain is required'}), 400
|
|
add_allowed_domain(domain)
|
|
return jsonify({'message': 'Domain added successfully'}), 201
|
|
|
|
@app.route('/allowed_domains/remove', methods=['POST'])
|
|
def remove_domain():
|
|
domain = request.json.get('domain')
|
|
if not domain:
|
|
return jsonify({'error': 'Domain is required'}), 400
|
|
remove_allowed_domain(domain)
|
|
return jsonify({'message': 'Domain removed successfully'}), 200
|
|
|
|
@app.route('/allowed_domains/list', methods=['GET'])
|
|
def list_domains():
|
|
domains = get_allowed_domains()
|
|
return jsonify(domains), 200
|
|
|
|
@app.route('/allowed_domains/list_with_time', methods=['GET'])
|
|
def list_domains_with_time():
|
|
domains_with_time = get_allowed_domains_with_time()
|
|
return jsonify(domains_with_time), 200
|
|
|
|
@app.route('/')
|
|
def list_emails_page():
|
|
emails = get_latest_emails(count=50)
|
|
return render_template('email_list.html', emails=emails)
|
|
|
|
@app.route('/email/<recipient>')
|
|
def view_email_page(recipient):
|
|
email = get_latest_email_with_code(recipient)
|
|
if email:
|
|
return render_template('email_detail.html', email=email)
|
|
return "邮件不存在", 404
|
|
|
|
smtp_thread = threading.Thread(target=start_smtp_server, args=(app,))
|
|
smtp_thread.daemon = True
|
|
smtp_thread.start()
|
|
|
|
return app |