78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
from pyramid.view import view_config
|
|
from pyramid.httpexceptions import HTTPFound
|
|
from pyramid.security import remember, forget
|
|
from .security import check_password, set_password
|
|
|
|
|
|
@view_config(route_name="users_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='users_register', renderer='templates/register.jinja2', permission="edit")
|
|
def register(request):
|
|
return {"navgroup": "user"}
|
|
|
|
|
|
@view_config(route_name="users_json", 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="users_json", 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="users_json", 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="users_json", 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"}
|