diff --git a/composer.json b/composer.json index 14d8064..65110ff 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "type": "library", "license": "BSD-3-Clause", "keywords": [ - "zf2", + "zf3", "zfcuser" ], "homepage": "https://github.com/goalio/GoalioRememberMe", @@ -16,7 +16,7 @@ } ], "require": { - "zf-commons/zfc-user": "1.*" + "zf-commons/zfc-user": "^3.0" }, "autoload": { "psr-0": { diff --git a/src/GoalioRememberMe/Authentication/Adapter/Cookie.php b/src/GoalioRememberMe/Authentication/Adapter/Cookie.php index f2e7421..a42316a 100644 --- a/src/GoalioRememberMe/Authentication/Adapter/Cookie.php +++ b/src/GoalioRememberMe/Authentication/Adapter/Cookie.php @@ -5,9 +5,8 @@ use ZfcUser\Authentication\Adapter\AbstractAdapter; use Zend\Authentication\Result as AuthenticationResult; use Zend\ServiceManager\ServiceManager; -use Zend\Stdlib\RequestInterface as Request; -use Zend\Stdlib\ResponseInterface as Response; use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent; +use Zend\EventManager\EventInterface; class Cookie extends AbstractAdapter { @@ -19,11 +18,13 @@ class Cookie extends AbstractAdapter protected $rememberMeService; - public function authenticate(AuthEvent $e) - { + public function authenticate(EventInterface $e) { + /* @var $authEvent AuthEvent */ + $authEvent = $e->getTarget(); // check if cookie needs to be set, only when prior auth has been successful - if($e->getIdentity() !== null && $e->getRequest()->isPost() && $e->getRequest()->getPost()->get('remember_me') == 1) { - $userObject = $this->getUserMapper()->findById($e->getIdentity()); + if ($authEvent->getIdentity() !== null && $authEvent->getRequest()->isPost() + && $authEvent->getRequest()->getPost()->get('remember_me') == 1) { + $userObject = $this->getUserMapper()->findById($authEvent->getIdentity()); $this->getRememberMeService()->createSerie($userObject->getId()); /** @@ -39,13 +40,13 @@ public function authenticate(AuthEvent $e) if ($this->isSatisfied()) { $storage = $this->getStorage()->read(); - $e->setIdentity($storage['identity']) + $authEvent->setIdentity($storage['identity']) ->setCode(AuthenticationResult::SUCCESS) ->setMessages(array('Authentication successful.')); return; } - $cookies = $e->getRequest()->getCookie(); + $cookies = $authEvent->getRequest()->getCookie(); // no cookie present, skip authentication if(!isset($cookies['remember_me'])) { @@ -69,7 +70,7 @@ public function authenticate(AuthEvent $e) $this->getRememberMeService()->removeCookie(); $this->setSatisfied(false); - $e->setCode(AuthenticationResult::FAILURE) + $authEvent->setCode(AuthenticationResult::FAILURE) ->setMessages(array('Possible identity theft detected.')); return false; } @@ -79,12 +80,12 @@ public function authenticate(AuthEvent $e) $this->getRememberMeService()->updateSerie($rememberMe); // Success! - $e->setIdentity($userObject->getId()); + $authEvent->setIdentity($userObject->getId()); $this->setSatisfied(true); $storage = $this->getStorage()->read(); - $storage['identity'] = $e->getIdentity(); + $storage['identity'] = $authEvent->getIdentity(); $this->getStorage()->write($storage); - $e->setCode(AuthenticationResult::SUCCESS) + $authEvent->setCode(AuthenticationResult::SUCCESS) ->setMessages(array('Authentication successful.')); // Reference for weak login. Should not be allowed to change PW etc. @@ -165,9 +166,10 @@ public function logout() $cookie = explode("\n", $this->getRememberMeService()->getCookie()); if($cookie[0] !== '') { - $this->getRememberMeService()->removeSerie($user->getId(), $cookie[1]); + $user and $this->getRememberMeService()->removeSerie($user->getId(), $cookie[1]); $this->getRememberMeService()->removeCookie(); } + $this->getStorage() and $this->getStorage()->clear(); } -} \ No newline at end of file +} diff --git a/src/GoalioRememberMe/Mapper/AbstractDbMapper.php b/src/GoalioRememberMe/Mapper/AbstractDbMapper.php new file mode 100644 index 0000000..c6c1d74 --- /dev/null +++ b/src/GoalioRememberMe/Mapper/AbstractDbMapper.php @@ -0,0 +1,322 @@ +isInitialized) { + return; + } + + if (!$this->dbAdapter instanceof Adapter) { + throw new \Exception('No db adapter present'); + } + + if (!$this->hydrator instanceof HydratorInterface) { + $this->hydrator = new ClassMethods; + } + + if (!is_object($this->entityPrototype)) { + throw new \Exception('No entity prototype set'); + } + + $this->isInitialized = true; + } + + /** + * @param string|null $table + * @return Select + */ + protected function getSelect($table = null) { + $this->initialize(); + return $this->getSlaveSql()->select($table ? : $this->getTableName()); + } + + /** + * @param Select $select + * @param object|null $entityPrototype + * @param HydratorInterface|null $hydrator + * @return HydratingResultSet + */ + protected function select(Select $select, $entityPrototype = null, + HydratorInterface $hydrator = null) { + $this->initialize(); + + $stmt = $this->getSlaveSql()->prepareStatementForSqlObject($select); + + $resultSet = new HydratingResultSet($hydrator ? : $this->getHydrator(), + $entityPrototype ? : $this->getEntityPrototype()); + + $resultSet->initialize($stmt->execute()); + return $resultSet; + } + + /** + * @param object|array $entity + * @param string|TableIdentifier|null $tableName + * @param HydratorInterface|null $hydrator + * @return ResultInterface + */ + protected function insert($entity, $tableName = null, + HydratorInterface $hydrator = null) { + $this->initialize(); + $tableName = $tableName ? : $this->tableName; + + $sql = $this->getSql()->setTable($tableName); + $insert = $sql->insert(); + + $rowData = $this->entityToArray($entity, $hydrator); + $insert->values($rowData); + + $statement = $sql->prepareStatementForSqlObject($insert); + + return $statement->execute(); + } + + /** + * @param object|array $entity + * @param string|array|\Closure $where + * @param string|TableIdentifier|null $tableName + * @param HydratorInterface|null $hydrator + * @return ResultInterface + */ + protected function update($entity, $where, $tableName = null, + HydratorInterface $hydrator = null) { + $this->initialize(); + $tableName = $tableName ? : $this->tableName; + + $sql = $this->getSql()->setTable($tableName); + $update = $sql->update(); + + $rowData = $this->entityToArray($entity, $hydrator); + $update->set($rowData) + ->where($where); + + $statement = $sql->prepareStatementForSqlObject($update); + + return $statement->execute(); + } + + /** + * @param string|array|\Closure $where + * @param string|TableIdentifier|null $tableName + * @return ResultInterface + */ + protected function delete($where, $tableName = null) { + $tableName = $tableName ? : $this->tableName; + + $sql = $this->getSql()->setTable($tableName); + $delete = $sql->delete(); + + $delete->where($where); + + $statement = $sql->prepareStatementForSqlObject($delete); + + return $statement->execute(); + } + + /** + * @return string + */ + protected function getTableName() { + return $this->tableName; + } + + /** + * @return object + */ + public function getEntityPrototype() { + return $this->entityPrototype; + } + + /** + * @param object $entityPrototype + * @return AbstractDbMapper + */ + public function setEntityPrototype($entityPrototype) { + $this->entityPrototype = $entityPrototype; + $this->resultSetPrototype = null; + return $this; + } + + /** + * @return Adapter + */ + public function getDbAdapter() { + return $this->dbAdapter; + } + + /** + * @param Adapter $dbAdapter + * @return AbstractDbMapper + */ + public function setDbAdapter(Adapter $dbAdapter) { + $this->dbAdapter = $dbAdapter; + return $this; + } + + /** + * @return Adapter + */ + public function getDbSlaveAdapter() { + return $this->dbSlaveAdapter ? : $this->dbAdapter; + } + + /** + * @param Adapter $dbSlaveAdapter + * @return AbstractDbMapper + */ + public function setDbSlaveAdapter(Adapter $dbSlaveAdapter) { + $this->dbSlaveAdapter = $dbSlaveAdapter; + return $this; + } + + /** + * @return HydratorInterface + */ + public function getHydrator() { + if (!$this->hydrator) { + $this->hydrator = new ClassMethods(false); + } + return $this->hydrator; + } + + /** + * @param HydratorInterface $hydrator + * @return AbstractDbMapper + */ + public function setHydrator(HydratorInterface $hydrator) { + $this->hydrator = $hydrator; + $this->resultSetPrototype = null; + return $this; + } + + /** + * @return Sql + */ + protected function getSql() { + if (!$this->sql instanceof Sql) { + $this->sql = new Sql($this->getDbAdapter()); + } + + return $this->sql; + } + + /** + * @param Sql $sql + * @return AbstractDbMapper + */ + protected function setSql(Sql $sql) { + $this->sql = $sql; + return $this; + } + + /** + * @return Sql + */ + protected function getSlaveSql() { + if (!$this->slaveSql instanceof Sql) { + $this->slaveSql = new Sql($this->getDbSlaveAdapter()); + } + + return $this->slaveSql; + } + + /** + * @param Sql $sql + * @return AbstractDbMapper + */ + protected function setSlaveSql(Sql $sql) { + $this->slaveSql = $sql; + return $this; + } + + /** + * Uses the hydrator to convert the entity to an array. + * + * Use this method to ensure that you're working with an array. + * + * @param object $entity + * @param HydratorInterface|null $hydrator + * @return array + */ + protected function entityToArray($entity, HydratorInterface $hydrator = null) { + if (is_array($entity)) { + return $entity; // cut down on duplicate code + } + elseif (is_object($entity)) { + if (!$hydrator) { + $hydrator = $this->getHydrator(); + } + return $hydrator->extract($entity); + } + throw new Exception\InvalidArgumentException('Entity passed to db mapper should be an array or object.'); + } + +} diff --git a/src/GoalioRememberMe/Mapper/RememberMe.php b/src/GoalioRememberMe/Mapper/RememberMe.php index 7c8385c..6b63a3b 100644 --- a/src/GoalioRememberMe/Mapper/RememberMe.php +++ b/src/GoalioRememberMe/Mapper/RememberMe.php @@ -2,7 +2,6 @@ namespace GoalioRememberMe\Mapper; -use ZfcBase\Mapper\AbstractDbMapper; use Zend\Db\Sql\Where; class RememberMe extends AbstractDbMapper diff --git a/src/GoalioRememberMe/Mapper/RememberMeHydrator.php b/src/GoalioRememberMe/Mapper/RememberMeHydrator.php index 7c22a21..5fa1a1a 100644 --- a/src/GoalioRememberMe/Mapper/RememberMeHydrator.php +++ b/src/GoalioRememberMe/Mapper/RememberMeHydrator.php @@ -2,7 +2,7 @@ namespace GoalioRememberMe\Mapper; -use Zend\Stdlib\Hydrator\ClassMethods; +use Zend\Hydrator\ClassMethods; class RememberMeHydrator extends ClassMethods { diff --git a/src/GoalioRememberMe/Service/RememberMe.php b/src/GoalioRememberMe/Service/RememberMe.php index ffc38a4..94d8ab5 100644 --- a/src/GoalioRememberMe/Service/RememberMe.php +++ b/src/GoalioRememberMe/Service/RememberMe.php @@ -3,7 +3,7 @@ namespace GoalioRememberMe\Service; use Zend\ServiceManager\ServiceManager; -use ZfcBase\EventManager\EventProvider; +use ZfcUser\EventManager\EventProvider; use GoalioRememberMe\Options\RememberMeOptionsInterface; use Zend\Math\Rand;