File size: 3,407 Bytes
b7d08bd
 
 
 
efbda21
 
 
 
 
 
b7d08bd
 
 
 
 
 
 
 
9d283dd
 
67111f2
9d283dd
 
 
 
67111f2
9d283dd
 
 
 
 
 
 
 
 
 
67111f2
 
 
9d283dd
 
67111f2
9d283dd
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
89
90
91
92
from flask import Flask, render_template, request, jsonify
import os
import base64
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:
        with open(image_path, "rb") as f:
            image_data = f.read()
            encoded_image = base64.b64encode(image_data).decode('utf-8')

        payload = {
            'image': encoded_image,
            '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 to Zapier webhook: {ZAPIER_WEBHOOK_URL}")
        response = session.post(ZAPIER_WEBHOOK_URL, json=payload, timeout=10)
        response.raise_for_status()
        logging.debug("Image 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)