143 lines
5.2 KiB
Python
143 lines
5.2 KiB
Python
from pyramid.view import view_config
|
|
from pyramid.httpexceptions import HTTPFound
|
|
from pyramid.security import remember, forget
|
|
from passlib.apps import custom_app_context as poc_pwd_context
|
|
from datetime import datetime, timedelta
|
|
from math import ceil
|
|
|
|
|
|
@view_config(route_name='home', renderer='templates/dashboard.jinja2')
|
|
@view_config(route_name="json_snapshot", renderer="prettyjson")
|
|
def my_view(request):
|
|
latest_tag_values = []
|
|
latesttag_agg = request.db['measurements'].aggregate([
|
|
{'$sort': {'dateStored': 1}},
|
|
{
|
|
'$group': {
|
|
'_id': '$tagname',
|
|
'currentValue': {'$last': '$currentValue'},
|
|
'units': {'$last': '$units'},
|
|
'maxValue': {'$last': '$maxValue'},
|
|
'minValue': {'$last': '$minValue'},
|
|
'totalValue': {'$last': '$totalValue'},
|
|
'averageValue': {'$last': '$averageValue'},
|
|
'useTotal': {'$last': '$useTotal'},
|
|
'useAverage': {'$last': '$useAverage'}
|
|
}
|
|
}
|
|
])
|
|
for t in latesttag_agg:
|
|
latest_tag_values.append(t)
|
|
|
|
latest_card = []
|
|
try:
|
|
latest_card = list(request.db['cards'].find().sort("timestamp", -1).limit(1))[0]
|
|
except IndexError:
|
|
latest_card = []
|
|
|
|
return {'project': 'POC Web Interface', 'navgroup': 'dashboard', 'tag_values': latest_tag_values, 'card': latest_card}
|
|
|
|
|
|
@view_config(route_name="config", renderer="templates/config.jinja2", permission="edit")
|
|
@view_config(route_name="json_config", renderer="prettyjson", permission="edit")
|
|
def well_config(request):
|
|
current_configuration = list(request.db['wellConfiguration'].find().sort("timestamp", -1).limit(1))[0]
|
|
return {'navgroup': 'config', 'config': current_configuration}
|
|
|
|
|
|
@view_config(route_name="admin", renderer="templates/admin.jinja2", permission="edit")
|
|
def admin_view(request):
|
|
address = get_poc_address(request) or 'localhost'
|
|
return {'navgroup': 'admin', 'pocIPAddress': address}
|
|
|
|
|
|
@view_config(route_name="auth")
|
|
def sign_in_out(request):
|
|
username = request.POST.get('username')
|
|
if username:
|
|
if check_password(request, username, request.POST.get('password')):
|
|
headers = remember(request, username)
|
|
else:
|
|
headers = forget(request)
|
|
else:
|
|
headers = forget(request)
|
|
return HTTPFound(location=request.route_url('home'), headers=headers)
|
|
|
|
|
|
@view_config(route_name='register',
|
|
renderer='templates/register.jinja2', permission="edit")
|
|
def register(request):
|
|
return {"navgroup": "user"}
|
|
|
|
|
|
def set_password(request, username, password):
|
|
password_hash = poc_pwd_context.encrypt(password)
|
|
request.db['users'].update_one({'username': username}, {"$set":{"username": username, "password": password_hash}}, upsert=True)
|
|
|
|
|
|
def check_password(request, username, password):
|
|
users = list(request.db['users'].find({'username': username}))
|
|
if len(users) > 0:
|
|
this_user = users[0]
|
|
|
|
# is it cleartext?
|
|
if password == this_user['password']:
|
|
set_password(request, username, password)
|
|
return check_password(request, username, password)
|
|
|
|
return poc_pwd_context.verify(password, this_user['password'])
|
|
|
|
@view_config(route_name="json_users", renderer="prettyjson", request_method='POST', permission="edit")
|
|
def json_newuser(request):
|
|
jsb = request.json_body
|
|
if request.db['users'].count({"username": jsb['username']}) > 0:
|
|
fail_reason = "There is already a user with this username"
|
|
return {"status": 'fail', "info": fail_reason}
|
|
|
|
elif len(jsb['username']) < 5:
|
|
fail_reason = "The username must be at least 5 characters"
|
|
return {"status": 'fail', "info": fail_reason}
|
|
|
|
elif len(jsb['password']) < 5:
|
|
fail_reason = "The password must be at least 5 characters"
|
|
return {"status": 'fail', "info": fail_reason}
|
|
|
|
else:
|
|
set_return = set_password(request, jsb['username'], jsb['password'])
|
|
return {'status': "OK"}
|
|
|
|
|
|
@view_config(route_name="json_users", renderer="prettyjson", permission="edit", request_method='GET')
|
|
def json_getuser(request):
|
|
user_list = []
|
|
users = list(request.db['users'].find())
|
|
for user in users:
|
|
user_list.append(user['username'])
|
|
return {'users': user_list}
|
|
|
|
|
|
@view_config(route_name="json_users", renderer="prettyjson", permission="edit", request_method='DELETE')
|
|
def json_deleteuser(request):
|
|
request.db['users'].remove({'username': request.json_body['username']})
|
|
user_list = []
|
|
users = list(request.db['users'].find())
|
|
for user in users:
|
|
user_list.append(user['username'])
|
|
return {'users': user_list}
|
|
|
|
|
|
@view_config(route_name="json_users", renderer="prettyjson", request_method='PUT', permission="edit")
|
|
def json_updateuser(request):
|
|
jsb = request.json_body
|
|
if len(jsb['username']) < 5:
|
|
fail_reason = "The username must be at least 5 characters"
|
|
return {"status": 'fail', "info": fail_reason}
|
|
|
|
elif len(jsb['password']) < 5:
|
|
fail_reason = "The password must be at least 5 characters"
|
|
return {"status": 'fail', "info": fail_reason}
|
|
|
|
else:
|
|
set_return = set_password(request, jsb['username'], jsb['password'])
|
|
return {'status': "OK"}
|