-----
====== Update a user's expiry date (to_date) ======
Although there are a couple of places to update a user's expiry date, we recommend using the top-ups in order to leverage the audit log of the transactions.
* RADIUSdesk includes a component called 'ISP-Plumbing' which needs to be configured first.
* When this component is configured, any active sessions for a user will be terminated if the user's admin state was set to expired (to_date in the past) and set to a time in the future.
* This comes in handy if the user was in a suspended IP Pool with the expired state and then a payment was made thus making his account active again.
* To change the expiry date (to_date) of a Permanent User we first have to determine the id of the Permanent User.
* A CRM system typically do not know the id of the Permanent User in RADIUSdesk.
* With the sample script we use two APIs
* The one API is used get a list of Permanent Users to collect their ids.
* The other API is used to set the new expiry date (to_date) of the collected users
$operator,
"value" => $value,
"property" => $filter
]];
$encoded_filter = urlencode(json_encode($filter_array));
$find_url = "$server/cake4/rd_cake/radaccts/index.json?page=1&start=0&limit=1000&filter=$encoded_filter&token=$token&cloud_id=$cloud_id&only_connected=true";
// Get User IDs
$listOfIds = getIds($find_url);
if ($listOfIds) {
foreach ($listOfIds as $id) {
$payload = [
'cloud_id' => $cloud_id,
'token' => $token,
$id => $id
];
print_r($payload);
$response = sendDisconnectRequest($api_url, $payload);
echo "Terminated Session ID $id - Response: $response\n";
}
}
function getIds($find_url) {
$context = stream_context_create([
'http' => [
'header' => "Accept: application/json\r\nContent-Type: application/json\r\n"
]
]);
echo "Fetching URL: $find_url\n";
$response = file_get_contents($find_url, false, $context);
if ($response === false) {
echo "Error fetching data\n";
return false;
}
$data = json_decode($response, true);
if (!empty($data['items']) && is_array($data['items'])) {
echo "There are " . count($data['items']) . " items\n";
return array_column($data['items'], 'id');
}
echo "No items found.\n";
return false;
}
function changeExpiryDate($url, $data) {
// Build the query string from $data
$queryString = http_build_query($data);
// Append it to the URL
$urlWithParams = $url . '?' . $queryString;
$ch = curl_init($urlWithParams);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Accept: application/json'] // optional
]);
$response = curl_exec($ch);
if ($response === false) {
echo "cURL error: " . curl_error($ch) . "\n";
}
curl_close($ch);
return $response;
}
?>
* We are not limited to only one user but we can adjust the filter for instance to terminate the sessions of all the users with a specific suffix e.g. @dev.
* For this we have to make the following adjustments:
$username = '@dev';
// Filter settings
$filter = 'username'; //field that filter should apply to
$operator = 'like'; //Options '==','like'
$value = $username; //can also be set to boolean e.g. true or false to filter for instance on the 'active' field
$limit = 1000;