Gestion de l'accès à l'API avec tokens

This commit is contained in:
xdrm-brackets 2016-04-10 17:40:09 +02:00
parent 4b92b19d92
commit 4950f66fd9
7 changed files with 60 additions and 5 deletions

View File

@ -68,6 +68,4 @@
var_dump( $contact ); var_dump( $contact );
} }
parseCallLog();
?> ?>

View File

@ -5,7 +5,8 @@
"token": [ "token": [
"getAll" "getAll",
"check"
] ]
} }

View File

@ -216,7 +216,7 @@
return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value); return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value);
break; break;
case 'user.password': case 'sha1':
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value); return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
break; break;

View File

@ -60,6 +60,10 @@
// Erreur lors de la creation d'un objet PDO (connection) // Erreur lors de la creation d'un objet PDO (connection)
const PDOConnection = 14; const PDOConnection = 14;
/* API token */
// Token inexistant ou faux
const TokenError = 15;
/* EXPLICITE UN CODE D'ERREUR /* EXPLICITE UN CODE D'ERREUR
* *
@ -90,6 +94,8 @@
case self::PDOConnection: return "La connexion avec la base de donnees a echoue"; break; case self::PDOConnection: return "La connexion avec la base de donnees a echoue"; break;
case self::TokenError: return "Le token de connection est absent ou errone"; break;
// default: return "Erreur inconnue..."; break; // default: return "Erreur inconnue..."; break;
} }

View File

@ -137,7 +137,7 @@
public function serialize(){ public function serialize(){
// On rajoute l'erreur au message // On rajoute l'erreur au message
$returnData = array_merge( array('ModuleError' => $this->error), $this->data ); $returnData = array_merge( array('ModuleError' => ManagerError::explicit($this->error)), $this->data );
return json_encode($returnData); return json_encode($returnData);

View File

@ -167,6 +167,25 @@
* *
*/ */
public static function fromPost($post){ public static function fromPost($post){
/* [0] Verification de l'authentification
=========================================================*/
/* (1) Si le token n'est pas dans le header */
if( !isset($_SERVER['PHP_AUTH_DIGEST']) ){
$tmp = new ModuleRequest();
$tmp->error = ManagerError::TokenError;
return $tmp;
}
/* (2) Si le token n'est pas dans la BDD */
$checkToken = new Repo('token/check', array($_SERVER['PHP_AUTH_DIGEST']) );
$valid_token = $checkToken->answer();
if( !$valid_token ){
$tmp = new ModuleRequest();
$tmp->error = ManagerError::TokenError;
return $tmp;
}
/* [1] On verifie que le @path est renseigne /* [1] On verifie que le @path est renseigne
=========================================================*/ =========================================================*/
if( !isset($post['path']) ) if( !isset($post['path']) )

View File

@ -45,6 +45,37 @@
/* VERIFIE SI UN TOKEN EST VALIDE
*
* @token<String> Token en question
*
* @return valid<bool> Retourne si VRAI ou FAUX le token est valid
*
*/
public static function check($token){
/* [0] Verification des INPUT
=========================================================*/
// si le format est incorrect, on retourne FAUX
if( !Database::check('sha1', $token) ) return false;
/* [1] Verification dans la base de donnees
=========================================================*/
$check = Database::getPDO()->prepare("SELECT id_token
FROM api_token
WHERE CURDATE() BETWEEN creation AND expires
AND token = :token");
$check->execute(array( ':token' => $token ));
/* [2] On retourne le resultat
=========================================================*/
return $check->fetch() !== false;
}
} }