Subversion Repositories oidplus

Compare Revisions

Ignore whitespace Rev 1294 → Rev 1295

/trunk/includes/functions.inc.php
685,12 → 685,12
if (is_null($mixed)) {
return false;
} else if (is_string($mixed)) {
return (strtolower($mixed) == 'true') || ($mixed == '1') || (strtolower($mixed) == 'y') || (strtolower($mixed) == 't');
return (strtolower($mixed) == 'true') || ($mixed == '1') || (strtolower($mixed) == 'y') || (strtolower($mixed) == 't') || (strtolower($mixed) == 'on');
} else if (is_bool($mixed)) {
return $mixed;
} else if (is_numeric($mixed)) {
return $mixed != 0;
} else {
return $mixed ? true : false; // let PHP decide...
return (bool)$mixed; // let PHP decide...
}
}
/trunk/plugins/viathinksoft/publicPages/000_objects/OIDplusPagePublicObjects.class.php
77,126 → 77,183
}
 
/**
* Implements INTF_OID_1_3_6_1_4_1_37476_2_5_2_3_9
* @param string $requestMethod
* @param string $endpoint
* @param array $json_in
* @return array|false
* @return never-return
*/
public function restApiCall(string $requestMethod, string $endpoint, array $json_in) {
if (str_starts_with($endpoint, 'objects/')) {
$id = substr($endpoint, strlen('objects/'));
if ($requestMethod == "OPTIONS") {
header("access-control-allow-credentials: true");
header("access-control-allow-headers: Keep-Alive,User-Agent,Authorization");
header("access-control-allow-methods: GET, PUT, POST, DELETE, PATCH, OPTIONS");
header("access-control-allow-origin: *");
http_response_code(204/*No content*/);
OIDplus::invoke_shutdown();
die(); // return array();
private function restApiCall_OPTIONS(string $endpoint, array $json_in) {
header("access-control-allow-credentials: true");
header("access-control-allow-headers: Keep-Alive,User-Agent,Authorization");
header("access-control-allow-methods: GET, PUT, POST, DELETE, PATCH, OPTIONS");
header("access-control-allow-origin: *");
http_response_code(204/*No content*/);
OIDplus::invoke_shutdown();
die(); // return array();
}
 
/**
* @param string $endpoint
* @param array $json_in
* @return array
*/
private function restApiCall_GET(string $endpoint, array $json_in): array {
$id = substr($endpoint, strlen('objects/'));
$obj = OIDplusObject::findFitting($id);
if (!$obj) throw new OIDplusException(_L('The object %1 was not found in this database.', $id), null, 404);
 
if (!$obj->userHasReadRights()) throw new OIDplusException('Insufficient authorization to read information about this object.', null, 401);
 
$output = array();
 
$output['status'] = 0/*OK*/;
$output['status_bits'] = [];
 
//$output['id'] = $obj->nodeId(true);
$output['ra_email'] = $obj->getRaMail();
$output['comment'] = $obj->getComment();
$output['confidential'] = $obj->isConfidential();
$output['title'] = $obj->getTitle();
$output['description'] = $obj->getDescription();
 
if ($obj instanceof OIDplusOid) {
$output['asn1ids'] = array(); // TODO: Rename to oid-alphanum-id ?
foreach ($obj->getAsn1Ids() as $asn) {
$output['asn1ids'][] = $asn->getName();
}
else if ($requestMethod == "GET"/*Select*/) {
$obj = OIDplusObject::findFitting($id);
if (!$obj) throw new OIDplusException(_L('The object %1 was not found in this database.', $id), null, 404);
 
if (!$obj->userHasReadRights()) throw new OIDplusException('Insufficient authorization to read information about this object.', null, 401);
$output['iris'] = array(); // TODO: Rename to oid-unicode-label ?
foreach ($obj->getIris() as $iri) {
$output['iris'][] = $iri->getName();
}
}
 
$output = array();
http_response_code(200);
return $output;
}
 
$output['status'] = 0/*OK*/;
$output['status_bits'] = [];
/**
* @param string $endpoint
* @param array $json_in
* @return array
*/
private function restApiCall_PUT(string $endpoint, array $json_in): array {
$id = substr($endpoint, strlen('objects/'));
$obj = OIDplusObject::parse($id);
if (!$obj) throw new OIDplusException(_L('%1 action failed because object "%2" cannot be parsed!', 'PUT', $id), null, 400);
 
//$output['id'] = $obj->nodeId(true);
$output['ra_email'] = $obj->getRaMail();
$output['comment'] = $obj->getComment();
$output['confidential'] = $obj->isConfidential();
$output['title'] = $obj->getTitle();
$output['description'] = $obj->getDescription();
$params = array();
$params['id'] = $id;
$params['ra_email'] = $json_in['ra_email'] ?? '';
$params['comment'] = $json_in['comment'] ?? '';
$params['confidential'] = $json_in['confidential'] ?? false;
$params['title'] = $json_in['title'] ?? '';
$params['description'] = $json_in['description'] ?? '';
$params['asn1ids'] = $json_in['asn1ids'] ?? array();
$params['iris'] = $json_in['iris'] ?? array();
 
if ($obj instanceof OIDplusOid) {
$output['asn1ids'] = array(); // TODO: Rename to oid-alphanum-id ?
foreach ($obj->getAsn1Ids() as $asn) {
$output['asn1ids'][] = $asn->getName();
}
if (OIDplusObject::exists($id)) {
// TODO: Problem: The superior RA cannot set title/description, so they cannot perform the PUT command!
$output = self::action_Update($params);
} else {
$params['parent'] = $obj->getParent();
$params['id_fully_qualified'] = true;
$output = self::action_Insert($params);
}
 
$output['iris'] = array(); // TODO: Rename to oid-unicode-label ?
foreach ($obj->getIris() as $iri) {
$output['iris'][] = $iri->getName();
}
}
$output['status_bits'] = [];
if (($output['status'] & 1) == 1) $output['status_bits'][1] = 'RA is not registered, but it can be invited';
if (($output['status'] & 2) == 2) $output['status_bits'][2] = 'RA is not registered and it cannot be invited';
if (($output['status'] & 4) == 4) $output['status_bits'][4] = 'OID is a well-known OID, so RA, ASN.1, and IRI identifiers were reset';
if (($output['status'] & 8) == 8) $output['status_bits'][8] = 'User has write rights to the freshly created OID';
 
http_response_code(200);
return $output;
} else if ($requestMethod == "PUT"/*Replace*/) {
$obj = OIDplusObject::parse($id);
if (!$obj) throw new OIDplusException(_L('%1 action failed because object "%2" cannot be parsed!', 'PUT', $id), null, 400);
http_response_code(200);
return $output;
}
 
$params = array();
$params['id'] = $id;
$params['ra_email'] = $json_in['ra_email'] ?? '';
$params['comment'] = $json_in['comment'] ?? '';
$params['confidential'] = $json_in['confidential'] ?? false;
$params['title'] = $json_in['title'] ?? '';
$params['description'] = $json_in['description'] ?? '';
$params['asn1ids'] = $json_in['asn1ids'] ?? array();
$params['iris'] = $json_in['iris'] ?? array();
/**
* @param string $endpoint
* @param array $json_in
* @return array
*/
private function restApiCall_POST(string $endpoint, array $json_in): array {
$id = substr($endpoint, strlen('objects/'));
$obj = OIDplusObject::parse($id);
if (!$obj) throw new OIDplusException(_L('%1 action failed because object "%2" cannot be parsed!', 'GET', $id), null, 400);
$params = $json_in;
$params['parent'] = $obj->getParent();
$params['id_fully_qualified'] = true;
$params['id'] = $id;
$output = self::action_Insert($params);
 
if (OIDplusObject::exists($id)) {
// TODO: Problem: The superior RA cannot set title/description, so they cannot perform the PUT command!
$output = self::action_Update($params);
} else {
$params['parent'] = $obj->getParent();
$params['id_fully_qualified'] = true;
$output = self::action_Insert($params);
}
$output['status_bits'] = [];
if (($output['status'] & 1) == 1) $output['status_bits'][1] = 'RA is not registered, but it can be invited';
if (($output['status'] & 2) == 2) $output['status_bits'][2] = 'RA is not registered and it cannot be invited';
if (($output['status'] & 4) == 4) $output['status_bits'][4] = 'OID is a well-known OID, so RA, ASN.1, and IRI identifiers were reset';
if (($output['status'] & 8) == 8) $output['status_bits'][8] = 'User has write rights to the freshly created OID';
 
$output['status_bits'] = [];
if (($output['status'] & 1) == 1) $output['status_bits'][1] = 'RA is not registered, but it can be invited';
if (($output['status'] & 2) == 2) $output['status_bits'][2] = 'RA is not registered and it cannot be invited';
if (($output['status'] & 4) == 4) $output['status_bits'][4] = 'OID is a well-known OID, so RA, ASN.1, and IRI identifiers were reset';
if (($output['status'] & 8) == 8) $output['status_bits'][8] = 'User has write rights to the freshly created OID';
http_response_code(200);
return $output;
}
 
http_response_code(200);
return $output;
} else if ($requestMethod == "POST"/*Insert*/) {
$params = $json_in;
$obj = OIDplusObject::parse($id);
if (!$obj) throw new OIDplusException(_L('%1 action failed because object "%2" cannot be parsed!', 'GET', $id), null, 400);
$params['parent'] = $obj->getParent();
$params['id_fully_qualified'] = true;
$params['id'] = $id;
$output = self::action_Insert($params);
/**
* @param string $endpoint
* @param array $json_in
* @return array
*/
private function restApiCall_PATCH(string $endpoint, array $json_in): array {
$id = substr($endpoint, strlen('objects/'));
$params = $json_in;
$params['id'] = $id;
$output = self::action_Update($params);
 
$output['status_bits'] = [];
if (($output['status'] & 1) == 1) $output['status_bits'][1] = 'RA is not registered, but it can be invited';
if (($output['status'] & 2) == 2) $output['status_bits'][2] = 'RA is not registered and it cannot be invited';
if (($output['status'] & 4) == 4) $output['status_bits'][4] = 'OID is a well-known OID, so RA, ASN.1, and IRI identifiers were reset';
if (($output['status'] & 8) == 8) $output['status_bits'][8] = 'User has write rights to the freshly created OID';
$output['status_bits'] = [];
if (($output['status'] & 1) == 1) $output['status_bits'][1] = 'RA is not registered, but it can be invited';
if (($output['status'] & 2) == 2) $output['status_bits'][2] = 'RA is not registered and it cannot be invited';
if (($output['status'] & 4) == 4) $output['status_bits'][4] = 'OID is a well-known OID, so RA, ASN.1, and IRI identifiers were reset';
if (($output['status'] & 8) == 8) $output['status_bits'][8] = 'User has write rights to the freshly created OID';
 
http_response_code(200);
return $output;
} else if ($requestMethod == "PATCH"/*Modify*/) {
$params = $json_in;
$params['id'] = $id;
$output = self::action_Update($params);
http_response_code(200);
return $output;
}
 
$output['status_bits'] = [];
if (($output['status'] & 1) == 1) $output['status_bits'][1] = 'RA is not registered, but it can be invited';
if (($output['status'] & 2) == 2) $output['status_bits'][2] = 'RA is not registered and it cannot be invited';
if (($output['status'] & 4) == 4) $output['status_bits'][4] = 'OID is a well-known OID, so RA, ASN.1, and IRI identifiers were reset';
if (($output['status'] & 8) == 8) $output['status_bits'][8] = 'User has write rights to the freshly created OID';
/**
* @param string $endpoint
* @param array $json_in
* @return array
*/
private function restApiCall_DELETE(string $endpoint, array $json_in): array {
$id = substr($endpoint, strlen('objects/'));
$params = $json_in;
$params['id'] = $id;
$output = self::action_Delete($params);
 
http_response_code(200);
return $output;
} else if ($requestMethod == "DELETE"/*Delete*/) {
$params = $json_in;
$params['id'] = $id;
$output = self::action_Delete($params);
$output['status_bits'] = [];
 
$output['status_bits'] = [];
http_response_code(200);
return $output;
}
 
http_response_code(200);
return $output;
/**
* Implements INTF_OID_1_3_6_1_4_1_37476_2_5_2_3_9
* @param string $requestMethod
* @param string $endpoint
* @param array $json_in
* @return array|false
*/
public function restApiCall(string $requestMethod, string $endpoint, array $json_in) {
if (str_starts_with($endpoint, 'objects/')) {
if ($requestMethod == "OPTIONS") {
$this->restApiCall_OPTIONS($endpoint, $json_in);
} else if ($requestMethod == "GET"/*Select*/) {
return $this->restApiCall_GET($endpoint, $json_in);
} else if ($requestMethod == "PUT"/*Replace*/) {
return $this->restApiCall_PUT($endpoint, $json_in);
} else if ($requestMethod == "POST"/*Insert*/) {
return $this->restApiCall_POST($endpoint, $json_in);
} else if ($requestMethod == "PATCH"/*Modify*/) {
return $this->restApiCall_PATCH($endpoint, $json_in);
} else if ($requestMethod == "DELETE"/*Delete*/) {
return $this->restApiCall_DELETE($endpoint, $json_in);
} else {
//throw new OIDplusException(_L("Not implemented"), null, 501);
throw new OIDplusException(_L("Unsupported request method"), null, 400);