Commit 337da6d5 authored by Timothée Jaussoin's avatar Timothée Jaussoin

Add configuration for admins

Redirect when the user is logued out
Update the dependencies
parent 73c79bf8
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Configuration extends Model
{
protected $table = 'configuration';
protected $fillable = ['copyright', 'intro_registration', 'custom_theme'];
}
......@@ -10,6 +10,7 @@ use Carbon\Carbon;
use App\Account;
use App\Alias;
use App\Configuration;
use App\Rules\SIP;
use App\Helpers\Utils;
use App\Libraries\OvhSMS;
......@@ -40,7 +41,8 @@ class AccountController extends Controller
public function register(Request $request)
{
return view('account.register', [
'domain' => '@' . config('app.sip_domain')
'domain' => '@' . config('app.sip_domain'),
'configuration' => Configuration::first()
]);
}
......
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Configuration;
class ConfigurationController extends Controller
{
public function edit(Request $request)
{
$configuration = Configuration::first();
if (!$configuration) $configuration = new Configuration;
return view('admin.configuration.edit', [
'configuration' => $configuration
]);
}
public function update(Request $request)
{
$configuration = Configuration::first();
if (!$configuration) $configuration = new Configuration;
$configuration->copyright = $request->get('copyright');
$configuration->intro_registration = $request->get('intro_registration');
$configuration->custom_theme = $request->input('custom_theme', false);
$configuration->save();
return redirect()->route('admin.configuration.update');
}
}
......@@ -15,6 +15,10 @@ class AuthenticateAdmin
*/
public function handle($request, Closure $next)
{
if (!$request->user()) {
return redirect()->route('account.login');
}
if (!$request->user()->isAdmin()) {
return abort(403, 'Unauthorized area');
}
......
This diff is collapsed.
......@@ -6,11 +6,6 @@ use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection('local')->create('users', function (Blueprint $table) {
......@@ -24,11 +19,6 @@ class CreateUsersTable extends Migration
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('local')->dropIfExists('users');
......
......@@ -6,11 +6,6 @@ use Illuminate\Support\Facades\Schema;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection('local')->create('password_resets', function (Blueprint $table) {
......@@ -20,11 +15,6 @@ class CreatePasswordResetsTable extends Migration
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('local')->dropIfExists('password_resets');
......
......@@ -6,11 +6,6 @@ use Illuminate\Support\Facades\Schema;
class CreateFailedJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection('local')->create('failed_jobs', function (Blueprint $table) {
......@@ -23,11 +18,6 @@ class CreateFailedJobsTable extends Migration
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('local')->dropIfExists('failed_jobs');
......
......@@ -23,11 +23,6 @@ use Illuminate\Support\Facades\Schema;
class CreateAccountsPasswordsTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if (!Schema::connection('external')->hasTable('accounts')) {
......@@ -61,11 +56,6 @@ class CreateAccountsPasswordsTables extends Migration
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//Schema::connection('external')->dropIfExists('passwords');
......
......@@ -23,11 +23,6 @@ use Illuminate\Support\Facades\Schema;
class CreateNoncesDigestTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection('local')->create('nonces', function (Blueprint $table) {
......@@ -39,11 +34,6 @@ class CreateNoncesDigestTable extends Migration
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('local')->dropIfExists('nonces');
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateConfigurationTable extends Migration
{
public function up()
{
Schema::create('configuration', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('copyright')->nullable();
$table->text('intro_registration')->nullable();
$table->boolean('custom_theme')->default(false);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('configuration');
}
}
......@@ -32,14 +32,14 @@ body > footer::before {
background-position: bottom center;
background-repeat: repeat-x;
display: block;
height: 20rem;
height: 10rem;
width: 100%;
background-size: 40rem;
content: '';
}
@media screen and (max-width: 991px) {
nav.navbar,
body > header::after {
nav.navbar {
display: none;
}
}
......@@ -48,13 +48,13 @@ h1, h2, h3, a, label {
color: #ff733b;
}
nav a {
nav ul li a {
color: white;
opacity: 0.8;
}
nav a:hover,
nav li.active a {
nav ul li a:hover,
nav ul li.active a {
color: white;
opacity: 1;
}
......@@ -82,11 +82,11 @@ body > footer {
}
body > header::after {
margin-top: -5rem;
margin-bottom: -6rem;
background-position: top center;
margin-bottom: -4.5rem;
}
body > footer::before {
background-image: url('/img/footer.svg');
height: 15rem;
height: 9rem;
}
......@@ -7,56 +7,56 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="footer.svg"
inkscape:version="1.0rc1 (09960d6f05, 2020-04-09)"
id="svg8"
width="481.54166mm"
height="54.655354mm"
viewBox="0 0 481.54166 54.655354"
version="1.1"
viewBox="0 0 481.34168 54.455357"
height="54.455357mm"
width="481.34167mm">
id="svg8"
inkscape:version="1.0rc1 (09960d6f05, 2020-04-09)"
sodipodi:docname="footer.svg">
<defs
id="defs2" />
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-height="1027"
inkscape:window-width="1920"
fit-margin-bottom="-0.1"
fit-margin-right="-0.1"
fit-margin-left="-0.1"
fit-margin-top="-0.1"
inkscape:guide-bbox="true"
showguides="true"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="g26"
inkscape:document-units="mm"
inkscape:cy="93.503742"
inkscape:cx="1706.5646"
inkscape:zoom="1.98"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
id="base"
pagecolor="#ffffff"
id="base">
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.98"
inkscape:cx="104.62963"
inkscape:cy="93.881695"
inkscape:document-units="mm"
inkscape:current-layer="g26"
inkscape:document-rotation="0"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1">
<sodipodi:guide
id="guide42"
position="8.0766935e-06,54.504169"
orientation="1,0"
position="-0.099990996,54.404172" />
id="guide42" />
<sodipodi:guide
id="guide44"
position="481.54165,-9.0933001e-07"
orientation="1,0"
position="481.44165,-0.099997858" />
id="guide44" />
<sodipodi:guide
id="guide887"
position="1.0000693e-05,34.883781"
orientation="0,-1"
position="-0.099989072,34.783784" />
id="guide887" />
<sodipodi:guide
id="guide889"
position="1.0000693e-05,3.0868056"
orientation="0,-1"
position="-0.099989072,2.9868086" />
id="guide889" />
</sodipodi:namedview>
<metadata
id="metadata5">
......@@ -71,31 +71,31 @@
</rdf:RDF>
</metadata>
<g
transform="translate(327.79435,-68.891666)"
id="layer1"
inkscape:label="Calque 1"
inkscape:groupmode="layer"
inkscape:label="Calque 1">
id="layer1"
transform="translate(327.89435,-68.791666)">
<g
transform="translate(9.2773437e-7,54.308819)"
id="g26">
id="g26"
transform="translate(9.2773437e-7,54.308819)">
<path
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0"
id="path36"
style="fill:#ffb9a0;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -327.89434,14.634035 121.11229,27.528297 62.6859,-9.362178 26.45833,-18.317307 55.766026,24.423076 92.807691,-24.016025 81.124273,17.952698 41.58713,-17.923294 1e-5,54.218899 h -481.54165 z"
style="fill:#ffb9a0;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccccccccccc"
id="path36"
inkscape:connector-curvature="0"
id="path38"
d="m -327.89434,34.25442 109.3078,-14.886957 34.19231,10.875621 30.52885,-1.10639 33.3782,11.397435 53.560418,-14.363353 62.3326405,19.188794 40.0075805,-14.594673 66.241771,22.215676 39.77373,-25.273923 12.21834,6.54777 1e-5,34.883781 -481.54166,1e-6 z"
style="fill:#ff9e79;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
sodipodi:nodetypes="ccccccccccc" />
<path
sodipodi:nodetypes="cccccccccccccc"
style="fill:#ff9e79;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -327.89434,34.25442 109.3078,-14.886957 34.19231,10.875621 30.52885,-1.10639 33.3782,11.397435 53.560418,-14.363353 62.3326405,19.188794 40.0075805,-14.594673 66.241771,22.215676 39.77373,-25.273923 12.21834,6.54777 1e-5,34.883781 -481.54166,1e-6 z"
id="path38"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccc" />
<path
style="fill:#ff723b;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -327.89434,69.138201 0,-3.086806 58.83344,-21.446755 69.19693,6.163152 31.34474,-3.720844 25.64423,9.362181 79.375,7.733974 58.9058785,-18.783533 50.7612655,3.720841 37.576541,-14.825991 43.835825,14.201899 26.06779,17.595076 1e-5,3.086806 z"
id="path40"
d="m -327.89434,69.138201 v -3.086806 l 58.83344,-21.446755 69.19693,6.163152 31.34474,-3.720844 25.64423,9.362181 79.375,7.733974 58.9058785,-18.783533 50.7612655,3.720841 37.576541,-14.825991 43.835825,14.201899 26.06779,17.595076 1e-5,3.086803 z"
style="fill:#ff723b;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccc" />
</g>
</g>
</svg>
......@@ -7,52 +7,61 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="header.svg"
inkscape:version="1.0rc1 (09960d6f05, 2020-04-09)"
id="svg8"
width="412.97525mm"
height="78.5159mm"
viewBox="0 0 412.97525 78.515899"
version="1.1"
viewBox="0 0 412.75 132.29167"
height="132.29167mm"
width="412.75mm">
id="svg8"
inkscape:version="1.0rc1 (09960d6f05, 2020-04-09)"
sodipodi:docname="header.svg">
<defs
id="defs2" />
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-height="1027"
inkscape:window-width="1920"
inkscape:guide-bbox="true"
showguides="true"
fit-margin-bottom="0"
fit-margin-right="0"
fit-margin-left="0"
fit-margin-top="0"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="347.48298"
inkscape:cx="890.08599"
inkscape:zoom="0.61"
inkscape:pageshadow="2"
inkscape:pageopacity="1"
borderopacity="1.0"
inkscape:pagecheckerboard="true"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
pagecolor="#9cb9d0"
id="base">
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="4.88"
inkscape:cx="1531.633"
inkscape:cy="341.22006"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1">
<sodipodi:guide
id="guide847"
position="1.8554686e-06,0.0083693262"
orientation="1,0"
position="-9.2773435e-07,1.7529296e-06" />
id="guide847" />
<sodipodi:guide
position="2.7832026e-06,58.623757"
orientation="0,-1"
id="guide863" />
<sodipodi:guide
id="guide863"
position="2.7832026e-06,37.050037"
orientation="0,-1"
position="0,58.61539" />
id="guide865" />
<sodipodi:guide
id="guide839"
orientation="1,0"
position="412.97523,74.310275" />
<sodipodi:guide
id="guide865"
id="guide841"
orientation="0,-1"
position="0,37.04167" />
position="65.250987,-6.1185994e-06" />
</sodipodi:namedview>
<metadata
id="metadata5">
......@@ -67,33 +76,35 @@
</rdf:RDF>
</metadata>
<g
transform="translate(175.38095,-161.39583)"
id="layer1"
inkscape:label="Calque 1"
inkscape:groupmode="layer"
inkscape:label="Calque 1">
id="layer1"
transform="translate(175.38095,-215.17998)">
<rect
y="161.39583"
x="-175.38095"
height="132.29167"
width="412.75"
ry="0"
style="fill:#9cb9d0;fill-opacity:1;stroke:none;stroke-width:0.264583"
id="rect885"
style="fill:#9cb9d0;fill-opacity:1;stroke:none;stroke-width:0.264583" />
width="412.97525"
height="78.5159"
x="-175.38095"
y="215.17998" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
style="fill:#bbcfe0;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -175.38095,246.0625 106.647434,-21.98077 81.817307,22.38782 44.368589,-21.98077 30.935898,19.53846 1.628198,49.2532 -265.397426,0.36873 z"
id="path861"
d="m -175.38095,246.0625 106.647434,-21.98077 81.817307,22.38782 44.368589,-21.98077 30.935898,19.53846 1.628198,49.2532 -265.397426,0.40706 z"
style="fill:#bbcfe0;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccccccccc"
inkscape:connector-curvature="0"
style="fill:#d6e3ed;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -175.38095,235.07211 45.99679,22.79487 55.358977,-20.35256 33.378206,13.02564 54.544872,-17.09615 46.403844,14.24679 27.679488,-11.80449 26.458333,1.62821 29.71474,-10.17628 45.99681,6.51282 47.44317,1.22115 1e-5,58.62377 -412.97524,-10e-6 z"
id="path857"
d="m -175.38095,235.07211 45.99679,22.79487 55.358977,-20.35256 33.378206,13.02564 54.544872,-17.09615 46.403844,14.24679 27.679488,-11.80449 26.458333,1.62821 29.71474,-10.17628 45.99681,6.51282 47.46066,1.22115 -0.24273,58.61539 h -412.74999 z"
style="fill:#d6e3ed;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccc" />
<path
style="fill:#ffffff;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -175.38095,256.64583 61.46474,-11.39744 29.307694,8.95513 43.961536,-3.66346 50.0673101,15.875 68.3846149,-5.69872 23.608965,-9.36218 25.64423,3.66346 59.83655,-4.47756 50.69959,6.10577 1e-5,37.05005 -412.97524,0 z"
id="path859"
d="m -175.38095,256.64583 61.46474,-11.39744 29.307694,8.95513 43.961536,-3.66346 50.0673101,15.875 68.3846149,-5.69872 23.608965,-9.36218 25.64423,3.66346 59.83655,-4.47756 50.55275,6.10577 -0.0784,37.04167 h -412.74999 z"
style="fill:#ffffff;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" />
</g>
</svg>
......@@ -40,6 +40,12 @@
</div>
<p class="mb-1">Manage the FlexiSIP accounts</p>
</a>
<a href="{{ route('admin.configuration.edit') }}" class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">Configuration</h5>
</div>
<p class="mb-1">Configure the layout and other parameters</p>
</a>
</div>
@endif
......
......@@ -4,35 +4,31 @@
@if (Auth::check())
@include('parts.already_auth')
@else
<div class="card mt-3">
<div class="card-body">
{!! Form::open(['route' => 'account.authenticate']) !!}
<div class="form-group">
{!! Form::label('username', 'Username') !!}
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username@'.config('app.sip_domain'), 'required']) !!}
</div>
<div class="form-group">
{!! Form::label('password', 'Password') !!}
{!! Form::password('password', ['class' => 'form-control', 'placeholder' => 'myPassword', 'required']) !!}
</div>
<div class="form-row">
<div class="form-group col-md-6">
{!! Form::submit('Authenticate', ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::open(['route' => 'account.authenticate']) !!}
<div class="form-group">
{!! Form::label('username', 'Username') !!}
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username@'.config('app.sip_domain'), 'required']) !!}
</div>
<div class="form-group">
{!! Form::label('password', 'Password') !!}
{!! Form::password('password', ['class' => 'form-control', 'placeholder' => 'myPassword', 'required']) !!}
</div>
<div class="form-group col-md-6">
<p class="mb-1 text-right">
No account yet?
<a class="btn btn-secondary ml-2" href="{{ route('account.register') }}">Register
</a>
</p>
</div>
</div>
{!! Form::close() !!}
<div class="form-row">
<div class="form-group col-md-6">
{!! Form::submit('Authenticate', ['class' => 'btn btn-primary']) !!}
</div>
<p>You can also authenticate using your <a href="{{ route('account.login_email') }}">Email address</a> or your <a href="{{ route('account.login_phone') }}">Phone number</a></p>
<div class="form-group col-md-6">
<p class="mb-1 text-right">
No account yet?
<a class="btn btn-secondary ml-2" href="{{ route('account.register') }}">Register
</a>
</p>
</div>
</div>
</div>
{!! Form::close() !!}
<p>You can also authenticate using your <a href="{{ route('account.login_email') }}">Email address</a> or your <a href="{{ route('account.login_phone') }}">Phone number</a></p>
@endif
@endsection
\ No newline at end of file
@extends('layouts.main')
@section('content')
@if ($configuration && !empty($configuration->intro_registration))
<p>{!! nl2br($configuration->intro_registration) !!}</p>
@endif
<p>
You already have an account?
<a class="ml-2 btn btn-primary btn-sm" href="{{ route('account.login') }}">Authenticate</a>
......@@ -27,7 +31,7 @@
<hr />
<div class="form-row">
<div class="form-group col-md-6">
{!! Form::label('email', 'New email') !!}
{!! Form::label('email', 'Email') !!}
{!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => 'username@server.com']) !!}
</div>
<div class="form-group col-md-6">
......
@extends('layouts.account')
@section('breadcrumb')
<li class="breadcrumb-item active" aria-current="page">Configuration</li>
@endsection
@section('content')
<h2>Configuration</h2>
{!! Form::open(['route' => 'admin.configuration.update']) !!}
<div class="form-row">
<div class="form-group col-md-6">
{!! Form::label('copyright', 'Copyright') !!}
{!! Form::text('copyright', $configuration->copyright, ['class' => 'form-control', 'placeholder' => 'Copyright']) !!}
</div>
</div>
<div class="form-row">
<div class="form-group">
{!! Form::label('intro_registration', 'Introduction text during Registration') !!}
{!! Form::textarea('intro_registration', $configuration->intro_registration, ['class' => 'form-control', 'placeholder' => 'Introduction text during registration']) !!}
</div>
</div>
<div class="form-check mb-3">
{!! Form::checkbox('custom_theme', 'checked', $configuration->custom_theme, ['class' => 'form-check-input', 'id' => 'custom_theme']) !!}
<label class="form-check-label" for="custom_theme">CSS spéficique</a></label>
</div>
<div class="form-row">
<button type="submit" class="btn btn-primary">Save</button>
</div>
{!! Form::close() !!}
@endsection
\ No newline at end of file
<!DOCTYPE html>
@php $configuration = \App\Configuration::first() @endphp
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
......@@ -6,7 +9,9 @@
<title>{{ config('app.name') }}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="{{ asset('css/style.css') }}" >
@if ($configuration && $configuration->custom_theme)
<link rel="stylesheet" type="text/css" href="{{ asset('css/style.css') }}" >
@endif
</head>
<body>
<header>
......@@ -14,7 +19,9 @@
</header>
@yield('body')
<footer class="text-center mt-2">
© Copyright 2020 - Linphone - Belledonne Communications SARL
@if ($configuration)