ldc-web/app/Http/Controllers/LDCNetworkController.php

84 lines
2.8 KiB
PHP
Raw Normal View History

2020-04-21 11:59:54 +02:00
<?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;
2020-04-21 11:59:54 +02:00
$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;
}
}