- Add LDCNetwork Management
This commit is contained in:
parent
6d5a116314
commit
8d80e6c674
18 changed files with 347 additions and 11 deletions
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\DomainNames;
|
||||
use App\Models\EmailAddresses;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
|
@ -42,7 +43,12 @@ class DomainNamesController extends Controller
|
|||
public function delete(Request $request) {
|
||||
$dm_id = $request->id;
|
||||
$dm = DomainNames::findOrFail($dm_id);
|
||||
return view('domain-names.delete', ['dm' => $dm]);
|
||||
|
||||
$isUsed = EmailAddresses::where('domain_name_id', '=', $dm->id)->get();
|
||||
if ($isUsed->count() === 0)
|
||||
$isUsed = false;
|
||||
|
||||
return view('domain-names.delete', ['dm' => $dm, 'isUsed' => $isUsed]);
|
||||
}
|
||||
|
||||
public function forceDelete(Request $request)
|
||||
|
|
|
|||
90
app/Http/Controllers/LDCNetworkController.php
Normal file
90
app/Http/Controllers/LDCNetworkController.php
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
<?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;
|
||||
$otp1 = $request->otp1;
|
||||
$otp2 = $request->otp2;
|
||||
$otp3 = $request->otp3;
|
||||
$otp4 = $request->otp4;
|
||||
$otp5 = $request->otp5;
|
||||
$otp6 = $request->otp6;
|
||||
|
||||
$otp = $otp1 . $otp2 . $otp3 . $otp4 . $otp5 . $otp6;
|
||||
|
||||
$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;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,14 @@ class ProjectsController extends Controller
|
|||
return view('projects.index', ['projects' => $projects]);
|
||||
}
|
||||
|
||||
public function WpAutoLogin(Request $request) {
|
||||
$url = $request->url;
|
||||
$login = $request->login;
|
||||
$pwd = $request->pwd;
|
||||
|
||||
return view('projects.wp-auto-login', ['url' => $url, 'login' => $login, 'pwd' => $pwd]);
|
||||
}
|
||||
|
||||
public function add(Request $request) {
|
||||
$dev_db_server = Servers::where([
|
||||
['env', 'DEV'],
|
||||
|
|
|
|||
10
app/Models/LDCNetworks.php
Normal file
10
app/Models/LDCNetworks.php
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class LDCNetworks extends Model
|
||||
{
|
||||
protected $table = 'ldc_networks';
|
||||
}
|
||||
2
public/js/app.js
vendored
2
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
1
resources/js/app.js
vendored
1
resources/js/app.js
vendored
|
|
@ -21,6 +21,7 @@ window.Vue = require('vue');
|
|||
|
||||
Vue.component('otp-form', require('./components/OTPFormComponent.vue').default);
|
||||
Vue.component('login-id', require('./components/LoginIDComponent.vue').default);
|
||||
Vue.component('wp-auto-login', require('./components/WPAutoLoginComponent.vue').default);
|
||||
|
||||
/**
|
||||
* Next, we will create a fresh Vue application instance and attach it to
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@
|
|||
<div class="row" style="margin: 10px;">
|
||||
<div v-if="datas.length > 0" class="col-md-12">
|
||||
<div class="row" v-for="(item, index) in datas">
|
||||
<div class="col-md-5">
|
||||
<div :class="type === 'WP' ? 'col-md-4' : 'col-md-5'">
|
||||
<div class="form-group">
|
||||
<input v-model="item.login" type="text" placeholder="Login" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<div :class="type === 'WP' ? 'col-md-4' : 'col-md-5'">
|
||||
<div class="form-group">
|
||||
<input v-model="item.pwd" type="text" placeholder="Password" class="form-control" required>
|
||||
</div>
|
||||
|
|
@ -16,6 +16,9 @@
|
|||
<div class="col-md-2">
|
||||
<a @click="removeItem(index)" href="#" class="btn btn-danger"><i class="fas fa-user-times"></i></a>
|
||||
</div>
|
||||
<div v-if="type === 'WP'" class="col-md-2">
|
||||
<a :href="'/projects/wp-auto-login?url=' + url + 'wp-login.php&login=' + item.login + '&pwd=' + item.pwd" target="_blank" class="btn btn-success"><i class="fas fa-sign-in-alt"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 text-center">
|
||||
|
|
@ -34,7 +37,9 @@
|
|||
},
|
||||
props: [
|
||||
'name',
|
||||
'dbdatas'
|
||||
'dbdatas',
|
||||
'url',
|
||||
'type'
|
||||
],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
20
resources/js/components/WPAutoLoginComponent.vue
Normal file
20
resources/js/components/WPAutoLoginComponent.vue
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<template>
|
||||
<form ref="login" :action="url" method="POST">
|
||||
<input type="hidden" name="log" :value="login">
|
||||
<input type="hidden" name="pwd" :value="pwd">
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
mounted() {
|
||||
console.log('WP Auto Login Component mounted.');
|
||||
this.$refs.login.submit();
|
||||
},
|
||||
props: [
|
||||
'login',
|
||||
'pwd',
|
||||
'url'
|
||||
],
|
||||
}
|
||||
</script>
|
||||
|
|
@ -5,11 +5,24 @@
|
|||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">Confirmation de suppression du nom de domaine <a href="{{route('domain-names.edit', ['id' => $dm->id])}}" class="btn btn-sm btn-primary float-right">Retour</a></div>
|
||||
@if ($isUsed === false)
|
||||
<div class="card-header">Confirmation de suppression du nom de domaine <a href="{{route('domain-names.edit', ['id' => $dm->id])}}" class="btn btn-sm btn-primary float-right">Retour</a></div>
|
||||
|
||||
<div class="card-body">
|
||||
<otp-form csrf='{{ csrf_token() }}' action="{{route('domain-names.force-delete', ['id' => $dm->id])}}"></otp-form>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<otp-form csrf='{{ csrf_token() }}' action="{{route('domain-names.force-delete', ['id' => $dm->id])}}"></otp-form>
|
||||
</div>
|
||||
@else
|
||||
<div class="card-header">Suppression du nom de domaine refusée <a href="{{route('domain-names.edit', ['id' => $dm->id])}}" class="btn btn-sm btn-primary float-right">Retour</a></div>
|
||||
|
||||
<div class="card-body">
|
||||
<p>Le nom de domaine est utilisé par le(s) email(s) suivant(s) :</p>
|
||||
<ul>
|
||||
@foreach($isUsed as $email)
|
||||
<li>{{$email->account}} @ {{$dm->utf8_name}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -43,6 +43,10 @@
|
|||
<i class="fas fa-at"></i><br>
|
||||
Adresses email
|
||||
</a>
|
||||
<a href="{{route('ldc-networks.index')}}" class="btn btn-lg btn-primary">
|
||||
<i class="fas fa-network-wired"></i><br>
|
||||
Réseau LDC
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -58,6 +58,9 @@
|
|||
<li class="nav-item">
|
||||
<a href="{{route('email-addresses.index')}}" class="nav-link">Adresses email</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{route('ldc-networks.index')}}" class="nav-link">Réseau LDC</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/status-checker" class="nav-link">Status Checker</a>
|
||||
</li>
|
||||
|
|
|
|||
43
resources/views/ldc-networks/add.blade.php
Normal file
43
resources/views/ldc-networks/add.blade.php
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-header">Ajout d'une IP LDC</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
@if (session('error'))
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ session('error') }}
|
||||
</div>
|
||||
@endif
|
||||
<form action="{{route('ldc-networks.store')}}" method="POST">
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-md-6 offset-md-3">
|
||||
<div class="form-group">
|
||||
<label><b>CIDR :</b></label>
|
||||
<input type="text" class="form-control" name="cidr"
|
||||
placeholder="ex: 0.0.0.0/0" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<input type="submit" value="Enregistrer" class="btn btn-primary">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
17
resources/views/ldc-networks/delete.blade.php
Normal file
17
resources/views/ldc-networks/delete.blade.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">Confirmation de suppression de l'IP <a href="{{route('ldc-networks.edit', ['id' => $network->id])}}" class="btn btn-sm btn-primary float-right">Retour</a></div>
|
||||
|
||||
<div class="card-body">
|
||||
<otp-form csrf='{{ csrf_token() }}' action="{{route('ldc-networks.force-delete', ['id' => $network->id])}}"></otp-form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
58
resources/views/ldc-networks/edit.blade.php
Normal file
58
resources/views/ldc-networks/edit.blade.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-header">Détails de l'IP LDC <a href="{{route('ldc-networks.delete', ['id' => $network->id])}}" class="btn btn-sm btn-danger float-right">Supprimer</a>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
@if (session('error'))
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ session('error') }}
|
||||
</div>
|
||||
@endif
|
||||
<form action="{{route('ldc-networks.update', ['id' => $network->id])}}" method="POST">
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-md-6 offset-md-3">
|
||||
<div class="form-group">
|
||||
<label><b>CIDR :</b></label>
|
||||
<input type="text" class="form-control" name="cidr"
|
||||
placeholder="ex: 0.0.0.0/0" required value="{{$network->cidr}}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-3 offset-md-3">
|
||||
<div class="form-group">
|
||||
<label><b>Première IP :</b></label>
|
||||
<input type="text" class="form-control" value="{{$network->first_ip}}" disabled>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label><b>Dernière IP :</b></label>
|
||||
<input type="text" class="form-control" value="{{$network->last_ip}}" disabled>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<input type="submit" value="Enregistrer" class="btn btn-primary">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
37
resources/views/ldc-networks/index.blade.php
Normal file
37
resources/views/ldc-networks/index.blade.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-header">Gestion des IP du réseau LDC<a href="{{route('ldc-networks.add')}}" class="btn btn-sm btn-primary float-right">Ajouter</a></div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
<table class="table text-center">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th scope="col">CIDR</th>
|
||||
<th scope="col"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($networks as $network)
|
||||
<tr>
|
||||
<td>{{$network->cidr}}</td>
|
||||
<td><a href="{{route('ldc-networks.edit', ['id' => $network->id])}}" class="btn btn-sm btn-primary">Détails</a></td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -115,10 +115,10 @@
|
|||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<login-id name="dev_login" dbdatas="{{$project->dev_login}}"/>
|
||||
<login-id name="dev_login" dbdatas="{{$project->dev_login}}" url="{{$project->dev_url}}" type="{{$project->type}}"/>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<login-id name="prod_login" dbdatas="{{$project->prod_login}}"/>
|
||||
<login-id name="prod_login" dbdatas="{{$project->prod_login}}" url="{{$project->prod_url}}" type="{{$project->type}}"/>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
|
|
|||
12
resources/views/projects/wp-auto-login.blade.php
Normal file
12
resources/views/projects/wp-auto-login.blade.php
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<wp-auto-login url="{{$url}}" login="{{$login}}" pwd="{{$pwd}}"></wp-auto-login>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<h1>Connexion en cours...</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -28,6 +28,7 @@ Route::group(['middleware' => ['auth']], function () {
|
|||
Route::post('/projects/{uuid}/force-delete', 'ProjectsController@forceDelete');
|
||||
Route::get('/projects/add', 'ProjectsController@add');
|
||||
Route::post('/projects/store', 'ProjectsController@store');
|
||||
Route::get('/projects/wp-auto-login', 'ProjectsController@WpAutoLogin')->name('projects.wp-auto-login');
|
||||
/* SERVERS */
|
||||
Route::get('/servers', 'ServersController@index')->name('servers.index');
|
||||
Route::post('/servers/store', 'ServersController@store')->name('servers.store');
|
||||
|
|
@ -60,4 +61,12 @@ Route::group(['middleware' => ['auth']], function () {
|
|||
Route::post('/email-addresses/{id}/update', 'EmailAddressesController@update')->name('email-addresses.update');
|
||||
Route::get('/email-addresses/{id}/delete', 'EmailAddressesController@delete')->name('email-addresses.delete');
|
||||
Route::post('/email-addresses/{id}/force-delete', 'EmailAddressesController@forceDelete')->name('email-addresses.force-delete');
|
||||
/* IP LDC NETWORK */
|
||||
Route::get('/ldc-networks', 'LDCNetworkController@index')->name('ldc-networks.index');
|
||||
Route::post('/ldc-networks/store', 'LDCNetworkController@store')->name('ldc-networks.store');
|
||||
Route::get('/ldc-networks/add', 'LDCNetworkController@add')->name('ldc-networks.add');
|
||||
Route::get('/ldc-networks/{id}', 'LDCNetworkController@edit')->name('ldc-networks.edit');
|
||||
Route::post('/ldc-networks/{id}/update', 'LDCNetworkController@update')->name('ldc-networks.update');
|
||||
Route::get('/ldc-networks/{id}/delete', 'LDCNetworkController@delete')->name('ldc-networks.delete');
|
||||
Route::post('/ldc-networks/{id}/force-delete', 'LDCNetworkController@forceDelete')->name('ldc-networks.force-delete');
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue