Compare commits
No commits in common. "main" and "feature/router-improvements" have entirely different histories.
main
...
feature/ro
7 changed files with 46 additions and 83 deletions
|
@ -40,27 +40,7 @@ class Subnet
|
|||
throw new Exception("CIDR must be between 0 and 32.");
|
||||
}
|
||||
|
||||
if ($cidr === 32) {
|
||||
return [
|
||||
'network' => $ip,
|
||||
'first' => $ip,
|
||||
'last' => $ip,
|
||||
'hosts' => 1,
|
||||
];
|
||||
}
|
||||
|
||||
if ($cidr === 31) {
|
||||
$ipLong = ip2long($ip);
|
||||
$network = $ipLong & (-1 << (32 - $cidr));
|
||||
return [
|
||||
'network' => long2ip($network),
|
||||
'first' => long2ip($network),
|
||||
'last' => long2ip($network + 1),
|
||||
'hosts' => 2,
|
||||
];
|
||||
}
|
||||
|
||||
$hosts = (1 << (32 - $cidr)) - 2;
|
||||
$hosts = (1 << (32 - $cidr)) - 2; // Excludes network and broadcast
|
||||
$ipLong = ip2long($ip);
|
||||
$mask = -1 << (32 - $cidr);
|
||||
$network = $ipLong & $mask;
|
||||
|
@ -76,7 +56,6 @@ class Subnet
|
|||
];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Calculate IPv6
|
||||
*
|
||||
|
@ -91,50 +70,35 @@ class Subnet
|
|||
throw new Exception("CIDR must be between 0 and 128.");
|
||||
}
|
||||
|
||||
if ($cidr === 128) {
|
||||
return [
|
||||
'network' => $ip,
|
||||
'first' => $ip,
|
||||
'last' => $ip,
|
||||
'hosts' => 1,
|
||||
];
|
||||
// Convert IP to binary representation
|
||||
$binaryIP = inet_pton($ip);
|
||||
if ($binaryIP === false) {
|
||||
throw new Exception("Failed to parse IPv6 address.");
|
||||
}
|
||||
|
||||
if ($cidr === 127) {
|
||||
$binaryIP = inet_pton($ip);
|
||||
$network = substr($binaryIP, 0, intval($cidr / 8));
|
||||
$firstHost = inet_ntop($network);
|
||||
$lastHost = inet_ntop($binaryIP);
|
||||
return [
|
||||
'network' => $firstHost,
|
||||
'first' => $firstHost,
|
||||
'last' => $lastHost,
|
||||
'hosts' => 2,
|
||||
];
|
||||
}
|
||||
|
||||
// General case for other IPv6 subnets
|
||||
$totalHosts = bcpow(2, 128 - $cidr); // Number of total IPs
|
||||
$binaryIP = inet_pton($ip);
|
||||
|
||||
// Calculate the network address
|
||||
// Calculate network address
|
||||
$network = substr($binaryIP, 0, intval($cidr / 8));
|
||||
$remainder = $cidr % 8;
|
||||
|
||||
if ($remainder > 0) {
|
||||
$lastByte = ord($binaryIP[intval($cidr / 8)]) & (0xFF << (8 - $remainder));
|
||||
$lastByte = ord($binaryIP[$cidr / 8]) & (0xFF << (8 - $remainder));
|
||||
$network .= chr($lastByte);
|
||||
}
|
||||
|
||||
// Pad the rest with zeros
|
||||
$network = str_pad($network, 16, "\0");
|
||||
|
||||
// Calculate first and last addresses
|
||||
$networkAddress = inet_ntop($network);
|
||||
$totalHosts = $cidr == 128 ? 1 : bcpow(2, 128 - $cidr);
|
||||
$firstHost = ($cidr == 128) ? $networkAddress : inet_ntop($network);
|
||||
$lastHost = inet_ntop(pack("H*", str_repeat("F", 32)));
|
||||
|
||||
return [
|
||||
'network' => $networkAddress,
|
||||
'first' => $cidr == 128 ? $networkAddress : inet_ntop($network),
|
||||
'last' => $cidr == 128 ? $networkAddress : inet_ntop($network), // Adjusted for simplicity
|
||||
'first' => $firstHost,
|
||||
'last' => $lastHost,
|
||||
'hosts' => $totalHosts,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
|
@ -10,8 +10,7 @@
|
|||
"require": {
|
||||
"php": ">=8.3.0",
|
||||
"filp/whoops": "^2.16",
|
||||
"vlucas/phpdotenv": "^5.6",
|
||||
"ext-bcmath": "*"
|
||||
"vlucas/phpdotenv": "^5.6"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/var-dumper": "^7.1",
|
||||
|
|
|
@ -73,7 +73,7 @@ const errorMsg = (message: string): void => {
|
|||
|
||||
<template>
|
||||
<div class="flex justify-center items-center min-h-screen">
|
||||
<div class="w-3/4 sm:w-3/4 md:w-2/3 lg:w-2/4 xl:w-2/5 2xl:w-1/4 translate-y-0 md:-translate-y-2">
|
||||
<div class="w-3/4 sm:w-3/4 md:w-2/3 lg:w-2/4 xl:w-2/5 2xl:w-1/5 -translate-y-24">
|
||||
<img src="https://www.bit.nl/assets/images/bit_logo_white.png" alt="BIT Logo" class="mx-auto w-52 mb-6">
|
||||
|
||||
<div class="bg-white p-10 rounded-xl shadow-2xl">
|
||||
|
|
|
@ -6,30 +6,6 @@
|
|||
|
||||
<link rel="stylesheet" href="/dist/css/app.css">
|
||||
<script type="module" src="/dist/scripts/app.js"></script>
|
||||
|
||||
<?php if (!env('debug')) : ?>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-18G0H58X77"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-18G0H58X77');
|
||||
</script>
|
||||
|
||||
<!-- Hotjar Tracking Code for IPcalc-u-later -->
|
||||
<script>
|
||||
(function(h,o,t,j,a,r){
|
||||
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
|
||||
h._hjSettings={hjid:5222712,hjsv:6};
|
||||
a=o.getElementsByTagName('head')[0];
|
||||
r=o.createElement('script');r.async=1;
|
||||
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
|
||||
a.appendChild(r);
|
||||
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
</head>
|
||||
<body class="bg-gradient-to-r from-primary to-primary-light">
|
||||
<div id="subnet-app"></div>
|
||||
|
|
|
@ -15,11 +15,14 @@ class HtmlEngine extends Render
|
|||
$basePath = $_SERVER['DOCUMENT_ROOT'];
|
||||
$viewsPath = app()->resourcePath('views/' . str_replace('.', '/', $this->view) . '.php');
|
||||
|
||||
if (!file_exists($viewsPath)) {
|
||||
throw new \Exception('View not found');
|
||||
if (file_exists($viewsPath)) {
|
||||
extract($this->data);
|
||||
|
||||
include $viewsPath;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
extract($this->data);
|
||||
include $viewsPath;
|
||||
throw new \Exception('View not found');
|
||||
}
|
||||
}
|
|
@ -71,7 +71,6 @@ class RouteCollection
|
|||
fn($key) => !is_numeric($key),
|
||||
ARRAY_FILTER_USE_KEY
|
||||
);
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
|
22
src/Routing/Router.php
Normal file
22
src/Routing/Router.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace Core\Routing;
|
||||
|
||||
use Core\Http\Request;
|
||||
|
||||
class Router
|
||||
{
|
||||
/**
|
||||
* Dispatch router and run application
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function dispatch(): void
|
||||
{
|
||||
// Create request
|
||||
$request = new Request($_POST + $_FILES);
|
||||
|
||||
// Dispatch router
|
||||
RouteDispatcher::dispatch($request, RouteCollection::retrieve());
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue