/** * @param ServiceManager $serviceManager * @param AbstractEntity $entity * @param SimpleFMAdapter $simpleFMAdapter */ public function __construct(AbstractEntity $entity, SimpleFMAdapter $simpleFMAdapter, Identity $identity = NULL, $encryptionKey = NULL) { $this->setSimpleFMAdapter($simpleFMAdapter); $this->setEntityName(get_class($entity)); $this->setEntityLayout($entity->getDefaultWriteLayoutName()); if (!empty($identity) && !empty($encryptionKey)) { $this->simpleFMAdapter->setUsername($identity->getUsername()); $this->simpleFMAdapter->setPassword($identity->getPassword($encryptionKey)); } }
/** * @return Zend\Authentication\Result */ public function authenticate() { $this->simpleFmValidateAdapter->setLayoutname($this->identityLayout); $this->simpleFmValidateAdapter->setCredentials($this->credentials); $command = array($this->accountNameField => "==" . self::escapeStringForFileMakerSearch($this->username), '-find' => NULL); $this->simpleFmValidateAdapter->setCommandarray($command); $result = $this->simpleFmValidateAdapter->execute(); $error = $result['error']; $errortext = $result['errortext']; $errortype = $result['errortype']; // Based on the status, return auth result switch ($error) { case '0': // Return null as identity only for error 0 $identity = new Identity($this->username, $this->password, $this->encryptionKey, $result['rows'][0]); $identity->setIsLoggedIn(TRUE); return new Result(Result::SUCCESS, $identity); case '401': // Return null identity plus reason as message array for HTTP 401 if ($errortype == 'HTTP') { $identity = null; return new Result(Result::FAILURE, $identity, array('reason' => 'Username and/or password not valid', 'sfm_auth_response' => $result)); } case '7': // there most likely was a error connecting to the host if ($errortype == 'PHP') { $identity = null; return new Result(Result::FAILURE, $identity, array('reason' => 'There was a system error trying to make the request. Please try again later.', 'sfm_auth_response' => $result)); } default: // Return empty identity plus reason as message array for every other result status $identity = null; return new Result(Result::FAILURE, $identity, array('reason' => $errortype . ' error ' . $error . ': ' . $errortext, 'sfm_auth_response' => $result)); } }