Пример #1
0
 public function remoteShareForOcsRemoteId($ocsRemoteId)
 {
     $searchString = 's:11:"ocsRemoteId";s:' . strlen($ocsRemoteId) . ':"' . $ocsRemoteId . '"';
     $l = $this->storage->simpleStoreList(OCS_SQLSTORE_NS_REMOTE_SHARE, null, "", OCS_SQLSTORE_FORMAT, "%{$searchString}%");
     if (count($l)) {
         return array_shift(array_values($l));
     } else {
         return null;
     }
 }
Пример #2
0
 public function listShares($limitToUser = '', $parentRepository = '', $cursor = null, $shareType = null)
 {
     $dbLets = array();
     if ($this->sqlSupported) {
         // Get DB files
         $dbLets = $this->confStorage->simpleStoreList("share", $cursor, "", "serial", !empty($limitToUser) ? '%"OWNER_ID";s:' . strlen($limitToUser) . ':"' . $limitToUser . '"%' : '', $parentRepository);
     }
     // Get hardcoded files
     $files = glob(ConfService::getCoreConf("PUBLIC_DOWNLOAD_FOLDER") . "/*.php");
     if ($files === false) {
         return $dbLets;
     }
     foreach ($files as $file) {
         if (basename($file) == "share.php") {
             continue;
         }
         $ar = explode(".", basename($file));
         $id = array_shift($ar);
         $publicletData = $this->loadShare($id);
         if ($publicletData === false) {
             continue;
         }
         if (!empty($limitToUser) && (!isset($publicletData["OWNER_ID"]) || $publicletData["OWNER_ID"] != $limitToUser)) {
             continue;
         }
         if (!empty($parentRepository) && (is_string($publicletData["REPOSITORY"]) && $publicletData["REPOSITORY"] != $parentRepository || is_object($publicletData["REPOSITORY"]) && $publicletData["REPOSITORY"]->getUniqueId() != $parentRepository)) {
             continue;
         }
         $publicletData["SHARE_TYPE"] = "file";
         $dbLets[$id] = $publicletData;
     }
     // Update share_type and filter if necessary
     foreach ($dbLets as $id => &$shareData) {
         if ($shareData === false) {
             unset($dbLets[$id]);
             continue;
         }
         $this->updateShareType($shareData);
         if (!empty($shareType) && $shareData["SHARE_TYPE"] != $shareType) {
             unset($dbLets[$id]);
         }
     }
     if (empty($shareType) || $shareType == "repository") {
         // BACKWARD COMPATIBILITY: collect old-school shared repositories that are not yet stored in simpleStore
         $storedIds = array();
         foreach ($dbLets as $share) {
             if (empty($limitToUser) || $limitToUser == $share["OWNER_ID"]) {
                 if (is_string($share["REPOSITORY"])) {
                     $storedIds[] = $share["REPOSITORY"];
                 } else {
                     if (is_object($share["REPOSITORY"])) {
                         $storedIds[] = $share["REPOSITORY"]->getUniqueId();
                     }
                 }
             }
         }
         // Find repositories that would have a parent
         $criteria = array();
         $criteria["parent_uuid"] = $parentRepository == "" ? AJXP_FILTER_NOT_EMPTY : $parentRepository;
         $criteria["owner_user_id"] = $limitToUser == "" ? AJXP_FILTER_NOT_EMPTY : $limitToUser;
         if (count($storedIds)) {
             $criteria["!uuid"] = $storedIds;
         }
         $oldRepos = ConfService::listRepositoriesWithCriteria($criteria, $count);
         foreach ($oldRepos as $sharedWorkspace) {
             if (!$sharedWorkspace->hasContentFilter()) {
                 $dbLets['repo-' . $sharedWorkspace->getId()] = array("SHARE_TYPE" => "repository", "OWNER_ID" => $sharedWorkspace->getOwner(), "REPOSITORY" => $sharedWorkspace->getUniqueId(), "LEGACY_REPO_OR_MINI" => true);
                 //Auto Migrate? boaf.
                 //$this->storeShare($sharedWorkspace->getParentId(), $data, "repository");
             }
         }
     }
     return $dbLets;
 }
 /**
  * @param String $action
  * @param Array $httpVars
  * @param Array $fileVars
  * @return String
  */
 function authTokenActions($action, $httpVars, $fileVars)
 {
     if (AuthService::getLoggedUser() == null) {
         return;
     }
     $this->storage = ConfService::getConfStorageImpl();
     if (!is_a($this->storage, "sqlConfDriver")) {
         return false;
     }
     $user = AuthService::getLoggedUser()->getId();
     if (AuthService::getLoggedUser()->isAdmin() && isset($httpVars["user_id"])) {
         $user = AJXP_Utils::sanitize($httpVars["user_id"], AJXP_SANITIZE_EMAILCHARS);
     }
     switch ($action) {
         case "keystore_generate_auth_token":
             if (ConfService::getCoreConf("SESSION_SET_CREDENTIALS", "auth")) {
                 $this->logDebug("Keystore Generate Tokens", "Session Credentials set: returning empty tokens to force basic authentication");
                 HTMLWriter::charsetHeader("text/plain");
                 echo "";
                 break;
             }
             $token = AJXP_Utils::generateRandomString();
             $private = AJXP_Utils::generateRandomString();
             $data = array("USER_ID" => $user, "PRIVATE" => $private);
             if (!empty($httpVars["device"])) {
                 // Revoke previous tokens for this device
                 $device = $httpVars["device"];
                 $keys = $this->storage->simpleStoreList("keystore", null, "", "serial", '%"DEVICE_ID";s:' . strlen($device) . ':"' . $device . '"%');
                 foreach ($keys as $keyId => $keyData) {
                     if ($keyData["USER_ID"] != $user) {
                         continue;
                     }
                     $this->storage->simpleStoreClear("keystore", $keyId);
                 }
                 $data["DEVICE_ID"] = $device;
             }
             $data["DEVICE_UA"] = $_SERVER['HTTP_USER_AGENT'];
             $data["DEVICE_IP"] = $_SERVER['REMOTE_ADDR'];
             $this->storage->simpleStoreSet("keystore", $token, $data, "serial");
             HTMLWriter::charsetHeader("application/json");
             echo json_encode(array("t" => $token, "p" => $private));
             break;
         case "keystore_revoke_tokens":
             // Invalidate previous tokens
             $mess = ConfService::getMessages();
             $passedKeyId = "";
             if (isset($httpVars["key_id"])) {
                 $passedKeyId = $httpVars["key_id"];
             }
             $keys = $this->storage->simpleStoreList("keystore", null, $passedKeyId, "serial", '%"USER_ID";s:' . strlen($user) . ':"' . $user . '"%');
             foreach ($keys as $keyId => $keyData) {
                 $this->storage->simpleStoreClear("keystore", $keyId);
             }
             $message = array("result" => "SUCCESS", "message" => $mess["keystore.8"]);
             HTMLWriter::charsetHeader("application/json");
             echo json_encode($message);
             break;
         case "keystore_list_tokens":
             if (!isset($user)) {
                 break;
             }
             $keys = $this->storage->simpleStoreList("keystore", null, "", "serial", '%"USER_ID";s:' . strlen($user) . ':"' . $user . '"%');
             foreach ($keys as $keyId => &$keyData) {
                 unset($keyData["PRIVATE"]);
                 unset($keyData["USER_ID"]);
                 $deviceDesc = "Web Browser";
                 $deviceOS = "Unkown";
                 if (isset($keyData["DEVICE_UA"])) {
                     $agent = $keyData["DEVICE_UA"];
                     if (strpos($agent, "python-requests") !== false) {
                         $deviceDesc = "PydioSync";
                         if (strpos($agent, "Darwin") !== false) {
                             $deviceOS = "Mac OS X";
                         } else {
                             if (strpos($agent, "Windows/7") !== false) {
                                 $deviceOS = "Windows 7";
                             } else {
                                 if (strpos($agent, "Windows/8") !== false) {
                                     $deviceOS = "Windows 8";
                                 } else {
                                     if (strpos($agent, "Linux") !== false) {
                                         $deviceOS = "Linux";
                                     }
                                 }
                             }
                         }
                     } else {
                         $deviceOS = AJXP_Utils::osFromUserAgent($agent);
                     }
                 }
                 $keyData["DEVICE_DESC"] = $deviceDesc;
                 $keyData["DEVICE_OS"] = $deviceOS;
             }
             header("Content-type: application/json;");
             echo json_encode($keys);
             break;
         default:
             break;
     }
     return null;
 }