sendersFile = $sendersFile; $this->tokenFile = $tokenFile; } public function authenticate($username, $password, $ip, $sessionId) { $this->logger->auditLog(LoggerInterface::LOG_AUDIT_LOGIN, $username, "trying to authenticate"); $lines = file($this->sendersFile); foreach ($lines as $line) { list($user, $cPassword) = explode(':', trim($line), 2); if ($user == $username) { if (crypt($password, $cPassword) == $cPassword) { $this->logger->auditLog(LoggerInterface::LOG_AUDIT_LOGIN, $username, "authenticated successfully"); return $this->getToken($username, $ip, $sessionId); } else { $this->logger->auditLog(LoggerInterface::LOG_AUDIT_LOGIN, $username, "authentication failed: bad password"); return false; } } } return false; } public function getTokenUsername($token, $ip, $sessionId) { $lines = file($this->tokenFile); foreach ($lines as $line) { list($tokenUser, $tokenIp, $tokenSession, $tokenToken) = explode(':', trim($line), 4); if (($tokenToken == $token) && ($tokenIp == $ip) && ($tokenSession == $sessionId)) { return $tokenUser; } } return null; } public function isTokenValid($token, $ip, $sessionId) { $this->logger->auditLog(LoggerInterface::LOG_AUDIT_LOGIN, null, 'Checking token validity'); $lines = file($this->tokenFile); foreach ($lines as $line) { list($tokenUser, $tokenIp, $tokenSession, $tokenToken) = explode(':', trim($line), 4); if (($tokenToken == $token) && ($tokenIp == $ip) && ($tokenSession == $sessionId)) { return true; } } return false; } public function getToken($username, $ip, $sessionId) { $this->logger->auditLog(LoggerInterface::LOG_AUDIT_LOGIN, $username, "Getting token"); $lines = file($this->tokenFile); foreach ($lines as $line) { list($tokenUser, $tokenIp, $tokenSession, $tokenToken) = explode(':', trim($line), 4); if (($tokenUser == $username) && ($tokenIp == $ip) && ($tokenSession == $sessionId)) { return $tokenToken; } } $token = str_replace(':', '', uniqid('', true)); $fd = fopen($this->tokenFile, 'a'); fwrite($fd, sprintf("%s:%s:%s:%s\n", $username, $ip, $sessionId, $token)); fclose($fd); return $token; } public function removeToken($token, $ip, $sessionId) { $username = $this->getTokenUsername($token, $ip, $sessionId); $this->logger->auditLog(LoggerInterface::LOG_AUDIT_LOGIN, $username, "Removing token"); $lines = file($this->tokenFile); $fd = fopen($this->tokenFile, 'w'); foreach ($lines as $line) { list($tokenUser, $tokenIp, $tokenSession, $tokenToken) = explode(':', trim($line), 4); if (($tokenToken != $token) || ($tokenIp != $ip) || ($tokenSession != $sessionId)) { fwrite($fd, sprintf("%s:%s:%s:%s\n", $tokenUser, $tokenIp, $tokenSession, $tokenToken)); } } fclose($fd); return false; return true; } public function getLogger() { return $this->logger; } public function setLogger(LoggerInterface $logger) { $this->logger = $logger; } }