Gestion de l'accès à l'API avec tokens
This commit is contained in:
parent
4b92b19d92
commit
4950f66fd9
|
@ -68,6 +68,4 @@
|
|||
var_dump( $contact );
|
||||
}
|
||||
|
||||
parseCallLog();
|
||||
|
||||
?>
|
|
@ -5,7 +5,8 @@
|
|||
|
||||
|
||||
"token": [
|
||||
"getAll"
|
||||
"getAll",
|
||||
"check"
|
||||
]
|
||||
|
||||
}
|
|
@ -216,7 +216,7 @@
|
|||
return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value);
|
||||
break;
|
||||
|
||||
case 'user.password':
|
||||
case 'sha1':
|
||||
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
|
||||
break;
|
||||
|
||||
|
|
|
@ -60,6 +60,10 @@
|
|||
// Erreur lors de la creation d'un objet PDO (connection)
|
||||
const PDOConnection = 14;
|
||||
|
||||
/* API token */
|
||||
// Token inexistant ou faux
|
||||
const TokenError = 15;
|
||||
|
||||
|
||||
/* 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::TokenError: return "Le token de connection est absent ou errone"; break;
|
||||
|
||||
// default: return "Erreur inconnue..."; break;
|
||||
}
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@
|
|||
public function serialize(){
|
||||
|
||||
// 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);
|
||||
|
||||
|
|
|
@ -167,6 +167,25 @@
|
|||
*
|
||||
*/
|
||||
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
|
||||
=========================================================*/
|
||||
if( !isset($post['path']) )
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue