Plugin boldSmartLock

L’hypothèse de l’encodage est intéressante. C’est possible que l’URI de redirection soit doublement encodé, et donc non valide. À vérifé lorsque tu auras recupéré les accès.

J’ai fait le test avec tous les headers

public static function testRequset(){
		$ch = curl_init();
     	$Url='https://api.boldsmartlock.com/v2/oauth/token';
        $postFields = http_build_query([
          "grant_type"=>"authorization_code",
          "code"=>"560a76f8-1e84-425f-876f-6c63eb681b30",
          "client_id"=>"xxx",
          "client_secret"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
          "redirect_uri"=>"https://cloud.jeedom.com/oauth/redirect"
		]);
		$headers = [];      
      $headers[] = 'Accept: application/json, text/plain, */*';
      $headers[] = 'Content-Type: application/x-www-form-urlencoded';
      $headers[] = 'User-Agent: axios/1.7.8';
      $headers[] = 'Content-Length: '. strlen($postFields);
      $headers[] = 'Accept-Encoding: gzip, compress, deflate, br';
		log::add('boldSmartLock','debug', 'Request: ' . $Url.json_encode($headers));
		curl_setopt($ch, CURLOPT_URL, $Url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
		$reponse = curl_exec($ch);
		curl_close($ch);
		log::add('boldSmartLock','debug', 'Reponse ' . $reponse);
		return json_decode($reponse,true);
	}

Je reçois bien le token.
Mon code est enregistrer en UTF8
@Loic est ce qu’il y a un grand delta avec ce que vous avez codé sur le service?

@mika-nt28
en fait quel est le rapport entre @Loic/cloud-jeedom et ton plugin qui n’est pas un plugin officiel ?
désolé pour le hors sujet :thinking:

J’ai créé le plugin en standalone et Bold m’a fournis des accès, mais le mode standalone n’est pas requis et il ne feront pas d’autres acces.
J’ai demandé a @loic si c’était possible par le service cloud jeedom.
Ce type de service existait deja et on a fait la bascule, mais on se trouve bloqué sur le service jeedom sans explication

OK.
dernières chose que je voix et qu’il faut vérifier

strlen($postFields) == 190 ?

que le client-id/client-secret utilisés par jeedom sont toujours valides, je suppose que c’est pas les mêmes

Oui c’est le cas

Si j’utilise le même.
Bold a remplacé l’URI autorisé

Tu peux montrer le dump de $postFields ? (En cachant les clés bien sûr) et confirmer que y a pas de caractères trop particulier dans les clés ?

@Loic a première vue ce n’est pas les headers qui pose problème.
Est ce que tu vois d’autres test que je peux faire pour faire avancer les choses ?

Non la je vois rien d’autre le soucis est coté bold ya que eux qui pourront dire la ce qui pose soucis. Surement un truc specifique a leur systeme qui pose soucis mais je vois pas la.

Je ne suis pas convaincu que le problème vienne de bold.
Il ne voit pas les requêtes.
Par contre si je récupère le code d’authentification et que je demande un code j’obtiens bien un token en retour.
Je pense que la requête ne sort pas où qu’elle n’est pas lisible.

Je t’ai mis le code que j’ai utilisé et qui me retourne le token.
Je ne sais pas si c’est directement comparable avec le service cloud ?

Y a pas de soucis a l’encodage ?

Bonjour,
La requete va quelques part c’est sur car sinon j’aurais pas un 403. Après effectivement elle peut etre intercepté par OVH mais j’en doute et ca sera pas un 403 que j’aurais, d’ailleurs on voit dans la requete : server: 'awselb/2.0', ca c’est amazon web service, on utilise pas aws nous donc forcement la requete sort et arrive chez aws.

Donc c’est sur la requête arrive chez bold après elle est peut être bloquée en entrée par un composant amazon et donc elle n’arrive pas dans leur log. Après de la a trouver pourquoi c’est bloquée, peut etre que l’ip de nos serveurs cloud est bloquée par bold/aws ca c’est possible.

Tu as essayé de reproduire la requête en JS avec le même code que le cloud -jeedom ?
Autre chose la requête cloud semble tenter une connexion en TLS

Ce n’est pas faut et effectivement l’url pointe vers des serveur amazon

J’en doute sinon le première requête ne repondérai pas non plus. Toutes fois ce n’est pas le même serveur!!

A ca peut etre la difference moi je n’ai pas de TLS dans mon code.
Je vais essayé de l’ajouté

Bon je reçois le token avec du TLS par contre je n’ai pas trouver quel version est utilisé par jeedom

	public static function testRequset(){
		$ch = curl_init();
     	$Url='https://api.boldsmartlock.com/v2/oauth/token';
        $postFields = http_build_query([
          "grant_type"=>"authorization_code",
          "code"=>"a6efc68f-ad97-431d-8b91-42e57e29a9e8",
          "client_id"=>"",
          "client_secret"=>"",
          "redirect_uri"=>"https://cloud.jeedom.com/oauth/redirect"
		]);
		$headers = [];      
      $headers[] = 'Accept: application/json, text/plain, */*';
      $headers[] = 'Content-Type: application/x-www-form-urlencoded';
      $headers[] = 'User-Agent: axios/1.7.8';
      $headers[] = 'Content-Length: '. strlen($postFields);
      $headers[] = 'Accept-Encoding: gzip, compress, deflate, br';
		log::add('boldSmartLock','debug', 'Request: ' . $Url.json_encode($headers));
		curl_setopt($ch, CURLOPT_URL, $Url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
      
//curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0); // TLS 1.0
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1); // TLS 1.1
//curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // TLS 1.2 or 1.3
		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
		$reponse = curl_exec($ch);
		curl_close($ch);
		log::add('boldSmartLock','debug', 'Reponse ' . $reponse);
		return json_decode($reponse,true);
	}

Côté cloud on utilise nodejs 20 et axios pour les requêtes sur du debian 12. Après je sais pas trop qu’elle version c’est de tls

Je ne vois pas pourquoi ses techno poserais problème

Je viens de faire le test en javascript et axios et j’obtiens bien un token
@Loic y a des différence notable avec le code que vous utilisez?
Cela confirment il que possiblement le serveur cloud jeedom serai rejeté par bold?
Comment peut ont voir avec bold car la ca dépasse un simple plugin et je ne suis pas fan d’être intermédiaire et y a certainement des informations sensible a la sécurité

var postData = {
	"grant_type":"authorization_code",
	"code":"c4ccafbb-3154-4e42-9744-bfac6cd2d01e",
	"client_id":"",
	"client_secret":"",
	"redirect_uri":"https://cloud.jeedom.com/oauth/redirect"
};

let axiosConfig = {
	headers: {
		'Accept': 'application/json, text/plain, */*',
		'Content-Type': 'application/x-www-form-urlencoded',
		'User-Agent': 'axios/1.7.8',
		'Content-Length': postData.length,
		'Accept-Encoding': 'gzip, compress, deflate, br',
	}
};

axios.post('https://api.boldsmartlock.com/v2/oauth/token', postData, axiosConfig)
.then((res) => {
  console.log("RESPONSE RECEIVED: ", res);
})
.catch((err) => {
  console.log("AXIOS ERROR: ", err);
})

C’est le même code que le cloud là globalement donc ça confirme que c’est nos ip qui semblent poser soucis…

@Loic
Je t’ai ajouté dans mes échanges avec Bold

Il suggère d’ajouter un headers

Please add this header to your requests

 Bold-Client-Token xxxxxxx

Salut,
Je comprends pas trop la je fais une requête pour avoir le token donc comment je peux le transmettre dans la requête vu que je l’ai pas ?