EE-status-v3/app.py

133 lines
3.3 KiB
Python
Raw Normal View History

import json, requests
from flask import Flask, request, session, render_template, redirect, url_for
from flask_session import Session
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>')
def camera_detail(esn=None):
if 'een' in session:
een = session['een']
else:
een = EagleEyev3()
camera = een.get_camera_by_id(esn)
2023-07-14 13:26:06 +00:00
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,
2023-07-14 13:26:06 +00:00
"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)