J’utilise l’API /users/{domainUid}/byLogin/{login} de la manière suivante :
je me connecte à Bluemind
je fais un “try it out” avec les bons paramètres
je copie la commande curl obtenue et je la mets dans un script bash par exemple.
Le script fonctionne pendant un certain temps ensuite j’ai un message me disant que j’ai perdu la session :
{“errorCode”:“FORBIDDEN”,“errorType”:“ServerFault”,“message”:“session id is not valid”}
Lorsque je reviens sur l’interface bluemind j’ai effectivement ma session fermée, je la rouvre et je génère de nouveau la commande curl qui a un autre X-BM-ApiKey. Si je colle ce X-BM-ApiKey dans le script bash à la place de l’ancien tout refonctionne. J’en déduit que ce X-BM-ApiKey fonctionne comme un sessionid.
Ma question est donc la suivante : comment hors bluemind ouvrir une session pour que je puisse avoir un X-BM-ApiKey de telle sorte que je puisse utiliser la fonction mentionnée dans le sujet ?
La fonction curl fonctionne bien avec l’API
curl -X POST --header ‘Content-Type: application/json’ --header ‘Accept: text/html’ -d ‘admin’ ‘https:///api/auth/login?login=admin@domain.com’
mais la request url correspondante fournit par la doc API ne fonctionne pas
https:///api/auth/login?login=admin@domain.com
Ca fonctionne je fait d’abord une requête auth, je récupère la authKey de la réponse, je mets cette authKey à la place de X-BM-ApiKey et la requête /users/{domainUid}/byLogin/{login} fonctionne.
Merci Tommy.
Pour amichel si ça peut t’aider voici la requête auth :
En fait j’ai compris mon erreur, je testais l’URL avec le REST Client de Firefox et dans body je passais mon password sans le mettre entre double quote “password”.
Or le format attendu par l’API en mode POST pour les paramètres d’entrée est du json … il est impératif de les mettre entre double quote.
Pour ceux que ça intéresse voici un script bash qui permet de modifier les mots de passe d’une liste d’utilisateurs (sans le nom de domaine) se trouvant dans le fichier bm-mails-sorted.txt
#!/bin/bash
On se connecte en tant qu’admin du domaine mondomain.com.
res=curl -X POST -k --header 'Content-Type: application/json' --header 'Accept: application/json' -d '"<motdepasse>"' 'https://<BM server>/api/auth/login?login=admin@mondomain.com'
authKey=echo $res | sed -ne 's/.*"authKey":"\(-a-zA-Z0-9]*\)".*/\1/p'
On va construire un fichier csv “login sans le nom de domaine;uid bluemind”.
rm -f bm-mail-uid.txt
while read ligne
do
adresse=“https:///api/users/mondomain.com/byEmail/$ligne%40mondomain.com”
res=curl -X GET --header 'Accept: application/json' --header "'X-BM-ApiKey: $authKey'" $adresse
res1=echo $res | sed -ne 's/.*"uid":"\(-a-zA-Z0-9]*\)".*/\1/p'
echo “$ligne;$res1” >> bm-mail-uid.txt
done < bm-mails-sorted.txt
On va lire le fichier précédent et on va construire un autre fichier CSV : “login sans le nom de domaine;uid bluemind;mot de passe”
Si en tant qu’admin on ne donne pas l’ancien password, l’API modifie quand même le mot de passe (ce qui est pratique).