83 lines
2.8 KiB
PHP
83 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\LDCNetworks;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use lfkeitel\phptotp\Base32;
|
|
use lfkeitel\phptotp\Totp;
|
|
|
|
class LDCNetworkController extends Controller
|
|
{
|
|
public function index(Request $request) {
|
|
$networks = LDCNetworks::all();
|
|
return view('ldc-networks.index', ['networks' => $networks]);
|
|
}
|
|
|
|
public function add(Request $request) {
|
|
return view('ldc-networks.add');
|
|
}
|
|
|
|
public function edit(Request $request) {
|
|
$network_id = $request->id;
|
|
$network = LDCNetworks::findOrFail($network_id);
|
|
return view('ldc-networks.edit', ['network' => $network]);
|
|
}
|
|
|
|
public function update(Request $request) {
|
|
$network_id = $request->id;
|
|
$network = LDCNetworks::findOrFail($network_id);
|
|
$this->makeChanges($request, $network);
|
|
return redirect()->route('ldc-networks.edit', ['id' => $network->id])->with('status', 'Sauvegardée !');
|
|
}
|
|
|
|
public function store(Request $request) {
|
|
$network = new LDCNetworks();
|
|
$this->makeChanges($request, $network);
|
|
return redirect()->route('ldc-networks.edit', ['id' => $network->id])->with('status', 'Sauvegardée !');
|
|
}
|
|
|
|
public function delete(Request $request) {
|
|
$network_id = $request->id;
|
|
$network = LDCNetworks::findOrFail($network_id);
|
|
|
|
return view('ldc-networks.delete', ['network' => $network]);
|
|
}
|
|
|
|
public function forceDelete(Request $request)
|
|
{
|
|
$network_id = $request->id;
|
|
$otp = $request->otp;
|
|
|
|
$lastCode = (new Totp())->GenerateToken(Base32::decode(Auth::user()->totp_secret), Carbon::now()->subSeconds(30)->timestamp);
|
|
$code = (new Totp())->GenerateToken(Base32::decode(Auth::user()->totp_secret));
|
|
|
|
if ($otp === $code || $otp === $lastCode) {
|
|
$network = LDCNetworks::findOrFail($network_id);
|
|
$network->delete();
|
|
return redirect()->route('ldc-networks.index')->with('status', 'IP supprimée !');
|
|
}else{
|
|
return redirect()->route('ldc-networks.edit', ['id' => $network_id])->with('error', 'Code de vérification invalide.');
|
|
}
|
|
}
|
|
|
|
private function makeChanges($request, $network) {
|
|
$cidr = $request->cidr;
|
|
$range = $this->cidrToRange($cidr);
|
|
|
|
$network->cidr = $cidr;
|
|
$network->first_ip = $range[0];
|
|
$network->last_ip = $range[1];
|
|
$network->save();
|
|
}
|
|
|
|
private function cidrToRange($cidr) {
|
|
$range = array();
|
|
$cidr = explode('/', $cidr);
|
|
$range[0] = long2ip((ip2long($cidr[0])) & ((-1 << (32 - (int)$cidr[1]))));
|
|
$range[1] = long2ip((ip2long($range[0])) + pow(2, (32 - (int)$cidr[1])) - 1);
|
|
return $range;
|
|
}
|
|
}
|