101 lines
3.7 KiB
PHP
101 lines
3.7 KiB
PHP
<!DOCTYPE html>
|
||
|
||
|
||
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<title>GPO Query</title>
|
||
<link rel="stylesheet" href="styles.css">
|
||
</head>
|
||
<body>
|
||
<h2>Query GPOs by Group</h2>
|
||
This tool allows you to query Group Policy Objects in Active Directory by Restricted Group.<br>
|
||
Search is case insensitive and supports partial match. <br>
|
||
Once you have the GPO name, you can locate this in the GPO management snap-in and find what OUs it links to.<br><p>
|
||
<?php if (isset($_GET['group'])) : ?>
|
||
<form action="index.php" method="GET">
|
||
<label for="group">Group Name:</label>
|
||
<input type="text" id="group" name="group" value="<?php echo htmlspecialchars($_GET['group']); ?>" required>
|
||
<button type="submit">Query</button>
|
||
</form><p>
|
||
<?php else : ?>
|
||
<form action="index.php" method="GET">
|
||
<label for="group">Group Name:</label>
|
||
<input type="text" id="group" name="group" required>
|
||
<button type="submit">Query</button>
|
||
</form><p>
|
||
<?php endif; ?>
|
||
|
||
<?php
|
||
if (isset($_GET['group'])) {
|
||
$group = urlencode($_GET['group']);
|
||
$url = "http://10.34.115.140:5000/gpo?group=$group";
|
||
// query API
|
||
$ch = curl_init();
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||
curl_setopt($ch, CURLOPT_URL, $url);
|
||
$response = curl_exec($ch);
|
||
if ($e = curl_error($ch)) {
|
||
die("Curl error: $e");
|
||
}
|
||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||
if ($httpCode != 200) {
|
||
die("Error: Received HTTP code $httpCode");
|
||
}
|
||
curl_close($ch);
|
||
$data = json_decode($response, true);
|
||
// build the group array
|
||
$gpoMap = []; // will look like: [ 'GPO‑Name' => ['Administrator' => [...], 'vnc_admin' => [...]] ]
|
||
|
||
if (isset($data['error'])) {
|
||
echo "<p>Error: {$data['error']}</p>";
|
||
} else {
|
||
foreach ($data as $row) {
|
||
// safety: skip rows that do not contain the expected keys
|
||
if (!isset($row['gpo'], $row['ad_group'], $row['local_group'])) {
|
||
continue;
|
||
}
|
||
$gpoName = $row['gpo'];
|
||
$adGroup = $row['ad_group'];
|
||
$localGroup = strtolower($row['local_group']);
|
||
// initialise if not already done
|
||
if (!isset($gpoMap[$gpoName])) {
|
||
$gpoMap[$gpoName] = [
|
||
'administrators' => [],
|
||
'vnc_admin' => []
|
||
];
|
||
}
|
||
// put the ad_group into the right bucket
|
||
if ($localGroup === 'administrators') {
|
||
$gpoMap[$gpoName]['administrators'][] = $adGroup;
|
||
} elseif ($localGroup === 'vnc_admin') {
|
||
$gpoMap[$gpoName]['vnc_admin'][] = $adGroup;
|
||
}
|
||
}
|
||
ksort($gpoMap, SORT_STRING | SORT_FLAG_CASE);
|
||
echo '<table border="1" cellpadding="4" cellspacing="0">';
|
||
echo '<tr><th>GPO</th><th>Administrators</th><th>vnc_admin</th></tr>';
|
||
|
||
foreach ($gpoMap as $gpoName => $cols) {
|
||
// Remove duplicates and build comma‑separated lists
|
||
$adminGroups = implode('<br>', array_unique($cols['administrators']));
|
||
$vncGroups = implode('<br>', array_unique($cols['vnc_admin']));
|
||
|
||
echo '<tr>';
|
||
echo "<td>{$gpoName}</td>";
|
||
echo "<td>{$adminGroups}</td>";
|
||
echo "<td>{$vncGroups}</td>";
|
||
echo '</tr>';
|
||
}
|
||
echo '</table>';
|
||
}
|
||
|
||
} else {
|
||
echo "<p>No group specified.</p>";
|
||
}
|
||
echo "<p>Source code can be found <a target='_blank' rel='noopener noreferrer' href='https://gitea.matt-cloud.com/matt/gpo_lookup'>here</a>.<p>";
|
||
?>
|
||
|
||
</body>
|
||
</html>
|