pw requirements now loaded with jinja over js

Originally i loaded the requirements through calling the web api in
javascript, but decided to switch it to jinja as i only recently found
out its capable of stuff more complicated than replacing strings.
This commit is contained in:
Harvey Tindall 2020-05-12 20:29:50 +01:00
parent 8497cd4927
commit 331dbc3d28
5 changed files with 24 additions and 52 deletions

4
.gitignore vendored
View File

@ -8,3 +8,7 @@ data/node_modules/
*.egg-info/ *.egg-info/
pw-reset/ pw-reset/
jfa/ jfa/
colors.txt
theme.css
data/static/bootstrap-jf.css
old/

View File

@ -78,52 +78,27 @@
</div> </div>
</div> </div>
</div> </div>
{% if validate %}
<div class="col-sm" id="requirementBox">
<div class="card bg-light mb-3 requirementBox">
<div class="card-header">Password Requirements</div>
<div class="card-body">
<ul class="list-group">
{% for key, value in requirements.items() %}
<li id="{{ key }}" class="list-group-item list-group-item-danger">
<div> {{ value }}</div>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</div> </div>
</div> </div>
</div> </div>
<script> <script>
var code = window.location.href.split('/').pop(); var code = window.location.href.split('/').pop();
$.ajax('/getRequirements', {
data : JSON.stringify({ 'code': code }),
contentType : 'application/json',
type : 'POST',
crossDomain : true,
complete : function(response){
var data = response['responseJSON'];
if (Object.keys(data).length > 1) {
var col = document.createElement('div');
col.classList.add('col-sm');
col.id = 'requirementBox';
var card = document.createElement('div');
card.classList.add('card', 'bg-light', 'mb-3', 'requirementBox');
// card.setAttribute('style', 'max-width: 18rem;');
var header = document.createElement('div');
header.classList.add('card-header');
header.appendChild(document.createTextNode('Password Requirements'));
card.appendChild(header);
var body = document.createElement('div');
body.classList.add('card-body');
var listGroup = document.createElement('ul');
listGroup.classList.add('list-group');
listGroup.id = 'requirements';
for (var key in data) {
if (data.hasOwnProperty(key)) {
var criterion = document.createElement('li');
criterion.id = key;
criterion.classList.add('list-group-item', 'list-group-item-danger');
var text = document.createElement('div');
text.appendChild(document.createTextNode(' ' + data[key]));
criterion.appendChild(text);
listGroup.appendChild(criterion);
};
};
body.appendChild(listGroup);
card.appendChild(body);
col.appendChild(card);
document.getElementById('cardContainer').appendChild(col);
};
}
});
function toggleSpinner () { function toggleSpinner () {
var submitButton = document.getElementById('submitButton'); var submitButton = document.getElementById('submitButton');
var oldSpan = document.getElementById('createAccount'); var oldSpan = document.getElementById('createAccount');

View File

@ -3,6 +3,7 @@ from pathlib import Path
from flask import Flask, send_from_directory, render_template from flask import Flask, send_from_directory, render_template
from __main__ import config, app, g from __main__ import config, app, g
from __main__ import web_log as log from __main__ import web_log as log
from jellyfin_accounts.web_api import checkInvite, validator
@app.errorhandler(404) @app.errorhandler(404)
@ -25,7 +26,6 @@ def static_proxy(path):
return render_template('404.html', return render_template('404.html',
contactMessage=config['ui']['contact_message']), 404 contactMessage=config['ui']['contact_message']), 404
from jellyfin_accounts.web_api import checkInvite
@app.route('/invite/<path:path>') @app.route('/invite/<path:path>')
@ -48,6 +48,9 @@ def inviteProxy(path):
helpMessage=config['ui']['help_message'], helpMessage=config['ui']['help_message'],
successMessage=config['ui']['success_message'], successMessage=config['ui']['success_message'],
jfLink=config['jellyfin']['server'], jfLink=config['jellyfin']['server'],
validate=config.getboolean('password_validation',
'enabled'),
requirements=validator.getCriteria(),
email=email) email=email)
elif 'admin.html' not in path and 'admin.html' not in path: elif 'admin.html' not in path and 'admin.html' not in path:
return app.send_static_file(path) return app.send_static_file(path)

View File

@ -112,14 +112,6 @@ else:
validator = PasswordValidator(0, 0, 0, 0, 0) validator = PasswordValidator(0, 0, 0, 0, 0)
@app.route('/getRequirements', methods=['GET', 'POST'])
def getRequirements():
data = request.get_json()
log.debug('Password Requirements requested')
if checkInvite(data['code']):
return jsonify(validator.getCriteria())
@app.route('/newUser', methods=['GET', 'POST']) @app.route('/newUser', methods=['GET', 'POST'])
def newUser(): def newUser():
data = request.get_json() data = request.get_json()

View File

@ -22,10 +22,8 @@ setup(
# include_package_data=True, # include_package_data=True,
data_files=[('data', ['data/config-default.ini', data_files=[('data', ['data/config-default.ini',
'data/email.html', 'data/email.html',
'data/email.mjml',
'data/email.txt', 'data/email.txt',
'data/invite-email.html', 'data/invite-email.html',
'data/invite-email.mjml',
'data/invite-email.txt']), 'data/invite-email.txt']),
('data/static', ['data/static/admin.js', ('data/static', ['data/static/admin.js',
'data/static/setup.js']), 'data/static/setup.js']),