/** * * Declines the invitation sent by the original owner on a remote server * * @param RemoteShare $remoteShare * @return boolean success * @throws \Exception */ public function declineInvitation(RemoteShare $remoteShare) { $url = $remoteShare->getOcsServiceUrl(); $client = self::getClient($url); $response = $client->post($remoteShare->getOcsRemoteId() . '/decline', ['body' => ['token' => $remoteShare->getOcsToken()]]); if ($response->getStatusCode() != 200) { throw new \Exception($response->getReasonPhrase()); } return true; }
protected function actionReceive($parameters) { $targetUser = \AJXP_Utils::sanitize($parameters["shareWith"], AJXP_SANITIZE_EMAILCHARS); if (!\AuthService::userExists($targetUser)) { throw new UserNotFoundException(); } $token = \AJXP_Utils::sanitize($parameters["token"], AJXP_SANITIZE_ALPHANUM); $remoteId = \AJXP_Utils::sanitize($parameters["remoteId"], AJXP_SANITIZE_ALPHANUM); $documentName = \AJXP_Utils::sanitize($parameters["name"], AJXP_SANITIZE_FILENAME); $sender = \AJXP_Utils::sanitize($parameters["owner"], AJXP_SANITIZE_EMAILCHARS); $remote = $parameters["remote"]; $testParts = parse_url($remote); if (!is_array($testParts) || empty($testParts["scheme"]) || empty($testParts["host"])) { throw new InvalidArgumentsException(); } $endpoints = OCSClient::findEndpointsForURL($remote); $share = new RemoteShare(); $share->setUser($targetUser); $share->setOcsRemoteId($remoteId); $share->setOcsToken($token); $share->setDocumentName($documentName); $share->setSender($sender); $share->setReceptionDate(time()); $share->setStatus(OCS_INVITATION_STATUS_PENDING); $share->setHost(rtrim($remote, '/')); $share->setOcsServiceUrl(rtrim($remote, '/') . $endpoints['share']); $share->setOcsDavUrl(rtrim($remote, '/') . $endpoints['webdav']); $share->pingRemoteDAVPoint(); $store = new SQLStore(); $newShare = $store->storeRemoteShare($share); $response = $this->buildResponse("ok", 200, "Successfully received share, waiting for user response.", array("id" => $newShare->getId())); $this->sendResponse($response, $this->getFormat($parameters)); $userRole = \AuthService::getRole("AJXP_USR_/" . $targetUser); if ($userRole !== false) { // Artificially "touch" user role // to force repositories reload if he is logged in \AuthService::updateRole($userRole); } }