Skip to content
Snippets Groups Projects
Commit 9cd242ec authored by Tibo's avatar Tibo
Browse files

reorganize subnets

parent f2f27f76
No related branches found
No related tags found
No related merge requests found
Pipeline #18597 passed
......@@ -135,13 +135,33 @@ class OrganizationController extends Controller
{
$this->authorize("show", $organization);
$addresses = [];
$networks = [];
foreach ($organization->servers as $server) {
foreach ($server->info->addresses as $address) {
$addresses[$address] = $server;
// for now I assume 24 bits subnet masks
$network = $this->extractSubnet($address, 24);
$networks[$network][$address] = $server;
}
}
ksort($addresses);
return view("organization.networks", ["addresses" => $addresses]);
ksort($networks);
return view("organization.networks", ["networks" => $networks]);
}
/**
* Extract subnet address from IP and mask length
* E.g. extractSubnet("192.168.178.2", 24) => "192.168.178.0"
*
* @param string $ip
* @param int $len
* @return string
*/
private function extractSubnet(string $ip, int $len) : string
{
#list($ip, $len) = explode('/', $ip);
$ip_long = ip2long($ip);
$subnet_mask = (0xffffffff >> (32 - $len)) << (32 - $len);
$subnet = long2ip($ip_long & $subnet_mask);
return $subnet;
}
}
......@@ -6,23 +6,34 @@
<div class="container">
<h1>Networks</h1>
<table class="table table-striped">
@foreach($addresses as $address => $server)
<tr>
<td>
{{ $address }}
<a class="badge badge-primary" href="ssh://{{ $address }}">ssh</a>
<a class="badge badge-primary" href="http://{{ $address }}">http</a>
</td>
<td>
<a class="text-decoration-none"
href="{{ action('ServerController@show', ['server' => $server]) }}">
{{ $server->name }}
</a>
</td>
</tr>
<p>
@foreach ($networks as $subnet => $addresses)
<a href="#subnet-{{ $subnet }}" class="btn btn-primary btn-sm">{{ $subnet }}</a>
@endforeach
</table>
</p>
@foreach ($networks as $subnet => $addresses)
<h3 id="subnet-{{ $subnet }}"
class="mt-4">
{{ $subnet }}
</h3>
<table class="table table-striped table-sm">
@foreach($addresses as $address => $server)
<tr>
<td>
{{ $address }}
<a class="badge badge-primary" href="ssh://{{ $address }}">ssh</a>
<a class="badge badge-primary" href="http://{{ $address }}">http</a>
</td>
<td>
<a class="text-decoration-none"
href="{{ action('ServerController@show', ['server' => $server]) }}">
{{ $server->name }}
</a>
</td>
</tr>
@endforeach
</table>
@endforeach
</div>
@endsection
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment