| @ -0,0 +1,2 @@ | |||
| composer.lock | |||
| vendor/ | |||
| @ -0,0 +1,125 @@ | |||
| # SamApiLib | |||
| *PHP library to ease requesting SAM via his REST API* | |||
| ## installation | |||
| Copy the `SamApiLib` folder into your autoload library older. | |||
| Then you can simply use it with : | |||
| use SamApiLib\SamApi; | |||
| ## usage | |||
| use SamApiLib\Archive; | |||
| $sam_api = new SamApi("base_url", "api_token"); | |||
| $sam_archive_api = new Archive($sam_api); | |||
| $archives = $sam_archive_api->read(); | |||
| var_dump($archives); | |||
| ## result | |||
| array(89) { | |||
| [0]=> | |||
| array(50) { | |||
| ["description"]=> | |||
| string(2) "{}" | |||
| ["text"]=> | |||
| string(39) "BulletinDePaye_123456789012345_2022-03 " | |||
| ["archiveId"]=> | |||
| string(22) "SAM_rak4z8-1xxw-7v88fo" | |||
| ["archiverArchiveId"]=> | |||
| string(20) "FR094080_2022_AE0001" | |||
| ["originatorArchiveId"]=> | |||
| NULL | |||
| ["depositorArchiveId"]=> | |||
| NULL | |||
| ["archiveName"]=> | |||
| string(38) "BulletinDePaye_123456789012345_2022-03" | |||
| ["filePlanPosition"]=> | |||
| NULL | |||
| ["originatingDate"]=> | |||
| NULL | |||
| ["archivalProfileReference"]=> | |||
| NULL | |||
| ["serviceLevelReference"]=> | |||
| string(16) "serviceLevel_002" | |||
| ["archivalAgreementReference"]=> | |||
| NULL | |||
| ["retentionRuleCode"]=> | |||
| NULL | |||
| ["retentionStartDate"]=> | |||
| string(10) "2022-04-19" | |||
| ["retentionDuration"]=> | |||
| NULL | |||
| ["finalDisposition"]=> | |||
| NULL | |||
| ["disposalDate"]=> | |||
| NULL | |||
| ["retentionRuleStatus"]=> | |||
| NULL | |||
| ["accessRuleCode"]=> | |||
| NULL | |||
| ["accessRuleDuration"]=> | |||
| NULL | |||
| ["accessRuleStartDate"]=> | |||
| NULL | |||
| ["accessRuleComDate"]=> | |||
| NULL | |||
| ["classificationRuleCode"]=> | |||
| NULL | |||
| ["classificationRuleDuration"]=> | |||
| NULL | |||
| ["classificationRuleStartDate"]=> | |||
| NULL | |||
| ["classificationEndDate"]=> | |||
| NULL | |||
| ["classificationLevel"]=> | |||
| NULL | |||
| ["classificationOwner"]=> | |||
| NULL | |||
| ["originatorOrgRegNumber"]=> | |||
| string(2) "rh" | |||
| ["originatorOwnerOrgId"]=> | |||
| string(4) "ACME" | |||
| ["originatorOwnerOrgRegNumber"]=> | |||
| string(4) "ACME" | |||
| ["depositorOrgRegNumber"]=> | |||
| NULL | |||
| ["archiverOrgRegNumber"]=> | |||
| string(3) "GIC" | |||
| ["userOrgRegNumbers"]=> | |||
| NULL | |||
| ["depositDate"]=> | |||
| string(25) "2022-04-18T22:54:44+00:00" | |||
| ["lastCheckDate"]=> | |||
| string(25) "2022-09-29T14:45:07+00:00" | |||
| ["lastDeliveryDate"]=> | |||
| NULL | |||
| ["lastModificationDate"]=> | |||
| NULL | |||
| ["lifeCycleEvent"]=> | |||
| NULL | |||
| ["status"]=> | |||
| string(9) "preserved" | |||
| ["fullTextIndexation"]=> | |||
| string(4) "none" | |||
| ["descriptionClass"]=> | |||
| NULL | |||
| ["descriptionObject"]=> | |||
| array(0) { | |||
| } | |||
| ["fileplanLevel"]=> | |||
| NULL | |||
| ["storagePath"]=> | |||
| string(73) "/SAM/ACME/rh/_archivalProfileReference_/2022/04/19/SAM_rak4z8-1xxw-7v88fo" | |||
| ["processingStatus"]=> | |||
| NULL | |||
| ["parentArchiveId"]=> | |||
| NULL | |||
| ["contents"]=> | |||
| NULL | |||
| ["digitalResources"]=> | |||
| NULL | |||
| ["archiveRelationship"]=> | |||
| NULL | |||
| } | |||
| [1]=> | |||
| ... | |||
| @ -0,0 +1,300 @@ | |||
| <?php | |||
| namespace SamApiLib; | |||
| class Archive | |||
| { | |||
| private $sam_api; | |||
| function __construct(SamApi $sam_api) | |||
| { | |||
| $this->sam_api = $sam_api; | |||
| } | |||
| /** | |||
| * list all archives | |||
| * http://sam2_dev.localhost/openapi.html#operation/recordsManagement/archives/read | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function read () | |||
| { | |||
| $ws_route = "get /recordsManagement/archives"; | |||
| $url_params = []; | |||
| $query_params = [ | |||
| "archiveId" => "", | |||
| "profileReference" => "", | |||
| "status" => "", | |||
| "archiveName" => "", | |||
| "agreementReference" => "", | |||
| "archiveExpired" => "", | |||
| "finalDisposition" => "", | |||
| "originatorOrgRegNumber" => "", | |||
| "originatorOwnerOrgId" => "", | |||
| "originatorArchiveId" => "", | |||
| "originatingDate" => "", | |||
| "filePlanPosition" => "", | |||
| "hasParent" => "", | |||
| "description" => "", | |||
| "partialRetentionRule" => "", | |||
| "retentionRuleCode" => "", | |||
| "depositStartDate" => "", | |||
| "depositEndDate" => "", | |||
| "originatingStartDate" => "", | |||
| "originatingEndDate" => "", | |||
| "archiverArchiveId" => "", | |||
| "maxResults" => "", | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| if(!empty($body)) | |||
| return $body; | |||
| else | |||
| null; | |||
| } | |||
| /** | |||
| * list archives only inside an organization / folder | |||
| * @param string $registrationNumber | |||
| * @param string $folderId | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function readList ($registrationNumber = "", $folderId = "") | |||
| { | |||
| $ws_route = "get /recordsManagement/archives/List"; | |||
| $url_params = []; | |||
| $query_params = [ | |||
| "originatorOrgRegNumber" => $registrationNumber, // registrationNumber : m183129110301321 | |||
| "filePlanPosition" => $folderId, // folderId : SAM_rak426-6xon-f8ywrz | |||
| "archiveUnit" => "" | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| if(!empty($body)) | |||
| return $body; | |||
| else | |||
| null; | |||
| } | |||
| /** | |||
| * get a particular archive | |||
| * @param $id | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function getArchiveById ($id) | |||
| { | |||
| $ws_route = " get /recordsManagement/archiveDescription/{archiveId}"; | |||
| $url_params = [ | |||
| "archiveId" => $id, | |||
| ]; | |||
| $query_params = [ | |||
| "isCommunication" => "", | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| if(!empty($body)) | |||
| return $body; | |||
| else | |||
| null; | |||
| } | |||
| /** | |||
| * get archive metadata | |||
| * @param $archive_id | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function getMetadata ($archive_id) | |||
| { | |||
| $ws_route = " get /recordsManagement/archive/Metadata/{archiveId}"; | |||
| $url_params = [ | |||
| "archiveId" => $archive_id, | |||
| ]; | |||
| $query_params = []; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * get a resoure's content base 64 encoded | |||
| * @param $archive_id | |||
| * @param $resource_id | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function getResourceContentBase64 ($archive_id, $resource_id) | |||
| { | |||
| $ws_route = " get /recordsManagement/archive/Consultation/{archiveId}/Digitalresource/{resId}"; | |||
| $url_params = [ | |||
| "archiveId" => $archive_id, | |||
| "resId" => $resource_id, | |||
| ]; | |||
| $query_params = [ | |||
| "isCommunication" => "", | |||
| "embedded" => "", | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; // use ["attachment"]["data"] for direct access to base64 content | |||
| } | |||
| /** | |||
| * create an archive | |||
| * @param $archive_name | |||
| * @param $originatorOrgRegNumber | |||
| * @param $file_plan_position | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function createArchive ($archive_name, $originatorOrgRegNumber, $file_plan_position) | |||
| { | |||
| $ws_route = " post /recordsManagement/archive"; | |||
| $url_params = []; | |||
| $query_params = []; | |||
| $body_params = [ | |||
| "archive" => [ | |||
| "archiveName" => $archive_name, | |||
| "filePlanPosition" => $file_plan_position, | |||
| ], | |||
| "zipContainer" => false, | |||
| ]; | |||
| $body_params = [ | |||
| "archive" => [ | |||
| "archiveName" => $archive_name, | |||
| "originatorOrgRegNumber" => $originatorOrgRegNumber,// organization registration number (registrationNumber) | |||
| "filePlanPosition" => $file_plan_position, // folder id (folderId), or null if root of an organization | |||
| ], | |||
| "zipContainer" => false, | |||
| ]; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * create an archive | |||
| * @param $archive_name | |||
| * @param $originatorOrgRegNumber | |||
| * @param $file_plan_position | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function createArchiveWithResource ($archiveId, $originatorOwnerOrgRegNumber, $originatorOrgRegNumber, $content, $file_name, $hash, $hashAlgorithm) | |||
| { | |||
| $ws_route = " post /digitalSafe/digitalSafe/$originatorOwnerOrgRegNumber/$originatorOrgRegNumber"; | |||
| $url_params = []; | |||
| $query_params = []; | |||
| $body_params = [ | |||
| "originatorArchiveId" => $archiveId, | |||
| "digitalResources" => [ | |||
| [ | |||
| "handler" => base64_encode($content), | |||
| "fileName" => $file_name, | |||
| "hash" => $hash, | |||
| "hashAlgorithm" => $hashAlgorithm | |||
| ] | |||
| ] | |||
| ]; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * add resource content (base 64 encoded) to an archive | |||
| * @param $archive_id | |||
| * @param $content | |||
| * @param $file_name | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function addResourceBase64ToArchive ($archive_id, $content, $file_name) | |||
| { | |||
| $ws_route = " post /recordsManagement/archive/{archiveId}/Digitalresource"; | |||
| $url_params = [ | |||
| "archiveId" => $archive_id, | |||
| ]; | |||
| $query_params = []; | |||
| $body_params = [ | |||
| "contents" => $content, | |||
| "filename" => $file_name, | |||
| ]; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * add resource content (raw) to an archive | |||
| * @param $archive_id | |||
| * @param $content | |||
| * @param $file_name | |||
| * @return array|mixed[] | |||
| */ | |||
| public function addResourceToArchive ($archive_id, $content, $file_name) | |||
| { | |||
| return $this->addResourceBase64ToArchive($archive_id, base64_encode($content), $file_name); | |||
| } | |||
| /** | |||
| * count all archives | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function count () | |||
| { | |||
| $ws_route = "get /recordsManagement/archives/Count"; | |||
| $url_params = []; | |||
| $query_params = [ | |||
| "originatorOrgRegNumber" => "", | |||
| "filePlanPosition" => "", | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * ask for an archive destruction | |||
| * @param $originatorOwnerOrgRegNumber | |||
| * @param $originatorOrgRegNumber | |||
| * @param $archiveId | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function destruct ($originatorOwnerOrgRegNumber, $originatorOrgRegNumber, $archiveId) | |||
| { | |||
| $ws_route = " delete /digitalSafe/digitalSafe/{originatorOwnerOrgRegNumber}/{originatorOrgRegNumber}/{archiveId}"; | |||
| $url_params = [ | |||
| "originatorOwnerOrgRegNumber" => $originatorOwnerOrgRegNumber, | |||
| "originatorOrgRegNumber" => $originatorOrgRegNumber, | |||
| "archiveId" => $archiveId, | |||
| ]; | |||
| $query_params = []; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * ask for an archive integrity check | |||
| * @param $archiveId | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function checkIntegrity ($archiveId) | |||
| { | |||
| $ws_route = " get /recordsManagement/archives/Integritycheck"; | |||
| $url_params = []; | |||
| $query_params = [ | |||
| "archiveIds" => [$archiveId], | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| } | |||
| @ -0,0 +1,56 @@ | |||
| <?php | |||
| namespace SamApiLib; | |||
| class Auth | |||
| { | |||
| private $sam_api; | |||
| function __construct(SamApi $sam_api) | |||
| { | |||
| $this->sam_api = $sam_api; | |||
| } | |||
| /** | |||
| * get all service accounts | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function serviceAccountList () | |||
| { | |||
| $ws_route = "get /auth/serviceAccount/Index"; | |||
| $url_params = []; | |||
| $query_params = []; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| if(!empty($body)) | |||
| return $body; | |||
| else | |||
| null; | |||
| } | |||
| /** | |||
| * get detail about a service account | |||
| * @param $serviceAccountId | |||
| * @return array[]|mixed[] | |||
| */ | |||
| public function serviceAccountDetail ($serviceAccountId) | |||
| { | |||
| $ws_route = "get /auth/serviceAccount/{serviceAccountId}"; | |||
| $url_params = [ | |||
| "serviceAccountId" => $serviceAccountId, // "SAM_rak3yb-dih2-lp6sua" | |||
| ]; | |||
| $query_params = []; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->sam_api->query($ws_route, $url_params, $query_params, $body_params); | |||
| if(!empty($body)) | |||
| return $body; | |||
| else | |||
| null; | |||
| } | |||
| } | |||
| @ -0,0 +1,224 @@ | |||
| <?php | |||
| namespace SamApiLib; | |||
| class HcpApi | |||
| { | |||
| private $base_url; | |||
| private $auth_token; | |||
| const cookie_name = "hcp-ns-auth"; | |||
| function __construct($base_url, $login, $password) | |||
| { | |||
| $this->base_url = $base_url; | |||
| $this->auth_token = base64_encode($login) . ":" . md5($password); | |||
| } | |||
| public static function create($protocol, $repository_url, $tenant, $namespace, $login, $password) | |||
| { | |||
| $base_url = "$protocol://$namespace.$tenant.$repository_url"; | |||
| return new self($base_url, $login, $password); | |||
| } | |||
| /** | |||
| * REST API query helper | |||
| * @param $ws_route | |||
| * @param $url_params | |||
| * @param $query_params | |||
| * @param $body_params | |||
| * @return array | |||
| */ | |||
| protected function query($ws_method, $ws_url, $url_params, $query_params, $body_params) | |||
| { | |||
| $query_string = http_build_query($query_params); | |||
| foreach ($url_params as $url_param => $value) | |||
| { | |||
| $ws_url = str_replace('{'.$url_param.'}', $value, $ws_url); | |||
| } | |||
| $url = $this->base_url . $ws_url . "?" . $query_string; | |||
| $ch = curl_init(); | |||
| curl_setopt($ch, CURLOPT_URL, $url); | |||
| curl_setopt($ch, CURLOPT_HEADER, true); | |||
| $ws_method = strtoupper($ws_method); | |||
| if($ws_method !== "GET") | |||
| { | |||
| if($ws_method === "POST") | |||
| { | |||
| curl_setopt($ch, CURLOPT_POST, true); | |||
| curl_setopt($ch, CURLOPT_POSTFIELDS, (json_encode($body_params))); | |||
| } | |||
| elseif ($ws_method === "PUT") | |||
| { | |||
| curl_setopt($ch, CURLOPT_PUT, true); | |||
| if(file_exists($body_params) && is_readable($body_params)) | |||
| { | |||
| curl_setopt($ch, CURLOPT_INFILE, fopen($body_params, "r")); | |||
| curl_setopt($ch, CURLOPT_INFILESIZE, filesize($body_params)); | |||
| } | |||
| else | |||
| { | |||
| die("file open error"); | |||
| } | |||
| } | |||
| elseif ($ws_method === "HEAD") | |||
| { | |||
| curl_setopt($ch, CURLOPT_NOBODY, true); | |||
| } | |||
| else | |||
| { | |||
| curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $ws_method); | |||
| } | |||
| } | |||
| curl_setopt($ch, CURLOPT_COOKIE, self::cookie_name . "=" . $this->auth_token); | |||
| curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |||
| $res = curl_exec($ch); | |||
| if ($res === false) | |||
| { | |||
| echo "curl error #" . curl_errno($ch) . " : " . curl_error($ch); die; | |||
| } | |||
| curl_close($ch); | |||
| // var_dump($res); die; | |||
| list($headers, $body) = explode("\r\n\r\n", $res); // PHP_EOL.PHP_EOL | |||
| $headers = explode("\r\n", $headers); | |||
| // sometimes headers are in the body | |||
| if(count($headers) === 1 && !empty($body)) | |||
| { | |||
| $headers = explode("\r\n", $body); | |||
| $body = ""; | |||
| } | |||
| else | |||
| { | |||
| $body2 = json_decode($body, true); | |||
| if(json_last_error() === JSON_ERROR_NONE) | |||
| { // content was really json | |||
| $body = $body2; // use decoded content | |||
| } | |||
| } | |||
| $status_row = array_shift($headers); | |||
| preg_match("|HTTP/1.1 (\d+) (.+)|", $status_row, $matches); | |||
| $status = $matches[1]; | |||
| $headers2 = []; | |||
| foreach ($headers as $header) | |||
| { | |||
| list($key, $value) = \explode(": ", $header); | |||
| $headers2 [$key] = $value; | |||
| } | |||
| return [$status, $headers2, $body]; | |||
| } | |||
| public function put_file ($filename, $directory) | |||
| { | |||
| $basename = basename($filename); | |||
| list($status, $headers, $body) = $this->query("put", "/rest/$directory/$basename", [], [], $filename); | |||
| if($status === "201") | |||
| { | |||
| // check the hash | |||
| $keyword = "X-HCP-Hash"; | |||
| $algo = ""; | |||
| $hash = ""; | |||
| $test = array_filter($headers, function($header) use ($keyword, &$algo, &$hash) | |||
| { | |||
| if(preg_match("|$keyword: (.+) (.+)|", $header, $matches) === 1) | |||
| { | |||
| list(,$algo, $hash) = $matches; | |||
| return true; | |||
| } | |||
| else | |||
| { | |||
| return false; | |||
| } | |||
| }); | |||
| if($algo === "SHA-256") | |||
| { | |||
| $hash_calculated = strtoupper(hash("sha256", file_get_contents($filename))); | |||
| if($hash !== $hash_calculated) | |||
| { | |||
| die("hash mismatch"); | |||
| } | |||
| } | |||
| } | |||
| //TODO handle 409 ... | |||
| return $status; | |||
| } | |||
| public function get_file ($filename) | |||
| { | |||
| list($status, $headers, $body) = $this->query("get", "/rest/$filename", [], [], []); | |||
| //TODO handle 404 ... | |||
| if($status == 200) | |||
| { | |||
| return $body; | |||
| } | |||
| else | |||
| { | |||
| return false; | |||
| } | |||
| } | |||
| public function delete_file ($filename) | |||
| { | |||
| list($status, $headers, $body) = $this->query("delete", "/rest/$filename", [], [], []); | |||
| //TODO handle 403 404 ... | |||
| return $status; | |||
| } | |||
| public function head_file ($filename) | |||
| { | |||
| list($status, $headers, $body) = $this->query("head", "/rest/$filename", [], [], []); | |||
| if($status == 200) | |||
| { | |||
| return $headers; | |||
| } | |||
| elseif($status == 404) | |||
| { | |||
| return false; | |||
| } | |||
| } | |||
| public function list_files ($directory) | |||
| { | |||
| list($status, $headers, $body) = $this->query("get", "/rest/$directory", [], [/*"type" => "directory"*/], []); | |||
| //TODO handle 404 ... | |||
| if($status == 200) | |||
| { | |||
| // echo $body . PHP_EOL; | |||
| $res = []; | |||
| $xml = \simplexml_load_string($body); | |||
| foreach ($xml->entry as $entry) | |||
| { | |||
| $elem = ((array)$entry->attributes())['@attributes']; | |||
| $res [$elem["urlName"]] = $elem; | |||
| } | |||
| return $res; | |||
| } | |||
| else | |||
| { | |||
| return false; | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,181 @@ | |||
| <?php | |||
| namespace SamApiLib; | |||
| class SamApi | |||
| { | |||
| private const ws_accept = "application/json"; | |||
| private const ws_content_type = "application/json"; | |||
| private const ws_user_agent = "service"; | |||
| private $base_url; | |||
| private $api_token; | |||
| function __construct($base_url, $api_token) | |||
| { | |||
| $this->base_url = $base_url; | |||
| $this->api_token = $api_token; | |||
| } | |||
| /** | |||
| * REST API query helper | |||
| * @param $ws_route | |||
| * @param $url_params | |||
| * @param $query_params | |||
| * @param $body_params | |||
| * @return array | |||
| */ | |||
| public function query($ws_route, $url_params, $query_params, $body_params) | |||
| { | |||
| list($ws_method, $ws_url) = explode(" ", trim($ws_route)); | |||
| $query_string = http_build_query($query_params); | |||
| foreach ($url_params as $url_param => $value) | |||
| { | |||
| $ws_url = str_replace('{'.$url_param.'}', $value, $ws_url); | |||
| } | |||
| $url = $this->base_url . $ws_url . "?" . $query_string; | |||
| $ch = curl_init(); | |||
| curl_setopt($ch, CURLOPT_URL, $url); | |||
| curl_setopt($ch, CURLOPT_HEADER, true); | |||
| curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: ".$this::ws_accept, "Content-type: ".$this::ws_content_type]); | |||
| curl_setopt($ch, CURLOPT_USERAGENT, $this::ws_user_agent); | |||
| $ws_method = strtoupper($ws_method); | |||
| if($ws_method !== "GET") | |||
| { | |||
| if($ws_method === "POST") | |||
| { | |||
| curl_setopt($ch, CURLOPT_POST, true); | |||
| curl_setopt($ch, CURLOPT_POSTFIELDS, (json_encode($body_params))); | |||
| } | |||
| else | |||
| { | |||
| curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $ws_method); | |||
| } | |||
| } | |||
| curl_setopt($ch, CURLOPT_COOKIE, "LAABS-AUTH=".urlencode($this->api_token)); | |||
| curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |||
| $res = curl_exec($ch); | |||
| if ($res === false) | |||
| { | |||
| echo "curl error #" . curl_errno($ch) . " : " . curl_error($ch); die; | |||
| } | |||
| curl_close($ch); | |||
| list($headers, $body) = explode("\r\n\r\n", $res); // PHP_EOL.PHP_EOL | |||
| $headers = explode(PHP_EOL, $headers); | |||
| $body2 = json_decode($body, true); | |||
| if(json_last_error() === JSON_ERROR_NONE) | |||
| { // content was really json | |||
| $body = $body2; // use decoded content | |||
| } | |||
| return [$headers, $body]; | |||
| } | |||
| /** | |||
| * get the file plan (organization structure) | |||
| * @return array | |||
| */ | |||
| public function getFilePlan () | |||
| { | |||
| $ws_route = " get /filePlan/filePlan/Tree"; | |||
| $url_params = []; | |||
| $query_params = []; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * get a user by its login | |||
| * @param $login | |||
| * @return array | |||
| */ | |||
| public function getUsersByLogin ($login) | |||
| { | |||
| $ws_route = " get /auth/userAccount/Search"; | |||
| $url_params = []; | |||
| $query_params = [ | |||
| "query" => "accountName = '$login'", | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->query($ws_route, $url_params, $query_params, $body_params); | |||
| if(count($body) > 0) | |||
| return $body[0]; | |||
| else | |||
| null; | |||
| } | |||
| /** | |||
| * get the Lifecycle journal | |||
| * @param string $eventType | |||
| * @param string $objectClass | |||
| * @param string $objectId | |||
| * @param string $minDate | |||
| * @param string $maxDate | |||
| * @param string $org | |||
| * @param number $maxResults | |||
| * @return array | |||
| */ | |||
| public function getLifeCycleJournals ($eventType="", $objectClass="", $objectId="", $minDate="", $maxDate="", $org="", $maxResults=50) | |||
| { | |||
| $ws_route = "get /lifeCycle/event/Search"; | |||
| $url_params = []; | |||
| $query_params = [ | |||
| "eventType" => $eventType, | |||
| "objectClass" => $objectClass, | |||
| "objectId" => $objectId, | |||
| "minDate" => $minDate, | |||
| "maxDate" => $maxDate, | |||
| "org" => $org, | |||
| "maxResults" => $maxResults, | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| /** | |||
| * get the application journal | |||
| * @param string $fromDate | |||
| * @param string $toDate | |||
| * @param string $event | |||
| * @param string $accountId | |||
| * @param string $status | |||
| * @param string $term | |||
| * @param number $maxResults | |||
| * @return array | |||
| */ | |||
| public function getApplicationJournals ($fromDate="", $toDate="", $event="", $accountId="", $status="", $term="", $maxResults=50) | |||
| { | |||
| $ws_route = "get /audit/event/Search"; | |||
| $url_params = []; | |||
| $query_params = [ | |||
| "fromDate" => $fromDate, | |||
| "toDate" => $toDate, | |||
| "event" => $event, | |||
| "accountId" => $accountId, | |||
| "status" => $status, | |||
| "term" => $term, | |||
| "maxResults" => $maxResults, | |||
| ]; | |||
| $body_params = []; | |||
| list($headers, $body) = $this->query($ws_route, $url_params, $query_params, $body_params); | |||
| return $body; | |||
| } | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| { | |||
| "name" : "archives-factory/sam-api-lib", | |||
| "description" : "SAM API library", | |||
| "type" : "library", | |||
| "autoload" : { | |||
| "psr-4" : { | |||
| "SamApiLib\\" : "SamApiLib" | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| <?php | |||
| use SamApiLib\HcpApi; | |||
| require_once __DIR__ . "/../SamApiLib/HcpApi.php"; | |||
| $protocol = "https"; | |||
| $repository_url = "af-sam.archivesfactory.cloud"; | |||
| $tenant = "cfe228"; | |||
| $namespace = "cfe228"; | |||
| $url = "https://cfe228.cfe228.af-sam.archivesfactory.cloud"; | |||
| $login = "cfe228"; | |||
| $password = "Test-S3-&-Tenant-Suppl"; | |||
| $filename = "TEST/testdoc.txt"; | |||
| $api= new HcpApi($protocol, $repository_url, $tenant, $namespace, $login, $password); | |||
| echo $api->delete_file($filename); | |||
| @ -0,0 +1,24 @@ | |||
| <?php | |||
| use SamApiLib\HcpApi; | |||
| require_once __DIR__ . "/../SamApiLib/HcpApi.php"; | |||
| $protocol = "https"; | |||
| $repository_url = "af-sam.archivesfactory.cloud"; | |||
| $tenant = "cfe228"; | |||
| $namespace = "cfe228"; | |||
| $url = "https://cfe228.cfe228.af-sam.archivesfactory.cloud"; | |||
| $login = "cfe228"; | |||
| $password = "Test-S3-&-Tenant-Suppl"; | |||
| $filename = "TEST/testdoc.txt"; | |||
| $api= new HcpApi($protocol, $repository_url, $tenant, $namespace, $login, $password); | |||
| $res = $api->get_file($filename); | |||
| if($res === false) | |||
| { | |||
| die("ERROR"); | |||
| } | |||
| echo $res; | |||
| @ -0,0 +1,24 @@ | |||
| <?php | |||
| use SamApiLib\HcpApi; | |||
| require_once __DIR__ . "/../SamApiLib/HcpApi.php"; | |||
| $protocol = "https"; | |||
| $repository_url = "af-sam.archivesfactory.cloud"; | |||
| $tenant = "cfe228"; | |||
| $namespace = "cfe228"; | |||
| $url = "https://cfe228.cfe228.af-sam.archivesfactory.cloud"; | |||
| $login = "cfe228"; | |||
| $password = "Test-S3-&-Tenant-Suppl"; | |||
| $filename = "TEST/testdoc.txt"; | |||
| $api= new HcpApi($protocol, $repository_url, $tenant, $namespace, $login, $password); | |||
| $res = $api->head_file($filename); | |||
| if($res === false) | |||
| { | |||
| die("file does not exist"); | |||
| } | |||
| var_dump($res); | |||
| @ -0,0 +1,24 @@ | |||
| <?php | |||
| use SamApiLib\HcpApi; | |||
| require_once __DIR__ . "/../SamApiLib/HcpApi.php"; | |||
| $protocol = "https"; | |||
| $repository_url = "af-sam.archivesfactory.cloud"; | |||
| $tenant = "cfe228"; | |||
| $namespace = "cfe228"; | |||
| $url = "https://cfe228.cfe228.af-sam.archivesfactory.cloud"; | |||
| $login = "cfe228"; | |||
| $password = "Test-S3-&-Tenant-Suppl"; | |||
| $filename = "TEST"; | |||
| $api= new HcpApi($protocol, $repository_url, $tenant, $namespace, $login, $password); | |||
| $res = $api->list_files($filename); | |||
| if($res === false) | |||
| { | |||
| die("ERROR"); | |||
| } | |||
| var_dump($res); | |||
| @ -0,0 +1,19 @@ | |||
| <?php | |||
| use SamApiLib\HcpApi; | |||
| require_once __DIR__ . "/../SamApiLib/HcpApi.php"; | |||
| $protocol = "https"; | |||
| $repository_url = "af-sam.archivesfactory.cloud"; | |||
| $tenant = "cfe228"; | |||
| $namespace = "cfe228"; | |||
| $url = "https://cfe228.cfe228.af-sam.archivesfactory.cloud"; | |||
| $login = "cfe228"; | |||
| $password = "Test-S3-&-Tenant-Suppl"; | |||
| $filename = "/home/laulau/testdoc.txt"; | |||
| $directory = "TEST"; | |||
| $api= new HcpApi($protocol, $repository_url, $tenant, $namespace, $login, $password); | |||
| echo $api->put_file($filename, $directory); | |||