From 46c235cb2df72a3c9cb7320d21f026a98f7350c1 Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Fri, 4 Jan 2019 18:51:23 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20Derni=C3=A8res=20connexions=20pt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mondumas.egg-info/requires.txt | 2 + mondumas/models/default.py | 6 +-- mondumas/routes.py | 1 + mondumas/templates/parametres/parametres.pt | 4 ++ mondumas/templates/parametres/users_list.pt | 1 - mondumas/templates/parametres/users_ua.pt | 46 +++++++++++++++++++ mondumas/views/default.py | 9 +++- mondumas/views/parametres.py | 31 ++++++++++--- pyramidsvc.py | 51 --------------------- setup.py | 3 +- 10 files changed, 89 insertions(+), 65 deletions(-) create mode 100644 mondumas/templates/parametres/users_ua.pt delete mode 100644 pyramidsvc.py diff --git a/mondumas.egg-info/requires.txt b/mondumas.egg-info/requires.txt index 61ca4ab..ff7abf7 100644 --- a/mondumas.egg-info/requires.txt +++ b/mondumas.egg-info/requires.txt @@ -1,5 +1,6 @@ pyramid pyramid_chameleon +pyramid_mako==0.3.1 pyramid_debugtoolbar pyramid_layout pyramid_mailer @@ -11,6 +12,7 @@ waitress mysqlclient python-dateutil docutils +user-agents [testing] WebTest>=1.3.1 diff --git a/mondumas/models/default.py b/mondumas/models/default.py index 261d0b9..87803c0 100644 --- a/mondumas/models/default.py +++ b/mondumas/models/default.py @@ -50,10 +50,10 @@ def update_membre_mdp(request, login, password): query = "UPDATE p_users SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE cd_uti=:login;" execute_query(request, query, {'login': login, 'password': password}) -def update_last_connection(request, login): +def update_last_connection(request, login, ua_string): """Update last connection for login """ - query = "UPDATE p_users SET dern_cnx_le=NOW() WHERE cd_uti=:login;" - execute_query(request, query, {'login': login}) + query = "UPDATE p_users SET dern_cnx_le=NOW(), ua_string=:ua_string WHERE cd_uti=:login;" + execute_query(request, query, {'login': login, 'ua_string': ua_string}) def update_membre(request, cd_uti, new_values): # formater les champs diff --git a/mondumas/routes.py b/mondumas/routes.py index 6c87e4a..deeb331 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -26,3 +26,4 @@ def includeme(config): config.add_route('orphans_de', '/orphans_de/{societe}') config.add_route('user_edit', '/user_edit/{cd_uti}') config.add_route('users_list', '/users_list') + config.add_route('users_ua', '/users_ua') diff --git a/mondumas/templates/parametres/parametres.pt b/mondumas/templates/parametres/parametres.pt index 14e1366..b09b4b0 100644 --- a/mondumas/templates/parametres/parametres.pt +++ b/mondumas/templates/parametres/parametres.pt @@ -7,6 +7,10 @@

UTILISATEURS

+
+ +

CONNEXIONS

+

TABLEAU de BORD

diff --git a/mondumas/templates/parametres/users_list.pt b/mondumas/templates/parametres/users_list.pt index 4b0804e..034f51c 100644 --- a/mondumas/templates/parametres/users_list.pt +++ b/mondumas/templates/parametres/users_list.pt @@ -16,7 +16,6 @@ Email Agenda Rôle - Dern cnx Etat diff --git a/mondumas/templates/parametres/users_ua.pt b/mondumas/templates/parametres/users_ua.pt new file mode 100644 index 0000000..d6a1d86 --- /dev/null +++ b/mondumas/templates/parametres/users_ua.pt @@ -0,0 +1,46 @@ + +
+ +

+ + Retour + + Nouveau utilisateur +

+ + + + + + + + + + +
Dern cnxLoginNom, PrénomAppareil utilisé
+ +
+
+ + + +
+
+ + diff --git a/mondumas/views/default.py b/mondumas/views/default.py index cb91d6c..d2f0190 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -20,6 +20,7 @@ from datetime import * import hashlib from sqlalchemy.exc import DBAPIError from ..security import groupfinder +from user_agents import parse import json @@ -181,10 +182,14 @@ def login(request): if record : # mot de passe hash valide ? if record.mdp == to_sha1(password): - update_last_connection(request, login) + # get user agent string from request + ua_string = request.user_agent + user_agent = parse(ua_string) + update_last_connection(request, login, str(user_agent)) + # force le commit car il ne se fait pas automatiquement après l'update transaction.commit() - + headers = remember(request, login) return HTTPFound(location=came_from, headers=headers) diff --git a/mondumas/views/parametres.py b/mondumas/views/parametres.py index 91976fe..5470e38 100644 --- a/mondumas/views/parametres.py +++ b/mondumas/views/parametres.py @@ -40,12 +40,7 @@ def users_list(request): # construire la liste liste=[] - for item in items: - if item.dern_cnx_le: - der_cnx_le = item.dern_cnx_le.strftime('%d/%m/%Y - %H:%M') - else: - der_cnx_le = "" - + for item in items: if item.actif == 0: etat = 'Inactif' else: @@ -60,7 +55,7 @@ def users_list(request): else: role = 'Gestion' - d = (item.CD_UTI, item.NOM, item.email, item.agenda, role, der_cnx_le, etat) + d = (item.CD_UTI, item.NOM, item.email, item.agenda, role, etat) liste.append(d) return { @@ -68,6 +63,28 @@ def users_list(request): 'dt_data': json.dumps(liste), } +@view_config(route_name='users_ua', renderer='../templates/parametres/users_ua.pt', permission='manage') +def users_ua(request): + # lire les utilisateurs + items = get_member_by_id(request, '0') + + # construire la liste + liste=[] + for item in items: + # utilisateur a au moins une connexion ? + if item.dern_cnx_le: + der_cnx_le = item.dern_cnx_le.strftime('%d/%m/%Y - %H:%M') + + d = (der_cnx_le, item.CD_UTI, item.NOM, item.ua_string) + liste.append(d) + + return { + 'page_title': u'Liste des connexions', + 'dt_data': json.dumps(liste), + } + + + @view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage') def user_edit(request): cd_uti = request.matchdict['cd_uti'] diff --git a/pyramidsvc.py b/pyramidsvc.py deleted file mode 100644 index 8ca0abe..0000000 --- a/pyramidsvc.py +++ /dev/null @@ -1,51 +0,0 @@ -# uncomment the next import line to get print to show up or see early -# exceptions if there are errors then run -# python -m win32traceutil -# to see the output -#import win32traceutil -import win32serviceutil - -PORT_TO_BIND = 9180 -CONFIG_FILE = 'production.ini' -SERVER_NAME = 'gestion.entreprise-dumas.com' - -SERVICE_NAME = "Pyramid_Service" -SERVICE_DISPLAY_NAME = "Pyramid Web Service" -SERVICE_DESCRIPTION = """Permet de laner l'application Pyramid comme un servcie.""" - -class PyWebService(win32serviceutil.ServiceFramework): - """Python Web Service.""" - - _svc_name_ = SERVICE_NAME - _svc_display_name_ = SERVICE_DISPLAY_NAME - _svc_deps_ = None # sequence of service names on which this depends - # Only exists on Windows 2000 or later, ignored on Windows NT - _svc_description_ = SERVICE_DESCRIPTION - - def SvcDoRun(self): - from cheroot import wsgi - from pyramid.paster import get_app - from pyramid.paster import setup_logging - import os, sys - - path = os.path.dirname(os.path.abspath(__file__)) - print(path) - os.chdir(path) - - app = get_app(CONFIG_FILE) - setup_logging(CONFIG_FILE) - - - self.server = wsgi.Server( - ('0.0.0.0', PORT_TO_BIND), app, - server_name=SERVER_NAME) - - self.server.start() - - - def SvcStop(self): - self.server.stop() - - -if __name__ == '__main__': - win32serviceutil.HandleCommandLine(PyWebService) diff --git a/setup.py b/setup.py index a78b8a1..76686d6 100644 --- a/setup.py +++ b/setup.py @@ -10,8 +10,8 @@ with open(os.path.join(here, 'CHANGES.txt')) as f: requires = [ 'pyramid', - # 'pyramid_jinja2', 'pyramid_chameleon', + 'pyramid_mako==0.3.1', # bug dans pserve --reload 'pyramid_debugtoolbar', 'pyramid_layout', 'pyramid_mailer', @@ -23,6 +23,7 @@ requires = [ 'mysqlclient', 'python-dateutil', 'docutils', + 'user-agents', ] tests_require = [