<?php
// DSpace API endpoint for creating new items
define('DSpace_API_URL', '
http://your-dspace-domain.com/dspace-spring-rest/api/submission/items');
// DSpace authentication credentials
define('USERNAME', '
dspacede...@gmail.com');
define('PASSWORD', 'dspace');
// CSRF token endpoint
define('CSRF_TOKEN_URL', '
http://your-dspace-domain.com/dspace-spring-rest/csrf');
function loginAndGetCSRFToken() {
// Initialize cURL session
$ch = curl_init();
// Set the URL for the login endpoint
curl_setopt($ch, CURLOPT_URL, 'https://{dspace-server.url}/server/api/authn/login');
// Set the request method to POST
curl_setopt($ch, CURLOPT_POST, 1);
// Set the request data
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
'user' => USERNAME,
'password' => PASSWORD
)));
// Set options to receive the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute the request
$response = curl_exec($ch);
// Close the cURL session
curl_close($ch);
// Check if the request was successful
if ($response === false) {
// Handle cURL error
return "Error: cURL error: " . curl_error($ch);
} else {
// Parse the JSON response
$response_data = json_decode($response, true);
// Check if the token was retrieved successfully
if (isset($response_data['token'])) {
return $response_data['token'];
} else {
// Handle invalid response
return "Error: Invalid response: " . $response;
}
}
}
function uploadPublication($metadata, $file, $csrf_token) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, DSpace_API_URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, buildFormData($metadata, $file));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: multipart/form-data',
'DSPACE-XSRF-TOKEN: ' . $csrf_token,
));
curl_setopt($ch, CURLOPT_COOKIE, 'DSPACE-XSRF-COOKIE={xsrf-cookie}');
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status_code == 201) {
$response_data = json_decode($response, true);
return $response_data['handle'];
} else {
return "Error: $status_code - $response";
}
}
function buildFormData($metadata, $file) {
$formData = array();
// Add metadata fields
foreach ($metadata as $key => $value) {
if (is_array($value)) {
foreach ($value as $index => $item) {
$formData["metadata[$key][$index][value]"] = $item;
}
} else {
$formData["metadata[$key][0][value]"] = $value;
}
}
// Add file
$formData['file'] = new CURLFile($file['tmp_name'], $file['type'], $file['name']);
return $formData;
}
// Example metadata for a publication with multiple authors
$metadata = array(
"dc.title" => "Sample Publication Title",
"dc.contributor.author" => array("John Doe", "Jane Smith", "Bob Johnson"),
"dc.date.issued" => "2024-04-24",
"dc.publisher" => "Sample Publisher",
// Add more metadata fields as needed
);
// Example file upload (replace with your file details)
$file = $_FILES['file'];
// Login and retrieve CSRF token
$csrf_token = loginAndGetCSRFToken();
// Upload the publication
$result = uploadPublication($metadata, $file, $csrf_token);
echo $result;
?>
With this, when i run the code i have 403 error CSFR Invalid i can't understand what problem is.