def authbasic(request): """ Authentification basic, Upload pyshop repository access """ if len(request.environ.get('HTTP_AUTHORIZATION', '')) > 0: transaction.manager auth = request.environ.get('HTTP_AUTHORIZATION') scheme, data = auth.split(None, 1) assert scheme.lower() == 'basic' data = base64.b64decode(data) if not isinstance(data, unicode): data = data.decode('utf-8') username, password = data.split(':', 1) # if User.by_ldap_credentials( # DBSession(), username, password, request.registry.settings): # return HTTPFound(location=request.url) # if User.by_credentials(DBSession(), username, password): # return HTTPFound(location=request.url) # if user: # return HTTPFound(location=request.url) user = None session = DBSession() if request.registry.settings["pyshop.ldap.use_for_auth"]: user = User.by_ldap_credentials(session, username, password, request.registry.settings) if user: user = User.by_login(session, username) else: user = User.by_login(session, username) if user: session.delete(user) user = None else: user = User.by_credentials(session, username, password) # if user: # return HTTPFound(location=request.url) if user: group_names = [] for group in user.groups: group_names.append(group.name) transaction.commit() if request.matched_route: print("*" * 200) print(request.matched_route.name) if request.matched_route.name in ["upload_releasefile"]: if not "developer" in group_names: return Response( status=401, headerlist=[ (b'WWW-Authenticate', b'Basic realm="pyshop repository access"') ], ) return HTTPFound(location=request.url) else: return Response( status=402, headerlist=[(b'WWW-Authenticate', b'Basic realm="pyshop repository access"')], ) return Response( status=401, headerlist=[(b'WWW-Authenticate', b'Basic realm="pyshop repository access"')], )