Connexion API tests

Bonjour

Je m’essaye aux API dans le but d’interagir avec wazo à terme creer des utilisateurs, lire la config etc. Un début d’un “WAZO-UI” restreint à certaines fonctions.

Je connais PHP dans j’essaye d’utiliser la méthode curl pour dialoguer

<?php

function callAPI($method, $url, $data)
	{   
	$curl = curl_init();   
	switch (strtoupper($method))
		{      
		case "POST":         
		curl_setopt($curl, CURLOPT_POST, 1);         
		if ($data)            
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);         
		break;      
		case "PUT":         
		curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");        
		if ($data)            
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);			 					         
		break;      
		default:         
		if ($data)            
		$url = sprintf("%s?%s", $url, http_build_query($data));   
		}   

	// OPTIONS:   
	curl_setopt($curl, CURLOPT_URL, $url);   
	curl_setopt($curl, CURLOPT_HTTPHEADER, array(      
		'APIKEY: 111111111111111111111',      
		'Content-Type: application/json',   
		));   
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   
	curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);   

	// EXECUTE:   
	$result = curl_exec($curl);   
	if(!$result){die("Connection Failure");}   
	curl_close($curl);   
	return $result;
	}


$data_array =  array(
      "access_type"        =>online,
      "client_id"         => administrateur:secret,
      "domain_name"         => SITE_PRINCIPAL
      ),
);
$make_call = callAPI('POST', 'https://192.168.1.202/api/auth/0.1/token', json_encode($data_array));
$response = json_decode($make_call, true);
$errors   = $response['response']['errors'];
$data     = $response['response']['data'][0];


print_r($response);
?>

Es ce que la demande de creation d’un tocken est bien correcte? Je ne comprends pas bien le passage du user/mdp dans la doc…
De plus j’ai un retour d’une erreur 101.

Merci pour votre avis

Hello,

Oulala, php, ça fait longtemps que j’en ai pas fait !

en lisant le code js, tu trouvera les options nécessaires pour initialisé ta connexion.

ça te retourne un objet session, qui contient aussi ton user
session.profile

logIn(params: {
    username: string;
    password: string;
    backend: string;
    expiration: number;
    mobile?: boolean;
    tenantId?: string;
    domainName?: string;
  }): Promise<Session | null | undefined> {
    const body: Record<string, any> = {
      backend: params.backend || DEFAULT_BACKEND_USER,
      expiration: params.expiration || DETAULT_EXPIRATION,
    };
    const headers: Record<string, any> = {
      Authorization: `Basic ${ApiRequester.base64Encode(`${params.username}:${params.password}`)}`,
      'Content-Type': 'application/json',
    };

    if (client.clientId) {
      body.access_type = 'offline';
      body.client_id = client.clientId;
    }

    if (params.mobile) {
      headers['Wazo-Session-Type'] = 'mobile';
    }

    if (params.tenantId) {
      console.warn('Use of `tenantId` is deprecated when calling logIn() method, use `domainName` instead.');
      body.tenant_id = params.tenantId;
    }

    if (params.domainName) {
      body.domain_name = params.domainName;
    }

    return client.post(`${baseUrl}/token`, body, headers).then((response: Response) => Session.parse(response));
  },

dans ton code:

curl_setopt($curl, CURLOPT_HTTPHEADER, array(      
		'APIKEY: 111111111111111111111',      
		'Content-Type: application/json',   
		));

tu devrais avoir Authorization avec le compte / mdp à authentifier

merci pour ton aide

finalement j’ai fait différement ayant un header curl adapté:

function get_data($url)
        {
        $ch = curl_init();
        $timeout = 5;
        $username = 'api_client';        // Put Username
        $password = 'secret';                                        // Put Password
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");    // Add This Line
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
        }

$url = "https://adresseip/api/auth/0.1/token";
$data = get_data($url);

print_r($data);    // For Print Value

Néanmoins je n’ai aucun retour…ce qui m’intrigue aussi c’est les logs. Dans la logique c’est wazo-auth.log, mais aucun log de ma connexion la dedans, comme si elle était pas envoyée.

Est ce que en théorie c’est la bonne URL et la bonne méthode ?

merci

euh …

un exemple:

// il faut encoder en base64 ton username et password
$myEncryptedUsername:Password // to do
$headr = array();
$headr[] = 'Content-length: 0';
$headr[] = 'Content-type: application/json';
$headr[] = 'Authorization: Basic '.$myEncryptedUsername:Password;

curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);

cheers

Si tu sais injecter du js dans ton rendu php, alors je peux t’écrire un bout de code.

L’avantage est multiple:
déporter une partie du travail sur le poste client
profiter du js-sdk
être bien plus dynamique et donc user friendly !

a part te connecter à l’api, tu souhaites faire quoi donc ?

car si tu veux te connecter avec le compte api-client, c’est plus pour faire une configuration par défaut lorsque tu créé un tenant, par exemple ?

cheers

merci de ton retour.

entretemps j’avais essayé cet autre exemple que j’avais trouvé:

$curlSecondHandler = curl_init();

$userName = 'api_client';
$password = 'secret';

curl_setopt_array($curlSecondHandler, [
    CURLOPT_URL => 'https://192.168.1.202/api/auth/0.1/token',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_HTTPHEADER => [
        'Authorization: Basic ' . base64_encode($userName . ':' . $password),
        'Content-type: application/json'
    ],
]);

$response = curl_exec($curlSecondHandler);
curl_close($curlSecondHandler);

print_r($response);

donc username/mdp en base 64, mais malheureusement pas plus de résultat…

Il doit manquer un truc mais pas grand chose probablement

Mon objectif est notamment faire de l’import massif sur des champs que wazo-ui ne gère pas avec son import. Egalement travailler avec les CDR pour des stats
Sauf erreur le sdk est orienté webrtc non?

et là

https:/192.168.1.202/api/auth/0.1/token

il manque un /
https://192.168.1.202/api/auth/0.1/token

si tu n’as pas de certificat sur ton serveur, ça peut être un soucis.
avec ton navigateur, vas sur:
https://192.168.1.202
et accepte de continuer sur ce site, puis lance ta requête

:slight_smile:

désolé mauvais copier / coller
mais les lignes étaient bien la et l’url était bien bonne :slight_smile:

et pas de soucis pour le certificat, il est ok

api_client fait parti du groupe de sécurité api-client-policy
image

il ne semble pas avoir les droits sur auth.#
essaie avec un utilisateur autre, avec les droits wazo_default_user_policy à minima
ça peut venir de là.

<?php
$hostname = "<hostname>";
$username = "<username>";
$password = "<password>";
$url = "https://$hostname/api/auth/0.1/token";

// Les données à envoyer dans le corps de la requête
$data = json_encode(["expiration" => 3600]);

// Initialiser une session cURL
$ch = curl_init();

// Configuration des options cURL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // -k option

// Exécution de la requête cURL et récupération de la réponse
$response = curl_exec($ch);

// Gestion des erreurs cURL
if(curl_errno($ch)) {
    echo 'Erreur cURL : ' . curl_error($ch);
}

// Fermeture de la session cURL
curl_close($ch);

// Affichage de la réponse
echo $response;
?>

et tu as un exemple pour avoir un token via du curl:

cheers

merci

api_client de base je ne sais pas trop a quoi il sert et effectivement il ne marche pas.

J’en ai créé un autre qui lui marche tres bien j’ai bien le retour du curl bash.

C’est générer les entête adequats via php qui pose problème, mais l’identification doit me retourner qqch

de mémoire api_client sert à créer le tenant “my_company” lors de l’installation de wazo-platform.

tu as essayé avec le code que je t’ai fourni ?
il devrait être bien formaté.

ensuite, il va te falloir gérer ton token, voir, faire du refreshtoken …

bon courage !

nb: api_client te ertourne bien un token, donc, oui, il se connecte (et normal d’ailleurs) et pourra faire uniquement des requêtes sur l’api confd.

J’ai quelques soucis qui trainent mais ce coup la connexion se fait. Pas trop compris ce qu il me manquait :frowning: mais si je pense que c’est l’activation du POST ( CURLOPT_POST) qui me posait problème puisque je l’avais pas mis, mais étant donné que c’est une requête POST…

La j’ai récupéré le token de l’utilsateur et j’ai pu l’envoyer dans une autre requete test qui permet de lister tous les utilisateurs du tenant ou j’ai eu beau retour bien complet, maintenant je n’ai plus qu’à creuser pour réussir ce que je veux faire
=> prochaine étape creer un utilisateur avec toutes les options que je veux.

j’ai également modifié les ACL pour que mon utilisateur puisse faire un peu plus de chose :slight_smile:

merci bien pour ton aide!

1 Like

Salut,

Si ça peut aider j’avais fait de quoi en php pour une interface d’administration.

Si ça peut aider.

Sylvain

Bonjour Sylvain

Merci pour ton lien, je regarderai

Merci a toi