/** * * Authenticates the user using the supplied credentials. * If workspace is recognized as the name of an existing workspace in the repository and authorization to access that workspace is granted, then a new Session object is returned. * If authentication or authorization for the specified workspace fails, a LoginException is thrown. * If workspace is not recognized, a NoSuchWorkspaceException is thrown. * @param Credentials $credentials the credentials of the user. * @param string $workspace the name of the workspace. * @return Session a valid session for the user to access the repository. * */ public static function login(Credentials $credentials, $workspace) { if (!file_exists($_SERVER['PCR'] . "/config/{$workspace}.xml")) { throw new NoSuchWorkspaceException($workspace); } $config = simplexml_load_file($_SERVER['PCR'] . "/config/{$workspace}.xml"); $persistenceManager = (string) $config->persistenceManager; if (!file_exists($_SERVER['PCR'] . "/PMs/{$persistenceManager}.php")) { throw new RepositoryException("persistence manager does not exist for workspace: {$workspace}=>{$persistenceManager}"); } require_once $_SERVER['PCR'] . "/PMs/{$persistenceManager}.php"; $pm = new $persistenceManager($credentials, $workspace, $config); if (!$pm->isLive()) { throw new LoginException("workspace=>{$workspace}, persistenceManager=>{$persistenceManager}, userID=>" . $credentials->getUserID()); } Log4PCR::access("workspace=>{$workspace}, persistenceManager=>{$persistenceManager}, userID=>" . $credentials->getUserID()); return new Session($pm); }
public function __construct(Credentials $credentials, $workspace, $config) { $link = @mysql_connect($config->server, $credentials->getUserID(), $credentials->getPassword(), 1); if (mysql_stat($link) !== null) { if (!mysql_select_db($workspace, $link)) { $sql = "CREATE DATABASE {$workspace}"; if (mysql_query($sql, $link)) { mysql_select_db($workspace, $link); $sql = "CREATE TABLE c (p text NOT NULL,\n\t\t\t\t\t\t\t\tn text NOT NULL,\n\t\t\t\t\t\t\t\tv text NOT NULL,\n\t\t\t\t\t\t\t\tKEY INDEX1 (p (1000)),\n\t\t\t\t\t\t\t\tKEY INDEX2 (p (850), n (150)),\n\t\t\t\t\t\t\t\tKEY INDEX3 (p (550), n (150), v (300)),\n\t\t\t\t\t\t\t\tKEY INDEX4 (v (1000)))\n\t\t\t\t\t\t\t\tENGINE = MyISAM DEFAULT CHARSET = latin1"; mysql_query($sql, $link); } else { throw new RepositoryException("in MySQL, cannot create workspace: {$workspace}"); } } $this->credentials = $credentials; $this->workspace = $workspace; $this->config = $config; $this->link = $link; $this->isLive = true; } }