Example #1
0
    def service(self, service, host, partial, noCache):
        """
        Auto-compléteur pour les noms des services d'un hôte.

        @param host: Nom d'hôte (optionnel) sur lequel s'applique
            l'autocomplétion.
        @type  host: C{unicode}
        @param service: Motif qui doit apparaître dans le nom de service.
        @type  service: C{unicode}
        @note: Les caractères '?' et '*' peuvent être utilisés dans
            le paramètre L{service} pour remplacer un caractère quelconque
            ou une chaîne de caractères, respectivement.
            Ex: 'ho?t*' permet de récupérer 'host', 'honte' et 'hostile',
            mais pas 'hote' ou 'hopital'.
        @return: Un dictionnaire dont la clé 'results' contient la liste
            des noms de services configurés sur L{host} (ou sur n'importe
            quel hôte si L{host} vaut None), correspondant au motif donné
            et auxquels l'utilisateur a accès.
        @rtype: C{dict}
        """
        service = sql_escape_like(service)
        user = get_current_user()
        if not user:
            return dict(results=[])

        if partial:
            service += "%"

        hostgroup = SUPITEM_GROUP_TABLE.alias()
        servicegroup = SUPITEM_GROUP_TABLE.alias()
        services = (
            DBSession.query(LowLevelService.servicename)
            .distinct()
            .outerjoin(
                (Host, Host.idhost == LowLevelService.idhost),
                (hostgroup, hostgroup.c.idsupitem == Host.idhost),
                (servicegroup, servicegroup.c.idsupitem == LowLevelService.idservice),
            )
            .filter(LowLevelService.servicename.ilike(service))
            .order_by(LowLevelService.servicename)
        )

        if not config.is_manager.is_met(request.environ):
            user_groups = [ug[0] for ug in user.supitemgroups() if ug[1]]
            services = services.filter(
                or_(hostgroup.c.idgroup.in_(user_groups), servicegroup.c.idgroup.in_(user_groups))
            )

        if host:
            services = services.filter(Host.name == host)

        services = services.all()
        return dict(results=[s.servicename for s in services])
Example #2
0
    def host(self, host, partial, noCache):
        """
        Auto-compléteur pour les noms d'hôtes.

        @param host: Motif qui doit apparaître dans le nom de l'hôte.
        @type  host: C{unicode}
        @note: Les caractères '?' et '*' peuvent être utilisés dans
            le paramètre L{host} pour remplacer un caractère quelconque
            ou une chaîne de caractères, respectivement.
            Ex: 'ho?t*' permet de récupérer 'host', 'honte' et 'hostile',
            mais pas 'hote' ou 'hopital'.
        @return: Un dictionnaire dont la clé 'results' contient la liste
            des noms d'hôtes correspondant au motif donné en entrée
            et auxquels l'utilisateur a accès.
        @rtype: C{dict}
        """
        host = sql_escape_like(host)
        user = get_current_user()
        if not user:
            return dict(results=[])

        if partial:
            host += "%"

        hostgroup = SUPITEM_GROUP_TABLE.alias()
        servicegroup = SUPITEM_GROUP_TABLE.alias()
        hostnames = (
            DBSession.query(Host.name)
            .distinct()
            .outerjoin(
                (hostgroup, hostgroup.c.idsupitem == Host.idhost),
                (LowLevelService, LowLevelService.idhost == Host.idhost),
                (servicegroup, servicegroup.c.idsupitem == LowLevelService.idservice),
            )
            .filter(Host.name.ilike(host))
            .order_by(Host.name)
        )

        if not config.is_manager.is_met(request.environ):
            user_groups = [ug[0] for ug in user.supitemgroups() if ug[1]]
            hostnames = hostnames.filter(
                or_(hostgroup.c.idgroup.in_(user_groups), servicegroup.c.idgroup.in_(user_groups))
            )

        hostnames = hostnames.all()
        return dict(results=[h.name for h in hostnames])