diff --git a/islandora.module b/islandora.module index c12b034b..04185161 100644 --- a/islandora.module +++ b/islandora.module @@ -164,8 +164,11 @@ function islandora_menu() { 'access arguments' => array(2, FEDORA_ADD_DS) ); - $items['islandora/object/%islandora_object/datastream/%'] = array( + // this menu item has been modified to use a tokened version of islandora_object_load + // added load arguments to pass both pid and dsid to loader + $items['islandora/object/%islandora_tokened_object/datastream/%'] = array( 'title' => 'View datastream', + 'load arguments' => array(4), 'page callback' => 'islandora_view_datastream', 'page arguments' => array(2, 4), 'type' => MENU_CALLBACK, @@ -174,7 +177,8 @@ function islandora_menu() { 'access arguments' => array(2, FEDORA_VIEW), ); - $items['islandora/object/%islandora_object/datastream/%/view'] = array( + // this menu item has been modified to use a tokened version of islandora_object_load + $items['islandora/object/%islandora_tokened_object/datastream/%/view'] = array( 'title' => 'View datastream', 'type' => MENU_DEFAULT_LOCAL_TASK, ); @@ -208,7 +212,25 @@ function islandora_menu() { 'access callback' => 'islandora_access_callback', 'access arguments' => array(2, FEDORA_PURGE), ); +/* +// These are two test hooks that can be used to create and validate authentication tokens +// They are for debug purposes only and are currently disabled + $items['admin/islandora/get_object_token'] = array( + 'title' => 'Object Token', + 'page callback' => 'islandora_get_object_token', + 'access callback' => TRUE, + 'file' => 'includes/islandora_authtokens.inc', + 'type' => MENU_CALLBACK, + ); + $items['admin/islandora/validate_object_token'] = array( + 'title' => 'Validate Object Token', + 'page callback' => 'islandora_validate_object_token', + 'access callback' => TRUE, + 'file' => 'includes/islandora_authtokens.inc', + 'type' => MENU_CALLBACK, + ); +*/ return $items; } @@ -420,7 +442,6 @@ function islandora_view_object($fedora_object = NULL) { module_load_include('inc', 'islandora', 'includes/utilities'); global $user; - if (!$fedora_object) { return drupal_not_found(); } @@ -498,6 +519,57 @@ function islandora_object_load($object_id) { } } +/** + * A helper function to get a connection and return an object using a token for authentication. + * + * @param string $object_id + * @param string $datastream_id + * @return FedoraObject + */ +function islandora_tokened_object_load($object_id, $datastream_id) { + if (in_array('token', $_GET)) { + $token = $_GET['token']; + } + else { + $token = NULL; + } + + if ($token) { + module_load_include('inc', 'islandora', 'includes/islandora_authtokens'); + $tokenUser = islandora_validate_object_token($object_id, $datastream_id, $token); + + if ($tokenUser) { +// The following block is the same as the islandora_object_load function +// and we can probably just update the islandora_tuque static object and call +// islandora_object_load so we don't have to duplicate the function code + module_load_include('inc', 'islandora', 'includes/tuque'); + $islandora_tuque = &drupal_static(__FUNCTION__); + + if (!$islandora_tuque) { + $islandora_tuque = new IslandoraTuque($tokenUser); + } + + if (IslandoraTuque::exists()) { + try { + $fedora_object = $islandora_tuque->repository->getObject($object_id); + } catch (Exception $e) { + return NULL; + } + + drupal_alter('islandora_object', $fedora_object); + return $fedora_object; + } + else { + IslandoraTuque::getError(); + return NULL; + } +// + } + } + // By default, if no token is found, use original load function + return islandora_object_load($object_id); +} + /** * A helper function to get a connection and purge an object * @@ -634,7 +706,3 @@ function islandora_islandora_required_objects() { ); } - - - -