示例#1
0
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 = "";
示例#2
0
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;
}