def gateway_groups_middleware()

in django_airavata/apps/auth/middleware.py [0:0]


def gateway_groups_middleware(get_response):
    """Add 'is_gateway_admin' and 'is_read_only_gateway_admin' to request."""
    def middleware(request):

        request.is_gateway_admin = False
        request.is_read_only_gateway_admin = False

        if (not request.user.is_authenticated or
            not request.authz_token or
            (hasattr(request.user, "user_profile") and
                not request.user.user_profile.is_complete)):
            return get_response(request)

        try:
            # Load the GatewayGroups and check if user is in the Admins and/or
            # Read Only Admins groups
            if not request.session.get('GATEWAY_GROUPS'):
                gateway_groups = request.airavata_client.getGatewayGroups(
                    request.authz_token)
                gateway_groups_dict = copy.deepcopy(gateway_groups.__dict__)
                request.session['GATEWAY_GROUPS'] = gateway_groups_dict
            set_admin_group_attributes(request, gateway_groups=request.session.get("GATEWAY_GROUPS"))
            # Gateway Admins are made 'superuser' in Django so they can edit
            # pages in the CMS
            if request.is_gateway_admin and (
                not request.user.is_superuser or
                    not request.user.is_staff):
                request.user.is_superuser = True
                request.user.is_staff = True
                request.user.save()
        except Exception as e:
            log.warning("Failed to set is_gateway_admin, "
                        "is_read_only_gateway_admin for user", exc_info=e)

        return get_response(request)
    return middleware