add validations in public page of device
This commit is contained in:
parent
ad1e5e06d9
commit
e649d65b5d
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
<!-- JS Files -->
|
<!-- JS Files -->
|
||||||
<script src="{{ url_for('static', filename='js/jquery-3.6.0.min.js') }}"></script>
|
<script src="{{ url_for('static', filename='js/jquery-3.6.0.min.js') }}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
|
||||||
|
|
||||||
<!-- Vendor CSS Files -->
|
<!-- Vendor CSS Files -->
|
||||||
<link href="{{ url_for('static', filename='vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">
|
<link href="{{ url_for('static', filename='vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">
|
||||||
|
@ -40,8 +41,27 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
|
<nav class="header-nav ms-auto">
|
||||||
|
<ul class="d-flex align-items-right">
|
||||||
|
<li class="nav-item">
|
||||||
|
{% if user.is_anonymous %}
|
||||||
|
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#validateModal">Validate</button>
|
||||||
|
{% else %}
|
||||||
|
<button class="btn btn-primary" id="buttonRol" data-bs-toggle="modal" data-bs-target="#rolsModal">Select your rol</button>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
{{ rol }}
|
||||||
|
</nav>
|
||||||
|
|
||||||
<section class="container mt-3">
|
<section class="container mt-3">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
{% if not rol and rols %}
|
||||||
|
<button class="btn btn-primary">Select a Rol</button>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<div class="col">
|
<div class="col">
|
||||||
|
@ -215,6 +235,70 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if user.is_anonymous %}
|
||||||
|
<div class="modal fade" id="validateModal" tabindex="-1" style="display: none;" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">Validate as <span id="title-action"></span></h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<a class="btn btn-primary" type="button"
|
||||||
|
href="{{ url_for('core.login') }}?next={{ device_real.url.to_text() }}">
|
||||||
|
User of system
|
||||||
|
</a> <br />
|
||||||
|
<a class="btn btn-primary mt-3" type="button" href="#">
|
||||||
|
User with Metamax Wallet
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="modal fade" id="rolsModal" tabindex="-1" style="display: none;" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
|
||||||
|
<form action="{{ device_real.url.to_text() }}" method="get">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">Select your Rol <span id="title-action"></span></h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<select name="rol">
|
||||||
|
{% for k, v in rols %}
|
||||||
|
<option value="{{ k }}" {% if v==rol %}selected=selected{% endif %}>{{ v }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||||
|
<input type="submit" class="btn btn-primary" value="Send" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<!-- Custom Code -->
|
||||||
|
{% if not user.is_anonymous and not rol %}
|
||||||
|
<script>
|
||||||
|
$(document).ready(() => {
|
||||||
|
$("#buttonRol").click();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -4,9 +4,10 @@ from itertools import filterfalse
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
import marshmallow
|
import marshmallow
|
||||||
|
from ereuseapi.methods import API
|
||||||
from flask import Response
|
from flask import Response
|
||||||
from flask import current_app as app
|
from flask import current_app as app
|
||||||
from flask import g, render_template, request
|
from flask import g, render_template, request, session
|
||||||
from flask.json import jsonify
|
from flask.json import jsonify
|
||||||
from flask_sqlalchemy import Pagination
|
from flask_sqlalchemy import Pagination
|
||||||
from marshmallow import Schema as MarshmallowSchema
|
from marshmallow import Schema as MarshmallowSchema
|
||||||
|
@ -136,7 +137,39 @@ class DeviceView(View):
|
||||||
else:
|
else:
|
||||||
return self.one_private(id)
|
return self.one_private(id)
|
||||||
|
|
||||||
|
def get_rols(self):
|
||||||
|
if not g.user.is_authenticated:
|
||||||
|
return []
|
||||||
|
|
||||||
|
if 'trublo' not in app.blueprints.keys():
|
||||||
|
return []
|
||||||
|
|
||||||
|
if not session.get('token_dlt'):
|
||||||
|
return []
|
||||||
|
|
||||||
|
token_dlt = session.get('token_dlt')
|
||||||
|
api_dlt = app.config.get('API_DLT')
|
||||||
|
if not token_dlt or not api_dlt:
|
||||||
|
return []
|
||||||
|
|
||||||
|
api = API(api_dlt, token_dlt, "ethereum")
|
||||||
|
|
||||||
|
result = api.check_user_roles()
|
||||||
|
if result.get('Status') != 200:
|
||||||
|
return []
|
||||||
|
|
||||||
|
if 'Success' not in result.get('Data', {}).get('status'):
|
||||||
|
return []
|
||||||
|
|
||||||
|
rols = result.get('Data', {}).get('data', {})
|
||||||
|
return [(k, k) for k, v in rols.items() if v]
|
||||||
|
|
||||||
def one_public(self, id: int):
|
def one_public(self, id: int):
|
||||||
|
rols = self.get_rols()
|
||||||
|
# rols = [("isOperator", "isOperator"), ("Inspector", "Inspector"), ("Recicler", "Recicler")]
|
||||||
|
rol = len(rols) == 1 and rols[0][0] or None
|
||||||
|
if 'rol' in request.args:
|
||||||
|
rol = dict(rols).get(request.args.get('rol'))
|
||||||
devices = Device.query.filter_by(devicehub_id=id, active=True).all()
|
devices = Device.query.filter_by(devicehub_id=id, active=True).all()
|
||||||
if not devices:
|
if not devices:
|
||||||
devices = [Device.query.filter_by(dhid_bk=id, active=True).one()]
|
devices = [Device.query.filter_by(dhid_bk=id, active=True).one()]
|
||||||
|
@ -159,6 +192,9 @@ class DeviceView(View):
|
||||||
device_real=device_real,
|
device_real=device_real,
|
||||||
states=states,
|
states=states,
|
||||||
abstract=abstract,
|
abstract=abstract,
|
||||||
|
rols=rols,
|
||||||
|
rol=rol,
|
||||||
|
user=g.user,
|
||||||
)
|
)
|
||||||
|
|
||||||
@auth.Auth.requires_auth
|
@auth.Auth.requires_auth
|
||||||
|
|
Reference in a new issue