 Holger Frey
					
					6 years ago
						Holger Frey
					
					6 years ago
					
				
				 5 changed files with 101 additions and 8 deletions
			
			
		| @ -0,0 +1,54 @@ | |||||||
|  | """ User Authentication and Authorization """ | ||||||
|  | 
 | ||||||
|  | from pyramid.security import Everyone, Authenticated | ||||||
|  | from sqlalchemy.orm.exc import NoResultFound | ||||||
|  | from pyramid.authorization import ACLAuthorizationPolicy | ||||||
|  | from pyramid.authentication import AuthTktAuthenticationPolicy | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class AuthenticationPolicy(AuthTktAuthenticationPolicy): | ||||||
|  |     """ How to authenticate users """ | ||||||
|  | 
 | ||||||
|  |     def authenticated_userid(self, request): | ||||||
|  |         """ returns the id of an authenticated user | ||||||
|  | 
 | ||||||
|  |         heavy lifting done in get_user() attached to request | ||||||
|  |         """ | ||||||
|  |         user = request.user | ||||||
|  |         if user is not None: | ||||||
|  |             return user.id | ||||||
|  | 
 | ||||||
|  |     def effective_principals(self, request): | ||||||
|  |         """ returns a list of principals for the user """ | ||||||
|  |         principals = [Everyone] | ||||||
|  |         user = request.user | ||||||
|  |         if user is not None: | ||||||
|  |             principals.append(Authenticated) | ||||||
|  |             principals.extend(user.principals) | ||||||
|  |         return principals | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_user(request): | ||||||
|  |     """ retrieves the user object by the unauthenticated user id """ | ||||||
|  |     user_id = request.unauthenticated_userid | ||||||
|  |     if user_id is None: | ||||||
|  |         return None | ||||||
|  |     try: | ||||||
|  |         user = request.repo.get_user(user_id) | ||||||
|  |         return user if user.is_active else None | ||||||
|  |     except NoResultFound: | ||||||
|  |         return None | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def includeme(config): | ||||||
|  |     """ initializing authentication and authorization for the Pyramid app | ||||||
|  | 
 | ||||||
|  |     Activate this setup using ``config.include('ordr2.security')``. | ||||||
|  |     """ | ||||||
|  |     settings = config.get_settings() | ||||||
|  |     authn_policy = AuthenticationPolicy( | ||||||
|  |         settings["auth.secret"], hashalg="sha512", | ||||||
|  |     ) | ||||||
|  |     config.set_authentication_policy(authn_policy) | ||||||
|  |     config.set_authorization_policy(ACLAuthorizationPolicy()) | ||||||
|  |     config.add_request_method(get_user, "user", reify=True) | ||||||
					Loading…
					
					
				
		Reference in new issue