if (!isset($irods_url) || is_null($irods_url) || $irods_url == '') { error_log("Found no iRODS server in SR!"); relative_redirect("error-text.php?error=" . urlencode("No iRODS servers configured.")); } if (!isset($user)) { $user = geni_loadUser(); } if (!isset($user) || is_null($user) || !$user->isActive()) { relative_redirect('home.php'); } // If we disable_irods, then only let this page run for testers if (isset($disable_irods) and !$user->hasAttribute('enable_irods')) { error_log("User " . $user->prettyName() . " not enabled for iRODS"); relative_redirect('profile.php'); } $username = base_username($user); $baseusername = $username; $certStruct = openssl_x509_parse($user->certificate()); $subjectDN = $certStruct['name']; //$userurn = $user->urn(); ///* Sign the outbound message with the portal cert/key */ //$portal = Portal::getInstance(); //$portal_cert = $portal->certificate(); //$portal_key = $portal->privateKey(); $didCreate = False; // Did we create the account on this page $userExisted = False; // Did the user already exist $usernameTaken = False; // Is the basic username taken $irodsError = "";
function removeFromGroup($project_id, $group_name, $member_id, $user) { if (!isset($project_id) || $project_id == "-1" || !uuid_is_valid($project_id)) { error_log("iRODS removeFromGroup: not a valid project ID. Nothing to do. {$project_id}"); return -1; } if (!isset($group_name) || is_null($group_name) || $group_name === '') { error_log("iRODS removeFromGroup: not a valid group name. Nothing to do. {$project_id}, {$group_name}"); return -1; } if (!isset($member_id) || $member_id == "-1" || !uuid_is_valid($member_id)) { error_log("iRODS removeFromGroup: not a valid member ID. Nothing to do. {$member_id}"); return -1; } global $disable_irods; if (isset($disable_irods)) { error_log("irods removeFromGroup: disable_irods was set. Doing nothing."); return -1; } // must get member username $member = geni_load_user_by_member_id($member_id); $username = base_username($member); error_log("iRODS removeFromGroup {$group_name} member {$member_id} with username {$username}"); global $irods_url; global $portal_irods_user; global $portal_irods_pw; global $irods_cert; $removed = -1; // -1=Error, 0=Success, 1=Already gone try { // Note the method is called doRESTCall, but the op arg tells the real method $rmstruct = doRESTCall($irods_url . IRODS_REMOVE_USER_URI1 . $group_name . IRODS_REMOVE_USER_URI2 . $username, $portal_irods_user, $portal_irods_pw, "DELETE", "", "", $irods_cert); // look for (\r or \n or \r\n){2} and move past that preg_match("/(\r|\n|\r\n){2}([^\r\n].+)\$/", $rmstruct, $m); if (!array_key_exists(2, $m)) { error_log("irods removeFromGroup: Malformed DELETE result from iRODS - error? Got: " . $rmstruct); throw new Exception("Failed to remove member from iRODS group - server error: " . $rmstruct); } // error_log("DELETE result content: " . $m[2]); $rmjson = json_decode($m[2], true); // Parse the json return // error_log("remove user from group result: " . print_r($rmjson, true)); if (is_array($rmjson)) { $status = null; $msg = null; $groupCmdStatus = null; if (array_key_exists("status", $rmjson)) { $status = $rmjson["status"]; // Return true if 0 if removed the user, 1 if user wasnt in the group, -1 on error if ($status == IRODS_STATUS_ERROR) { $removed = -1; } elseif ($status == IRODS_STATUS_SUCCESS) { $removed = 0; } } if (array_key_exists("message", $rmjson)) { $msg = $rmjson["message"]; // error_log("removeFromGroup result: '$msg'"); } if (array_key_exists(IRODS_USER_GROUP_COMMAND_STATUS, $rmjson)) { $groupCmdStatus = $rmjson[IRODS_USER_GROUP_COMMAND_STATUS]; if ($groupCmdStatus != IRODS_STATUS_SUCCESS) { if ($groupCmdStatus === IRODS_STATUS_BAD_USER) { error_log("iRODS: user {$username} was not in group {$group_name} to delete. ({$groupCmdStatus}: '{$msg}')"); } else { error_log("iRODS failed to remove {$username} from group {$group_name}: {$groupCmdStatus}: '{$msg}'"); } } } elseif ($removed !== 0) { error_log("iRODS failed to remove user {$username} from group {$group_name}: '{$msg}'"); } } else { $removed = -1; error_log("iRODS malformed return from removeUserFromGroup: " . print_r($rmjson, true)); } } catch (Exception $e) { error_log("Error doing iRODS delete to remove member from group: " . $e->getMessage()); $removed = -1; } // Return 0 if removed the user, 1 if user already not in the group, -1 on error return $removed; }