import json, requests from flask import Flask, request, session, render_template, redirect, url_for, Response, send_file from flask_session import Session from io import BytesIO import logging logger = logging.getLogger() #logger.setLevel('DEBUG') logger.setLevel('INFO') #logger.setLevel('WARN') #logger.setLevel('ERROR') #logger.setLevel('CRITICAL') from EagleEyev3 import * from settings import config logging.info(f"Using EagleEyev3 version {EagleEyev3.__version__}") app = Flask(__name__) SESSION_TYPE = 'filesystem' app.config.from_object(__name__) Session(app) @app.route('/') def index(): if 'een' in session: een = session['een'] else: een = EagleEyev3(config) session['een'] = een # using current_user as a proxy for an established valid session if een.access_token == None: base_url = "https://auth.eagleeyenetworks.com/oauth2/authorize" path_url = f"?client_id={een.client_id}&response_type=code&scope=vms.all&redirect_uri={een.redirect_uri}" return redirect(f"{base_url}{path_url}") # call this to check if session is actually valid check = een.get_current_user() if 'success' not in check or check['success'] == False: base_url = "https://auth.eagleeyenetworks.com/oauth2/authorize" path_url = f"?client_id={een.client_id}&response_type=code&scope=vms.all&redirect_uri={een.redirect_uri}" return redirect(f"{base_url}{path_url}") else: logging.info(f"{check['success']} - check get_current_user {een.current_user['email']} {een.access_token}") #logging.info(een.cameras) # this call could get expensive een.get_list_of_cameras() #logging.info(een.cameras) values = { "current_user": een.current_user, "cameras": een.cameras } return render_template('index.html', template_values=values) @app.route('/login_callback') def login_callback(): # This is getting the ?code= querystring value from the HTTP request. code = request.args.get('code') if 'een' in session: een = session['een'] else: een = EagleEyev3(config) if (code): # use the include code parameter to complete login process oauth_object = een.login_tokens(code) return redirect(url_for('index')) @app.route('/logout') def logout(): if 'een' in session: een = session['een'] een.logout() session.pop('een') return redirect(url_for('index')) @app.route('/cameras') def cameras(): if 'een' in session: een = session['een'] else: een = EagleEyev3(config) een.get_list_of_cameras() values = { "current_user": een.current_user, "cameras": een.cameras } return render_template('cameras_partial.html', template_values=values) @app.route('/camera//live_preview') def camera_live_preivew(esn=None): if 'een' in session: een = session['een'] else: een = EagleEyev3(config) camera = een.get_camera_by_id(esn) res = camera.get_live_preview() if res: return send_file(BytesIO(res.content), mimetype='image/jpeg') else: return send_file('static/placeholder.png') @app.route('/camera/') def camera_detail(esn=None): if 'een' in session: een = session['een'] else: een = EagleEyev3(config) camera = een.get_camera_by_id(esn) camera.get_list_of_events(end_timestamp=een.time_before(ts=een.time_now(), hours=0), \ start_timestamp=een.time_before(ts=een.time_now(), hours=6) ) values = { "current_user": een.current_user, "camera": camera, "events": camera.events['status'] } return render_template('camera_detail_partial.html', template_values=values) if __name__ == '__main__': app.run(host=een.server_host, port=een.server_port)