erregistroak gehitzen
This commit is contained in:
		
							parent
							
								
									35584086da
								
							
						
					
					
						commit
						d82d827079
					
				
							
								
								
									
										49
									
								
								app.py
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								app.py
									
									
									
									
									
								
							| @ -86,6 +86,13 @@ def get_index(): | ||||
|     except Exception as e: | ||||
|         return index_tpl(str=i18n.str) | ||||
| 
 | ||||
| @get('/logs') | ||||
| def get_index(): | ||||
|     try: | ||||
|         return logs_tpl(data=newSession().get(), str=i18n.str) | ||||
|     except Exception as e: | ||||
|         return index_tpl(str=i18n.str) | ||||
| 
 | ||||
| @get('/delete') | ||||
| def get_index(): | ||||
|     try: | ||||
| @ -93,6 +100,7 @@ def get_index(): | ||||
|     except Exception as e: | ||||
|         return index_tpl(str=i18n.str) | ||||
| 
 | ||||
| 
 | ||||
| @get('/logout') | ||||
| def get_index(): | ||||
| 
 | ||||
| @ -342,6 +350,9 @@ def edit_fullname_tpl(**kwargs): | ||||
| def delete_tpl(**kwargs): | ||||
|     return template('delete', **kwargs) | ||||
| 
 | ||||
| def logs_tpl(**kwargs): | ||||
|     return template('logs', **kwargs) | ||||
| 
 | ||||
| def connect_ldap(conf, **kwargs): | ||||
|     server = Server(host=conf['host'], | ||||
|                     port=conf.getint('port', None), | ||||
| @ -398,9 +409,11 @@ def login_user_ldap(conf, username, password): | ||||
|     # Note: raises LDAPUserNameIsMandatoryError when user_dn is None. | ||||
|     with connect_ldap(conf, authentication=SIMPLE, user=user_dn, password=password) as c: | ||||
|         c.bind() | ||||
|         update_login_info(conf, user_dn) | ||||
|         newSession().set(get_user_data(user_dn, c)) | ||||
|         LOG.debug("%s logged in to %s" % (username, conf['base'])) | ||||
|         if is_trusted_device(conf, user_dn): | ||||
|             newSession().set(get_user_data(user_dn, c)) | ||||
|             #update timestamp + ip address | ||||
|             update_login_info(conf, user_dn)         | ||||
|             LOG.debug("%s logged in to %s" % (username, conf['base'])) | ||||
| 
 | ||||
| #LOGOUT | ||||
| def logout(username): | ||||
| @ -804,7 +817,7 @@ def get_user_email_array(user_dn, conn, old_email, new_email): | ||||
| 
 | ||||
| def get_user_data(user_dn, conn): | ||||
|     search_filter = '(objectClass=*)' | ||||
|     conn.search(user_dn, search_filter, attributes=['active','fakeCn','givenName','sn','uid','mail','devices']) | ||||
|     conn.search(user_dn, search_filter, attributes=['active','fakeCn','givenName','sn','uid','mail','devices','ip','lastLogin']) | ||||
|     data = [] | ||||
|     data.append(conn.entries[0].active.values[0]) | ||||
|     data.append(conn.entries[0].fakeCn.values[0]) | ||||
| @ -813,6 +826,12 @@ def get_user_data(user_dn, conn): | ||||
|     data.append(conn.entries[0].uid.values[0]) | ||||
|     data.append(conn.entries[0].mail.values[0]) | ||||
|     data.append(conn.entries[0].devices.values) | ||||
|     data.append(conn.entries[0].ip.values[0]) | ||||
|     #ts = conn.entries[0].lastLogin.values[0] | ||||
|     #ts = datetime.strptime(ts, '%Y-%m-%d %H:%M:%S%z') | ||||
|     #ts = datetime.strftime(t, '%Y-%m-%d %H:%M:%S') | ||||
|     data.append(str(conn.entries[0].lastLogin.values[0])[:-6]) | ||||
| 
 | ||||
|     return(data) | ||||
| 
 | ||||
| def read_config(): | ||||
| @ -843,16 +862,26 @@ def get_dev(): | ||||
|     user_agent = parse(ua_string) | ||||
|     return str(user_agent) | ||||
| 
 | ||||
| def is_trusted_device(conf, user_dn): | ||||
|     superUser = SuperUsers(conf) | ||||
|     with connect_ldap(conf, user=superUser.admin_dn, password=superUser.admin_pwd) as c: | ||||
|         d = get_dev() | ||||
|         if not find_device(conf, c, d): | ||||
|             OBJECT_CLASS = ['top', 'inetOrgPerson', 'posixAccount', 'accountsManagement'] | ||||
|             c.modify(user_dn, {'devices': [( MODIFY_ADD, d )] }) | ||||
|         c.unbind() | ||||
|         return True | ||||
| 
 | ||||
| def update_login_info(conf, user_dn): | ||||
|     superUser = SuperUsers(conf) | ||||
|     with connect_ldap(conf, user=superUser.admin_dn, password=superUser.admin_pwd) as c: | ||||
|         ip = request.environ.get('HTTP_X_REAL_IP', request.remote_addr) | ||||
|         t = datetime.now().strftime('%Y%m%d%H%M%S')+'Z'  | ||||
|         c.modify(user_dn, {'ip': [( MODIFY_REPLACE, str(ip) )], 'lastLogin': [( MODIFY_REPLACE, t )] }) | ||||
|         d = get_dev() | ||||
|         if not find_device(conf, c, d): | ||||
|             OBJECT_CLASS = ['top', 'inetOrgPerson', 'posixAccount', 'accountsManagement'] | ||||
|             c.modify(user_dn, {'devices': [( MODIFY_ADD, d )] }) | ||||
|         #d = get_dev() | ||||
|         #if not find_device(conf, c, d): | ||||
|             #OBJECT_CLASS = ['top', 'inetOrgPerson', 'posixAccount', 'accountsManagement'] | ||||
|             #c.modify(user_dn, {'devices': [( MODIFY_ADD, d )] }) | ||||
|         c.unbind() | ||||
| 
 | ||||
| class Error(Exception): | ||||
| @ -893,6 +922,8 @@ def newSession(): | ||||
|             self.username = data[4] | ||||
|             self.mail = data[5] | ||||
|             self.devices = data[6] | ||||
|             self.ip = data[7] | ||||
|             self.lastLogin = data[8] | ||||
| 
 | ||||
|             self.data['active'] = self.active | ||||
|             self.data['fakeCn'] = self.fakeCn | ||||
| @ -901,6 +932,8 @@ def newSession(): | ||||
|             self.data['username'] = self.username | ||||
|             self.data['mail'] = self.mail | ||||
|             self.data['devices'] = self.devices | ||||
|             self.data['ip'] = self.ip | ||||
|             self.data['lastLogin'] = self.lastLogin | ||||
| 
 | ||||
|         def close(self): | ||||
|             self.data.pop('username') | ||||
|  | ||||
							
								
								
									
										51
									
								
								logs.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								logs.tpl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|     <meta name="robots" content="noindex, nofollow"> | ||||
| 
 | ||||
|     <title>{{ str['edit-email'] }}</title> | ||||
| 
 | ||||
|     <link rel="stylesheet" href="{{ url('static', filename='style.css') }}"> | ||||
|   </head> | ||||
| 
 | ||||
|   <body> | ||||
|     <main> | ||||
|       <h1>{{ str['edit-email'] }}Erregistroak</h1> | ||||
| 
 | ||||
|       <form name="editEmailForm" method="post" action="/edit_email"> | ||||
| 
 | ||||
|         <label for="email">{{ str['email'] }}</label> | ||||
|         <input id="email" name="email" type="text" value="{{ data['mail'] }}" required> | ||||
| 
 | ||||
|         <div class="form-buttons"> | ||||
|           <a href="/user"><button class="green" type="button">{{ str['back'] }}</button></a> | ||||
|           <button class="green" type="submit">{{ str['update'] }}</button> | ||||
|         </div> | ||||
| 
 | ||||
|       </form> | ||||
|         <div class="logs"> | ||||
|             <div class="last-login"> | ||||
|                 <h5>Last login</h5> | ||||
|                 <p>{{ data['ip'] }}</p> | ||||
|                 <p>{{ data['lastLogin'] }}</p> | ||||
|             </div> | ||||
|             <div class="device-list"> | ||||
|                 <h5>Devices</h5> | ||||
|                 <li>PC / Linux / Firefox 102.0</li> | ||||
|                 <li>Samsung A5 2016 / Android 10 / Chrome</li> | ||||
|                 <li>Iphone 5S / Iphone 11 / Safari 12</li> | ||||
|             </div> | ||||
|         </div> | ||||
| 
 | ||||
|       %for type, text, animation in get('alerts', []): | ||||
|       <div class="alerts {{ animation }}"> | ||||
|           <div class="alert {{ type }}">{{ text }}</div> | ||||
|       </div> | ||||
|       %end | ||||
|        | ||||
|     </main> | ||||
|   </body> | ||||
| </html> | ||||
| @ -35,7 +35,7 @@ form[name="fullNameForm"] input{ | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| form { | ||||
| form, .logs { | ||||
| /*  border-radius: 0.2rem; | ||||
|   border: 1px solid #CCC;*/ | ||||
|   margin: 0 auto; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user