155 lines
3.7 KiB
Python
155 lines
3.7 KiB
Python
|
|
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 EagleEyev3
|
|
|
|
|
|
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()
|
|
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")
|
|
|
|
|
|
#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()
|
|
|
|
|
|
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()
|
|
|
|
return redirect(url_for('index'))
|
|
|
|
|
|
@app.route('/cameras')
|
|
def cameras():
|
|
if 'een' in session:
|
|
een = session['een']
|
|
else:
|
|
een = EagleEyev3()
|
|
|
|
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/<esn>/live_preview')
|
|
def camera_live_preivew(esn=None):
|
|
if 'een' in session:
|
|
een = session['een']
|
|
else:
|
|
een = EagleEyev3()
|
|
|
|
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/<esn>')
|
|
def camera_detail(esn=None):
|
|
if 'een' in session:
|
|
een = session['een']
|
|
else:
|
|
een = EagleEyev3()
|
|
|
|
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)
|