tokenColumn}, 1, -1) AS token_match " . "FROM {$this->tableName} WHERE {$this->credentialColumn} = ? " . "AND {$this->persistentTokenColumn} = SHA1(?) AND {$this->expiresColumn} > NOW() LIMIT 1"; $query = $this->connection->prepare($sql); $query->execute(array($token, $credential, $persistentToken)); $result = $query->fetchColumn(); if (!$result) { return self::TRIPLET_NOT_FOUND; } elseif ($result == 1) { return self::TRIPLET_FOUND; } return self::TRIPLET_INVALID; } /** * @param mixed $credential * @param string $token * @param string $persistentToken * @param int $expire */ public function storeTriplet($credential, $token, $persistentToken, $expire = 0) { $sql = "INSERT INTO {$this->tableName}({$this->credentialColumn}, " . "{$this->tokenColumn}, {$this->persistentTokenColumn}, " . "{$this->expiresColumn}) VALUES(?, SHA1(?), SHA1(?), ?)"; $query = $this->connection->prepare($sql); $query->execute(array($credential, $token, $persistentToken, date("Y-m-d H:i:s", $expire))); } /** * @param mixed $credential * @param string $persistentToken */ public function cleanTriplet($credential, $persistentToken) { $sql = "DELETE FROM {$this->tableName} WHERE {$this->credentialColumn} = ? " . "AND {$this->persistentTokenColumn} = SHA1(?)"; $query = $this->connection->prepare($sql); $query->execute(array($credential, $persistentToken)); } /** * Replace current token after successful authentication * @param $credential * @param $token * @param $persistentToken * @param int $expire */ public function replaceTriplet($credential, $token, $persistentToken, $expire = 0) { try { $this->connection->beginTransaction(); $this->cleanTriplet($credential, $persistentToken); $this->storeTriplet($credential, $token, $persistentToken, $expire); $this->connection->commit(); } catch (\PDOException $e) { $this->connection->rollBack(); throw $e; } } /** * @param $credential */ public function cleanAllTriplets($credential) { $sql = "DELETE FROM {$this->tableName} WHERE {$this->credentialColumn} = ? "; $query = $this->connection->prepare($sql); $query->execute(array($credential)); } /** * @return \PDO */ public function getConnection() { return $this->connection; } /** * @param PDO $connection */ public function setConnection(\PDO $connection) { $this->connection = $connection; } }