Difficoltà a comprendere la documentazione API

Installazione, configurazione generale, notifiche, API, lingue, problemi server
Post Reply
User avatar
SimoneSola97
Newbie
Posts: 23
Joined: Mon May 18, 2020 5:31 pm

Difficoltà a comprendere la documentazione API

Post by SimoneSola97 »

Buongiorno,
Dopo essere riuscito a far funzionare le API sul mio server, ho difficoltà con l'implementazione dell'API per la creazione degli utenti. Cito, dalla documentazione, quanto non mi è chiaro (e cosa presumo non faccia funzionare il tutto):
To obtain the “<code>” value (that must be concatenated after the “FormaLMS” string) it is requested to proceed as follows:
create sha1 encoding of this concatenation: post values in the list and separated by comma, the comma itself, the secret key (“secret”)
generate the "<code>" through a base64 encoding of the “key” concatenation and with the “:” element, plus the token previously generated.
Che cosa si intende con "$params"? E come vanno scritti nello script? Sono parametri diversi da quelli che vanno passati all'API /api/user/createuser (userid, firstname...)? L'errore che ottengo è "Error: unable to create new user.". Posto il codice da me creato:

Code: Select all

<?php

$params = ""; // NON SO COSA INSERIRE QUI
$secret = "<CANCELLATO PER ESSERE POSTATO SUL FORUM>"; // PRESO DALLA PIATTAFORMA NELLA SEZIONE "API ED AUTENTICAZIONE"
$key = "<CANCELLATO PER ESSERE POSTATO SUL FORUM>"; // DA ME DEFINITO IN PIATTAFORMA NELLA SEZIONE "API ED AUTENTICAZIONE"

$codice_sha1 = strtolower(sha1(implode(',', $params) . ',' . $secret)); 
$codice = base64_encode($key . ':' . $codice_sha1);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "<MIO DOMINIO>/api/user/create?userid=a.verdirame&firstname=Augusto&lastname=Verdirame&password=SignorBecchi123&email=a.verdirame@gmail.com&role=user&valid=1",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => array(
    "X-Authorization: FormaLMS " . $codice
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;


?>
Vi ringrazio per eventuali delucidazioni

alfa24
Senior Boarder
Posts: 998
Joined: Fri Nov 24, 2017 8:45 am
Version: forma.lms 1.4.2

Re: Difficoltà a comprendere la documentazione API

Post by alfa24 »

Devi crearti un layer API. La teoria è quella di qualsiasi API REST.
Non è difficile, ma se non hai una buona conoscenza (teorica) di REST, la vedo dura...
I'm Jasmines, the One. If you need, you can contact me.

User avatar
SimoneSola97
Newbie
Posts: 23
Joined: Mon May 18, 2020 5:31 pm

Re: Difficoltà a comprendere la documentazione API

Post by SimoneSola97 »

alfa24 wrote:
Mon Sep 21, 2020 2:53 pm
Devi crearti un layer API. La teoria è quella di qualsiasi API REST.
Non è difficile, ma se non hai una buona conoscenza (teorica) di REST, la vedo dura...
In passato ho usato moltissime volte le tecnologie API RESTful. Banalmente, non riesco a capire cosa significhi "$params", dato che viene riportato nella guida ed indica che i valori devono essere separati da virgola. Cosa significa? Nel codice da me postato ci sono errori?
Grazie per il supporto.

alfa24
Senior Boarder
Posts: 998
Joined: Fri Nov 24, 2017 8:45 am
Version: forma.lms 1.4.2

Re: Difficoltà a comprendere la documentazione API

Post by alfa24 »

In base all'API che chiami, questa vuole in input dei parametri.
Es.: nella call auth/authenticate i parametri sono 2, 'username' e 'password'.
I'm Jasmines, the One. If you need, you can contact me.

User avatar
SimoneSola97
Newbie
Posts: 23
Joined: Mon May 18, 2020 5:31 pm

Re: Difficoltà a comprendere la documentazione API

Post by SimoneSola97 »

alfa24 wrote:
Mon Sep 21, 2020 3:24 pm
In base all'API che chiami, questa vuole in input dei parametri.
Es.: nella call auth/authenticate i parametri sono 2, 'username' e 'password'.
Questo mi è perfettamente chiaro. Nell'API /createuser i parametri sono ben di più, e mi è chiaro cosa vada passato, il problema è come! Non riesco a capire cosa significhi che vadano inseriti i post values separati da virgola

alfa24
Senior Boarder
Posts: 998
Joined: Fri Nov 24, 2017 8:45 am
Version: forma.lms 1.4.2

Re: Difficoltà a comprendere la documentazione API

Post by alfa24 »

$params = array('username'=>'XXXX','password'=>'YYYY');
I'm Jasmines, the One. If you need, you can contact me.

User avatar
SimoneSola97
Newbie
Posts: 23
Joined: Mon May 18, 2020 5:31 pm

Re: Difficoltà a comprendere la documentazione API

Post by SimoneSola97 »

alfa24 wrote:
Mon Sep 21, 2020 3:45 pm
$params = array('username'=>'XXXX','password'=>'YYYY');
Grazie per queste veloci risposte, molto esaustive. Avevo fatto svariati tentativi, anche come da te mostrato, purtroppo l'errore che riscontro è "Disallowed key characters in global data.", qualsiasi cosa io metta in $params.
Grazie per l'aiuto.

alfa24
Senior Boarder
Posts: 998
Joined: Fri Nov 24, 2017 8:45 am
Version: forma.lms 1.4.2

Re: Difficoltà a comprendere la documentazione API

Post by alfa24 »

Non è possibile debuggare un'applicazione così, su un forum.
Quello che posso dirti è che la libreria filterinput di Forma contiene la seguente:

protected function clean_input_keys($str) {
if ( ! preg_match('#^[&a-zA-Z0-9\.\/\\:_\s-]+$#uD', $str)) {
exit('Disallowed key characters in global data.');
}

return $str;
}

richiamata da clean_input_data, richiamata a sua volta da clean e sanitize, ecc. ecc. dovresti andare a ritroso e capire qual è l'input che contiene i caratteri non ammessi... Insomma è un gioco al contrario.
I'm Jasmines, the One. If you need, you can contact me.

User avatar
SimoneSola97
Newbie
Posts: 23
Joined: Mon May 18, 2020 5:31 pm

Re: Difficoltà a comprendere la documentazione API

Post by SimoneSola97 »

alfa24 wrote:
Mon Sep 21, 2020 4:05 pm
Non è possibile debuggare un'applicazione così, su un forum.
Quello che posso dirti è che la libreria filterinput di Forma contiene la seguente:

protected function clean_input_keys($str) {
if ( ! preg_match('#^[&a-zA-Z0-9\.\/\\:_\s-]+$#uD', $str)) {
exit('Disallowed key characters in global data.');
}

return $str;
}

richiamata da clean_input_data, richiamata a sua volta da clean e sanitize, ecc. ecc. dovresti andare a ritroso e capire qual è l'input che contiene i caratteri non ammessi... Insomma è un gioco al contrario.
Grazie per le informazioni, scriverò qualora avessi ulteriori problemi o mi servissero ulteriori delucidazioni.
Saluti

marco987
Newbie
Posts: 18
Joined: Wed Oct 07, 2020 11:34 am
Version: forma.lms 2.3

Re: Difficoltà a comprendere la documentazione API

Post by marco987 »

Ciao Simone. Sei riuscito poi a far funzionare le API? Io non riesco... Anche partendo dal tuo codice :roll:

SimoneSola97 wrote:
Mon Sep 21, 2020 2:06 pm
Buongiorno,
Dopo essere riuscito a far funzionare le API sul mio server, ho difficoltà con l'implementazione dell'API per la creazione degli utenti. Cito, dalla documentazione, quanto non mi è chiaro (e cosa presumo non faccia funzionare il tutto):
To obtain the “<code>” value (that must be concatenated after the “FormaLMS” string) it is requested to proceed as follows:
create sha1 encoding of this concatenation: post values in the list and separated by comma, the comma itself, the secret key (“secret”)
generate the "<code>" through a base64 encoding of the “key” concatenation and with the “:” element, plus the token previously generated.
Che cosa si intende con "$params"? E come vanno scritti nello script? Sono parametri diversi da quelli che vanno passati all'API /api/user/createuser (userid, firstname...)? L'errore che ottengo è "Error: unable to create new user.". Posto il codice da me creato:

Code: Select all

<?php

$params = ""; // NON SO COSA INSERIRE QUI
$secret = "<CANCELLATO PER ESSERE POSTATO SUL FORUM>"; // PRESO DALLA PIATTAFORMA NELLA SEZIONE "API ED AUTENTICAZIONE"
$key = "<CANCELLATO PER ESSERE POSTATO SUL FORUM>"; // DA ME DEFINITO IN PIATTAFORMA NELLA SEZIONE "API ED AUTENTICAZIONE"

$codice_sha1 = strtolower(sha1(implode(',', $params) . ',' . $secret)); 
$codice = base64_encode($key . ':' . $codice_sha1);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "<MIO DOMINIO>/api/user/create?userid=a.verdirame&firstname=Augusto&lastname=Verdirame&password=SignorBecchi123&email=a.verdirame@gmail.com&role=user&valid=1",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => array(
    "X-Authorization: FormaLMS " . $codice
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;


?>
Vi ringrazio per eventuali delucidazioni
Marco
Web Developer

Post Reply