Example #1
0
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"')],
    )