File size: 3,304 Bytes
b7d08bd
 
0adfcb9
b7d08bd
efbda21
 
 
 
 
 
b7d08bd
 
 
 
 
 
 
 
9d283dd
 
67111f2
9d283dd
 
 
 
67111f2
9d283dd
0e6629c
9d283dd
 
 
 
67111f2
 
 
0e6629c
9d283dd
67111f2
0e6629c
67111f2
 
9d283dd
f213592
 
9d283dd
67111f2
b7d08bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f213592
b7d08bd
 
efbda21
 
 
9d283dd
 
67111f2
 
 
 
 
9d283dd
67111f2
 
 
 
9d283dd
67111f2
 
b7d08bd
cb6a777
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from flask import Flask, render_template, request, jsonify
import os
import base64  # Add this import
import requests
import logging
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Configure logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

app = Flask(__name__)

# Configuration
UPLOAD_FOLDER = 'static/captures'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# Zapier webhook settings
ZAPIER_WEBHOOK_URL = os.getenv('ZAPIER_WEBHOOK_URL')  # Load webhook URL from environment variable

def send_to_zapier(image_path):
    if not ZAPIER_WEBHOOK_URL:
        logging.error("Zapier webhook URL not set.")
        return {"error": "Zapier webhook URL not set. Please set the ZAPIER_WEBHOOK_URL environment variable."}
    try:
        payload = {
            'image_url': request.url_root + image_path,
            'filename': os.path.basename(image_path),
            'content_type': 'image/jpeg'
        }

        session = requests.Session()
        retries = Retry(total=3, backoff_factor=1, status_forcelist=[502, 503, 504])
        session.mount('https://', HTTPAdapter(max_retries=retries))
        logging.debug(f"Sending image URL to Zapier webhook: {ZAPIER_WEBHOOK_URL}")
        response = session.post(ZAPIER_WEBHOOK_URL, json=payload, timeout=10)
        response.raise_for_status()
        logging.debug("Image URL sent to Zapier successfully.")
        return {"status": "success"}
    except requests.exceptions.RequestException as e:
        logging.error(f"Failed to send to Zapier: {str(e)}")
        if e.response is not None:
            logging.error(f"Response details: {e.response.text}")
        return {"error": f"Failed to send to Zapier: {str(e)}"}

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/capture', methods=['POST'])
def capture():
    try:
        data = request.form['image']
        header, encoded = data.split(",", 1)
        binary_data = base64.b64decode(encoded)
        
        filename = f"capture_{len(os.listdir(app.config['UPLOAD_FOLDER'])) + 1}.jpg"
        filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        with open(filepath, "wb") as f:
            f.write(binary_data)
        
        image_url = f"/{filepath}"
        return jsonify({
            'status': 'success',
            'image_url': image_url
        })
    except Exception as e:
        logging.error(f"Error in capture: {str(e)}")
        return jsonify({'status': 'error', 'message': str(e)})

@app.route('/upload_zapier', methods=['POST'])
def upload_zapier():
    try:
        image_url = request.form['image_url']
        if not image_url.startswith('/static/captures/'):
            return jsonify({'status': 'error', 'message': 'Invalid image path.'})
        
        result = send_to_zapier(image_url.lstrip('/'))
        if 'error' in result:
            return jsonify({'status': 'error', 'message': result['error']})
        return jsonify({'status': 'success'})
    except Exception as e:
        logging.error(f"Error in upload_zapier: {str(e)}")
        return jsonify({'status': 'error', 'message': str(e)})

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=7860)