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 );
}
parseCallLog();
?>

View File

@ -5,7 +5,8 @@
"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);
break;
case 'user.password':
case 'sha1':
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
break;

View File

@ -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;
}

View File

@ -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);

View File

@ -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']) )

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;
}
}