- EmailAddresses Management

This commit is contained in:
Vincent BRIDIER 2020-04-20 18:55:19 +02:00
parent 4fd8f4bf37
commit 6d5a116314
11 changed files with 300 additions and 1 deletions

View file

@ -3,7 +3,6 @@
namespace App\Http\Controllers;
use App\Models\DomainNames;
use App\Models\Servers;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\DomainNames;
use App\Models\EmailAddresses;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use lfkeitel\phptotp\Base32;
use lfkeitel\phptotp\Totp;
class EmailAddressesController extends Controller
{
public function index(Request $request) {
$emails = EmailAddresses::all();
return view('email-addresses.index', ['emails' => $emails]);
}
public function add(Request $request) {
$dms = DomainNames::orderBy('utf8_name')->get();
return view('email-addresses.add', ['dms' => $dms]);
}
public function edit(Request $request) {
$email_id = $request->id;
$email = EmailAddresses::findOrFail($email_id);
$dms = DomainNames::orderBy('utf8_name')->get();
return view('email-addresses.edit', ['email' => $email, 'dms' => $dms]);
}
public function update(Request $request) {
$email_id = $request->id;
$email = EmailAddresses::findOrFail($email_id);
$this->makeChanges($request, $email);
return redirect()->route('email-addresses.edit', ['id' => $email->id])->with('status', 'Sauvegardée !');
}
public function store(Request $request) {
$email = new EmailAddresses();
$this->makeChanges($request, $email);
return redirect()->route('email-addresses.edit', ['id' => $email->id])->with('status', 'Sauvegardée !');
}
public function delete(Request $request) {
$email_id = $request->id;
$email = EmailAddresses::findOrFail($email_id);
return view('email-addresses.delete', ['email' => $email]);
}
public function forceDelete(Request $request)
{
$email_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) {
$email = EmailAddresses::findOrFail($email_id);
$email->delete();
return redirect()->route('email-addresses.index')->with('status', 'Adresse email supprimée !');
}else{
return redirect()->route('email-addresses.edit', ['id' => $email_id])->with('error', 'Code de vérification invalide.');
}
}
private function makeChanges($request, $email) {
$account = $request->account;
$password = $request->password;
$domain_name_id = $request->d_n_id;
$email->account = $account;
$email->password = $password;
$email->domain_name_id = $domain_name_id;
$email->save();
}
}

View file

@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class DomainNames extends Model
{
//
}

View file

@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class EmailAddresses extends Model
{
public function getDomainNameAttribute() {
$dn = DomainNames::findOrFail($this->domain_name_id);
return $dn->utf8_name;
}
}

View file

@ -0,0 +1,60 @@
@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 adresse email</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('email-addresses.store')}}" method="POST">
@csrf
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label><b>Compte :</b></label>
<input type="text" class="form-control" name="account"
placeholder="Compte" required>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label><b>Mot de passe :</b></label>
<input type="text" class="form-control" name="password"
placeholder="Mot de passe" required>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label><b>Nom de domaine :</b></label>
<select name="d_n_id" class="form-control" required>
@foreach($dms as $dm)
<option value="{{$dm->id}}">{{$dm->utf8_name}}</option>
@endforeach
</select>
</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

View 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'adresse email <a href="{{route('email-addresses.edit', ['id' => $email->id])}}" class="btn btn-sm btn-primary float-right">Retour</a></div>
<div class="card-body">
<otp-form csrf='{{ csrf_token() }}' action="{{route('email-addresses.force-delete', ['id' => $email->id])}}"></otp-form>
</div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -0,0 +1,61 @@
@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'adresse email <a href="{{route('email-addresses.delete', ['id' => $email->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('email-addresses.update', ['id' => $email->id])}}" method="POST">
@csrf
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label><b>Compte :</b></label>
<input type="text" class="form-control" name="account"
placeholder="Compte" value="{{$email->account}}" required>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label><b>Mot de passe :</b></label>
<input type="text" class="form-control" name="password"
placeholder="Mot de passe" value="{{$email->password}}" required>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label><b>Nom de domaine :</b></label>
<select name="d_n_id" class="form-control" required>
@foreach($dms as $dm)
<option value="{{$dm->id}}" @if($email->domain_name_id === $dm->id) selected @endif>{{$dm->utf8_name}}</option>
@endforeach
</select>
</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

View file

@ -0,0 +1,39 @@
@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 adresses email <a href="{{route('email-addresses.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">Compte</th>
<th scope="col">Nom de domaine</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
@foreach($emails as $email)
<tr>
<td>{{$email->account}}</td>
<td>@ {{$email->domain_name}}</td>
<td><a href="{{route('email-addresses.edit', ['id' => $email->id])}}" class="btn btn-sm btn-primary">Détails</a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -39,6 +39,10 @@
<i class="fas fa-copyright"></i><br>
Noms de domaine
</a>
<a href="{{route('email-addresses.index')}}" class="btn btn-lg btn-primary">
<i class="fas fa-at"></i><br>
Adresses email
</a>
</div>
</div>
</div>

View file

@ -55,6 +55,9 @@
<li class="nav-item">
<a href="/domain-names" class="nav-link">Noms de domaine</a>
</li>
<li class="nav-item">
<a href="{{route('email-addresses.index')}}" class="nav-link">Adresses email</a>
</li>
<li class="nav-item">
<a href="/status-checker" class="nav-link">Status Checker</a>
</li>

View file

@ -52,4 +52,12 @@ Route::group(['middleware' => ['auth']], function () {
Route::post('/domain-names/{id}/update', 'DomainNamesController@update')->name('domain-names.update');
Route::get('/domain-names/{id}/delete', 'DomainNamesController@delete')->name('domain-names.delete');
Route::post('/domain-names/{id}/force-delete', 'DomainNamesController@forceDelete')->name('domain-names.force-delete');
/* EMAIL ADDRESSES */
Route::get('/email-addresses', 'EmailAddressesController@index')->name('email-addresses.index');
Route::post('/email-addresses/store', 'EmailAddressesController@store')->name('email-addresses.store');
Route::get('/email-addresses/add', 'EmailAddressesController@add')->name('email-addresses.add');
Route::get('/email-addresses/{id}', 'EmailAddressesController@edit')->name('email-addresses.edit');
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');
});