HEX
Server: Apache
System: Linux iad1-shared-e1-19 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User: austral3d (14892361)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: /home/austral3d/fourdplan.com/fdpforge/php/loadModel.php
<?php


// ------- Importante -----
// Descargar un certificado de seguridad para que curl pueda conectarse a la página de forge
//


session_start();

require_once("comun/conexion_mysqli.php");
require_once("comun/encodings.php");
require_once("comun/httpMethods.php");

$db = fdp_connect();

$assembly_id = "";
if(!isset($_POST["assembly_id"])) {
	die("Debe seleccionar un assembly.");
}
$assembly_id = $_POST["assembly_id"];

// Archivo con los datos para conectar a forge y ejecutar la app
$config = fdp_read_file("forge");
$cert_path = $config["cert_path"];
$client_id = $config["client_id"];
$client_secret = $config["client_secret"];

$access_token = "";

// Autentica al cliente para que pueda ejecutar la aplicación. Se guarda en SESSION para no
// pedir autorización cada vez

$url_auth = $config["author_url"];
$scopes = "data:read data:write data:create bucket:create bucket:read";
$data = array(
	"params" => array(
		"client_id" => $client_id,
	    "client_secret" => $client_secret,
	    "grant_type" => "client_credentials",
	    "scope" => $scopes)
);

$auth = fdp_request($url_auth, $data);
$access_token = json_decode($auth)->access_token;

// Esta llave debe ser única. La mejor manera es usar la id del cliente.
//$bucketKey = toLowerCase($client_id) . $assembly_id; 
//$policyKey = 'transient';

$data = array(
	"headers" => array(
		"Authorization: Bearer " . $access_token,)
);

$url_bucket = $config["bucket_url"];
$buckets = json_decode(fdp_request($url_bucket, $data, GET));
$test_bucket_id = $buckets->items[1]->bucketKey;

$url_object = $url_bucket . "/" . encodeURIComponent($test_bucket_id) . "/objects";
$objects = json_decode(fdp_request($url_object, $data, GET));
$test_object_urn = $objects->items[1]->objectId;

$result["token"] = $access_token;
$result["urn"] = base64url_encode($test_object_urn);

echo json_encode($result);

// Envía una petición a una dirección de la api de forge con parametros.
// Opcionalmente se puede especificar si la petición es POST o no
function fdp_request($url, $data, $m = POST) {
	global $cert_path;

	// curl es una extensión de php para descargar archivos desde servidores remotos
	$curl = curl_init($url);

	if(isset($data['headers'])) {
		curl_setopt($curl, CURLOPT_HTTPHEADER, $data['headers']);
	}
	if($m == POST && isset($data["params"])) {
		$postFields = http_build_query($data['params']);
		curl_setopt($curl, CURLOPT_POST, sizeof($data['params']));
		curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
	}
	
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_CAINFO, $cert_path . "/cacert.pem");
	
	$response = curl_exec($curl);
	if(!$response)
    {
        trigger_error(curl_error($curl));
    }

	curl_close($curl);
	return $response;
}

?>