def createAccountExt(account, password):
    """
    Méthode permettant de créer un compte via l'API BSS en lui passant en
    paramètre les informations concernant un compte ainsi qu'une empreinte de
    mot de passe.

    :param Account account: l'objet contenant les informations du compte \
            utilisateur
    :param str password: l'empreinte du mot de passe de l'utilisateur

    :raises ServiceException: la requête vers l'API a echoué. L'exception \
            contient le code de l'erreur et le message.
    :raises NameException: le nom du compte n'est pas une adresse mail valide, \
            ou le mot de passe spécifié n'est pas une empreinte.
    :raises DomainException: le domaine de l'adresse mail n'est pas un domaine \
            valide.
    """

    if not re.search(r'^\{\S+\}', password):
        raise NameException(
            "Le format de l'empreinte du mot de passe " +
            "n'est pas correcte ; format attendu : {algo}empreinte")

    data = account.toData()
    data.update({
        'password': '',
        'userPassword': password,
    })
    response = callMethod(services.extractDomain(account.name),
                          'CreateAccount', data)
    if not utils.checkResponseStatus(response['status']):
        raise ServiceException(response['status'], response['message'])
Esempio n. 2
0
def getAllCOS(domain, limit=100, offset=0, ldapQuery=""):
    """
    Permet de rechercher toutes les classes de service d'un domain

    :param domain: le domaine de la recherche
    :param limit: le nombre de résultats renvoyés (optionnel)
    :param offset: le nombre à partir duquel les comptes sont renvoyés (optionnel)
    :param ldapQuery: un filtre ldap pour affiner la rechercher (optionnel)
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises DomainException: Exception levée si le domaine n'est pas un domaine valide
    """
    if not utils.checkIsDomain(domain):
        raise DomainException
    data = {"limit": limit, "offset": offset, "ldap_query": ldapQuery}
    response = callMethod(domain, "GetAllCos", data)
    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])
    if len(response["coses"]) == 1:
        return []
    else:
        coses = response["coses"]["cose"]
        retCoses = []
        if isinstance(coses, list):
            for cos in coses:
                retCoses.append(fillCOS(cos))
        else:
            retCoses.append(fillCOS(coses))
        return retCoses
def setPassword(name, newPassword):
    if not utils.checkIsMailAddress(name):
        raise NameException("L'adresse mail " + name + " n'est pas valide")
    data = {"name": name, "password": newPassword}
    response = callMethod(services.extractDomain(name), "SetPassword", data)
    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])
def modifyAccount(account):
    """
    Permet de modifier un compte via l'API

    :param account: un objets compte avec les attributs à changer
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail preSupprimé
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """
    response = callMethod(services.extractDomain(account.name),
                          "ModifyAccount", account.toData())
    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])
def deleteAccount(name):
    """
    Permet de supprimer un compte

    :param name: Nom du compte à supprimer
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail valide
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """
    if not utils.checkIsMailAddress(name):
        raise NameException("L'adresse mail " + name + " n'est pas valide")
    data = {"name": name}
    response = callMethod(services.extractDomain(name), "DeleteAccount", data)
    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])
def renameAccount(name, newName):
    """
    Permet de renommer un compte :param name: nom du compte à renommer :param newName: le nouveau nom du compte

    :param name: le nom du compte à renommer
    :param newName: le nouveau nom du compte
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail preSupprimé
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """
    if not utils.checkIsMailAddress(name) or not utils.checkIsMailAddress(
            newName):
        raise NameException("L'adresse mail n'est pas valide")
    data = {"name": name, "newname": newName}
    response = callMethod(services.extractDomain(name), "RenameAccount", data)
    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])
Esempio n. 7
0
def getCOS(domain, name):
    """
    Méthode permettant de récupérer les informations d'une classe de service via l'API BSS

    :return: La classe de service récupérée ou None si la classe de service n'existe pas
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail valide
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """

    data = {"name": name}
    response = callMethod(domain, "GetCos", data)
    if utils.checkResponseStatus(response["status"]):
        cos = response["cos"]
        return fillCOS(cos)
    elif re.search(".*no such cos.*", response["message"]):
        return None
    else:
        raise ServiceException(response["status"], response["message"])
def removeAccountAlias(name, aliasToDelete):
    """
    Méthode permettant de supprimer un alias d'un compte

    :param name: le nom du compte
    :param aliasToDelete: l'alias a supprimer
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail preSupprimé
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """
    if not utils.checkIsMailAddress(name) or not utils.checkIsMailAddress(
            aliasToDelete):
        raise NameException("L'adresse mail " + name + " ou " + aliasToDelete +
                            " n'est pas valide")
    data = {"name": name, "alias": aliasToDelete}
    response = callMethod(services.extractDomain(name), "RemoveAccountAlias",
                          data)
    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])
def getAccount(name):
    """
    Méthode permettant de récupérer les informations d'un compte via l'API BSS

    :return: Le compte récupéré ou None si le compte n'existe pas
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail valide
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """
    if not utils.checkIsMailAddress(name):
        raise NameException("L'adresse mail " + name + " n'est pas valide")
    data = {"name": name}
    response = callMethod(services.extractDomain(name), "GetAccount", data)
    if utils.checkResponseStatus(response["status"]):
        account = response["account"]
        return fillAccount(account)
    elif re.search(".*no such account.*", response["message"]):
        return None
    else:
        raise ServiceException(response["status"], response["message"])
def modifyPassword(name, newUserPassword):
    """
    Pour modifier le mot de passe on n'accepte que l'empreinte du mot de passe.
    On commence par faire un SetPassword avec une valeur factice pour forcer la déconnexion des sessions en cours
    On passe ensuite via ModifyAccount l'empreinte du nouveau mot de passe

    :param newUserPassword:
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail preSupprimé
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """
    if not re.search(r'^\{\S+\}', newUserPassword):
        raise NameException(
            "Le format de l'empreinte du mot de passe n'est pas correcte ; format attendu : {algo}empreinte"
        )
    if not utils.checkIsMailAddress(name):
        raise NameException("L'adresse mail " + name + " n'est pas valide")
    setPassword(name, "valeurPourDeconnecterLesSessions")
    data = {"name": name, "userPassword": newUserPassword}
    response = callMethod(services.extractDomain(name), "ModifyAccount", data)
    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])
def createAccount(name, userPassword, cosId, account=None):
    """
    Méthode permettant de créer un compte via l'API BSS en lui passant en paramètre l'empreinte du mot de passe (SSHA) et le cosId

    :param userPassword: l'empreine du mot de passe de l'utilisateur
    :param cosId: l'identifiant du cosId à appliquer pour le compte
    :param account: objet account contenant les informations à ajouter dans le compte (optionnel)
    :return: Le compte créé
    :raises ServiceException: Exception levée si la requête vers l'API à echoué. L'exception contient le code de l'erreur et le message
    :raises NameException: Exception levée si le nom n'est pas une adresse mail valide
    :raises DomainException: Exception levée si le domaine de l'adresse mail n'est pas un domaine valide
    """

    if not re.search(r'^\{\S+\}', userPassword):
        raise NameException(
            "Le format de l'empreinte du mot de passe n'est pas correcte ; format attendu : {algo}empreinte"
        )

    if not utils.checkIsMailAddress(name):
        raise NameException("L'adresse mail " + name + " n'est pas valide")

    data = {
        "name": name,
        "password": "",
        "userPassword": userPassword,
        "zimbraHideInGal": "FALSE",
        "zimbraCOSId": cosId
    }
    response = callMethod(services.extractDomain(name), "CreateAccount", data)

    if not utils.checkResponseStatus(response["status"]):
        raise ServiceException(response["status"], response["message"])

    if account is not None:
        modifyAccount(account)

    return getAccount(name)
def test_checkResponseStatus_casFalse1():
    test_int = OrderedDict()
    test_int["type"] = "integer"
    test_int["content"] = "1"
    assert not checkResponseStatus(test_int)
def test_checkResponseStatus_casTrue0():
    test_int = OrderedDict()
    test_int["type"] = "integer"
    test_int["content"] = "0"
    assert checkResponseStatus(test_int)