mirror of
https://gitlab.linphone.org/BC/public/flexisip-account-manager.git
synced 2026-04-17 19:58:27 +00:00
UI and feature adjustments
- Add a toggle for the phone SMS registration/auth related features - Add the newsletter email registration toggle - Rename and move around views and controllers - Refactor the login and registration forms - Split the registration form in two, email and phone
This commit is contained in:
parent
93f622b8e7
commit
c65f1a804c
32 changed files with 789 additions and 468 deletions
|
|
@ -35,6 +35,9 @@ MAIL_PASSWORD=
|
|||
MAIL_FROM_ADDRESS=
|
||||
MAIL_FROM_NAME=
|
||||
|
||||
NEWSLETTER_REGISTRATION_ADDRESS=
|
||||
PHONE_AUTHENTICATION=true
|
||||
|
||||
OVH_APP_KEY=
|
||||
OVH_APP_SECRET=
|
||||
OVH_APP_ENDPOINT=ovh-eu
|
||||
|
|
|
|||
164
flexiapi/app/Http/Controllers/AccountAuthenticateController.php
Normal file
164
flexiapi/app/Http/Controllers/AccountAuthenticateController.php
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Carbon\Carbon;
|
||||
|
||||
use App\Account;
|
||||
use App\Alias;
|
||||
use App\Helpers\Utils;
|
||||
use App\Libraries\OvhSMS;
|
||||
use App\Mail\PasswordAuthentication;
|
||||
|
||||
class AccountAuthenticateController extends Controller
|
||||
{
|
||||
private $emailCodeSize = 14;
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
return view('account.login');
|
||||
}
|
||||
|
||||
public function authenticate(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'username' => 'required',
|
||||
'password' => 'required'
|
||||
]);
|
||||
|
||||
$account = Account::where('username', $request->get('username'))
|
||||
->firstOrFail();
|
||||
|
||||
// Try out the passwords
|
||||
foreach ($account->passwords as $password) {
|
||||
if (hash_equals(
|
||||
$password->password,
|
||||
Utils::bchash($request->get('username'), config('app.sip_domain'), $request->get('password'), $password->algorithm)
|
||||
)) {
|
||||
Auth::login($account);
|
||||
return redirect()->route('account.panel');
|
||||
}
|
||||
}
|
||||
|
||||
return redirect()->back()->withErrors(['authentication' => 'Wrong username or password']);
|
||||
}
|
||||
|
||||
public function loginEmail(Request $request)
|
||||
{
|
||||
return view('account.login.email');
|
||||
}
|
||||
|
||||
public function authenticateEmail(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'email' => 'required|email|exists:external.accounts,email',
|
||||
'g-recaptcha-response' => 'required|captcha',
|
||||
]);
|
||||
|
||||
$account = Account::where('email', $request->get('email'))->first();
|
||||
$account->confirmation_key = Str::random($this->emailCodeSize);
|
||||
$account->save();
|
||||
|
||||
Mail::to($account)->send(new PasswordAuthentication($account));
|
||||
|
||||
return view('account.authenticate.email', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
|
||||
public function authenticateEmailConfirm(Request $request, string $code)
|
||||
{
|
||||
$request->merge(['code' => $code]);
|
||||
$request->validate(['code' => 'required|size:'.$this->emailCodeSize]);
|
||||
|
||||
$account = Account::where('confirmation_key', $code)->firstOrFail();
|
||||
$account->confirmation_key = null;
|
||||
$account->save();
|
||||
|
||||
Auth::login($account);
|
||||
|
||||
// Ask the user to set a password
|
||||
if (!$account->activated) {
|
||||
return redirect()->route('account.password');
|
||||
}
|
||||
|
||||
return redirect()->route('account.panel');
|
||||
}
|
||||
|
||||
public function loginPhone(Request $request)
|
||||
{
|
||||
return view('account.login.phone');
|
||||
}
|
||||
|
||||
public function authenticatePhone(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'phone' => 'required|starts_with:+|phone:AUTO',
|
||||
'g-recaptcha-response' => 'required|captcha',
|
||||
]);
|
||||
|
||||
$account = Account::where('username', $request->get('phone'))->first();
|
||||
|
||||
// Try alias
|
||||
if (!$account) {
|
||||
$alias = Alias::where('alias', $request->get('phone'))->first();
|
||||
|
||||
if ($alias) {
|
||||
$account = $alias->account;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$account) {
|
||||
return view('account.login_phone')->withErrors([
|
||||
'phone' => 'Phone number not found'
|
||||
]);
|
||||
}
|
||||
|
||||
$account->confirmation_key = Utils::generatePin();
|
||||
$account->save();
|
||||
|
||||
$ovhSMS = new OvhSMS;
|
||||
$ovhSMS->send($request->get('phone'), 'Your '.config('app.name').' validation code is '.$account->confirmation_key);
|
||||
|
||||
// Ask the user to set a password
|
||||
if (!$account->activated) {
|
||||
return redirect()->route('account.password');
|
||||
}
|
||||
|
||||
return view('account.authenticate.phone', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
|
||||
public function authenticatePhoneConfirm(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'account_id' => 'required',
|
||||
'code' => 'required|digits:4'
|
||||
]);
|
||||
|
||||
$account = Account::where('id', $request->get('account_id'))->firstOrFail();
|
||||
|
||||
if ($account->confirmation_key != $request->get('code')) {
|
||||
return view('account.login_phone')->withErrors([
|
||||
'code' => 'Wrong code'
|
||||
]);
|
||||
}
|
||||
|
||||
$account->confirmation_key = null;
|
||||
$account->save();
|
||||
|
||||
Auth::login($account);
|
||||
return redirect()->route('account.panel');
|
||||
}
|
||||
|
||||
public function logout(Request $request)
|
||||
{
|
||||
Auth::logout();
|
||||
return redirect()->route('account.login');
|
||||
}
|
||||
}
|
||||
|
|
@ -9,20 +9,23 @@ use Illuminate\Support\Facades\Mail;
|
|||
use Carbon\Carbon;
|
||||
|
||||
use App\Account;
|
||||
use App\Alias;
|
||||
use App\Rules\SIP;
|
||||
use App\Helpers\Utils;
|
||||
use App\Libraries\OvhSMS;
|
||||
use App\Mail\PasswordAuthentication;
|
||||
use App\Mail\RegisterConfirmation;
|
||||
|
||||
class AccountController extends Controller
|
||||
{
|
||||
private $emailCodeSize = 14;
|
||||
|
||||
public function index(Request $request)
|
||||
public function home(Request $request)
|
||||
{
|
||||
return view('account.index', [
|
||||
if ($request->user()) {
|
||||
return redirect()->route('account.panel');
|
||||
}
|
||||
|
||||
return view('account.home', [
|
||||
'count' => Account::count()
|
||||
]);
|
||||
}
|
||||
|
||||
public function panel(Request $request)
|
||||
{
|
||||
return view('account.panel', [
|
||||
'account' => $request->user()
|
||||
]);
|
||||
}
|
||||
|
|
@ -32,66 +35,6 @@ class AccountController extends Controller
|
|||
return view('account.terms');
|
||||
}
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
return view('account.login');
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
return view('account.register', [
|
||||
'domain' => '@' . config('app.sip_domain')
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'terms' =>'accepted',
|
||||
'username' => 'required|unique:external.accounts,username|min:6',
|
||||
'phone' => 'required_without:email|nullable|unique:external.aliases,alias|unique:external.accounts,username|starts_with:+|phone:AUTO',
|
||||
'g-recaptcha-response' => 'required|captcha',
|
||||
'email' => 'required_without:phone|nullable|email|confirmed'
|
||||
]);
|
||||
|
||||
$account = new Account;
|
||||
$account->username = $request->get('username');
|
||||
$account->email = $request->get('email');
|
||||
$account->activated = false;
|
||||
$account->domain = config('app.sip_domain');
|
||||
$account->ip_address = $request->ip();
|
||||
$account->creation_time = Carbon::now();
|
||||
$account->user_agent = config('app.name');
|
||||
$account->save();
|
||||
|
||||
if ($request->filled('phone')) {
|
||||
$alias = new Alias;
|
||||
$alias->alias = $request->get('phone');
|
||||
$alias->domain = config('app.sip_domain');
|
||||
$alias->account_id = $account->id;
|
||||
$alias->save();
|
||||
|
||||
$account->confirmation_key = Utils::generatePin();
|
||||
$account->save();
|
||||
|
||||
$ovhSMS = new OvhSMS;
|
||||
$ovhSMS->send($request->get('phone'), 'Your '.config('app.name').' validation code is '.$account->confirmation_key);
|
||||
|
||||
return view('account.authenticate_phone', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
|
||||
$account->confirmation_key = Str::random($this->emailCodeSize);
|
||||
$account->save();
|
||||
|
||||
Mail::to($account)->send(new RegisterConfirmation($account));
|
||||
|
||||
return view('account.authenticate_email', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
|
||||
public function delete(Request $request)
|
||||
{
|
||||
return view('account.delete', [
|
||||
|
|
@ -108,137 +51,4 @@ class AccountController extends Controller
|
|||
|
||||
return redirect()->route('account.login');
|
||||
}
|
||||
|
||||
public function authenticate(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'username' => 'required',
|
||||
'password' => 'required'
|
||||
]);
|
||||
|
||||
$account = Account::where('username', $request->get('username'))
|
||||
->firstOrFail();
|
||||
|
||||
// Try out the passwords
|
||||
foreach ($account->passwords as $password) {
|
||||
if (hash_equals(
|
||||
$password->password,
|
||||
Utils::bchash($request->get('username'), config('app.sip_domain'), $request->get('password'), $password->algorithm)
|
||||
)) {
|
||||
Auth::login($account);
|
||||
return redirect()->route('account.index');
|
||||
}
|
||||
}
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
public function loginEmail(Request $request)
|
||||
{
|
||||
return view('account.login_email');
|
||||
}
|
||||
|
||||
public function authenticateEmail(Request $request)
|
||||
{
|
||||
$request->validate(['email' => 'required|email|exists:external.accounts,email']);
|
||||
|
||||
$account = Account::where('email', $request->get('email'))->first();
|
||||
$account->confirmation_key = Str::random($this->emailCodeSize);
|
||||
$account->save();
|
||||
|
||||
Mail::to($account)->send(new PasswordAuthentication($account));
|
||||
|
||||
return view('account.authenticate_email', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
|
||||
public function authenticateEmailConfirm(Request $request, string $code)
|
||||
{
|
||||
$request->merge(['code' => $code]);
|
||||
$request->validate(['code' => 'required|size:'.$this->emailCodeSize]);
|
||||
|
||||
$account = Account::where('confirmation_key', $code)->firstOrFail();
|
||||
$account->confirmation_key = null;
|
||||
$account->save();
|
||||
|
||||
Auth::login($account);
|
||||
|
||||
// Ask the user to set a password
|
||||
if (!$account->activated) {
|
||||
return redirect()->route('account.password');
|
||||
}
|
||||
|
||||
return redirect()->route('account.index');
|
||||
}
|
||||
|
||||
public function loginPhone(Request $request)
|
||||
{
|
||||
return view('account.login_phone');
|
||||
}
|
||||
|
||||
public function authenticatePhone(Request $request)
|
||||
{
|
||||
$request->validate(['phone' => 'required|starts_with:+|phone:AUTO']);
|
||||
|
||||
$account = Account::where('username', $request->get('phone'))->first();
|
||||
|
||||
// Try alias
|
||||
if (!$account) {
|
||||
$alias = Alias::where('alias', $request->get('phone'))->first();
|
||||
|
||||
if ($alias) {
|
||||
$account = $alias->account;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$account) {
|
||||
return view('account.login_phone')->withErrors([
|
||||
'phone' => 'Phone number not found'
|
||||
]);
|
||||
}
|
||||
|
||||
$account->confirmation_key = Utils::generatePin();
|
||||
$account->save();
|
||||
|
||||
$ovhSMS = new OvhSMS;
|
||||
$ovhSMS->send($request->get('phone'), 'Your '.config('app.name').' validation code is '.$account->confirmation_key);
|
||||
|
||||
// Ask the user to set a password
|
||||
if (!$account->activated) {
|
||||
return redirect()->route('account.password');
|
||||
}
|
||||
|
||||
return view('account.authenticate_phone', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
|
||||
public function authenticatePhoneConfirm(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'account_id' => 'required',
|
||||
'code' => 'required|digits:4'
|
||||
]);
|
||||
|
||||
$account = Account::where('id', $request->get('account_id'))->firstOrFail();
|
||||
|
||||
if ($account->confirmation_key != $request->get('code')) {
|
||||
return view('account.login_phone')->withErrors([
|
||||
'code' => 'Wrong code'
|
||||
]);
|
||||
}
|
||||
|
||||
$account->confirmation_key = null;
|
||||
$account->save();
|
||||
|
||||
Auth::login($account);
|
||||
return redirect()->route('account.index');
|
||||
}
|
||||
|
||||
public function logout(Request $request)
|
||||
{
|
||||
Auth::logout();
|
||||
return redirect()->route('account.login');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,6 @@ class AccountEmailController extends Controller
|
|||
|
||||
Mail::to($account)->send(new ChangedEmail());
|
||||
|
||||
return redirect()->route('account.index');
|
||||
return redirect()->route('account.panel');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class AccountPasswordController extends Controller
|
|||
Utils::bchash($account->username, $account->domain, $request->get('old_password'), $password->algorithm)
|
||||
)) {
|
||||
$this->updatePassword($account, $request->get('password'), $algorithm);
|
||||
return redirect()->route('account.index');
|
||||
return redirect()->route('account.panel');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
117
flexiapi/app/Http/Controllers/AccountRegisterController.php
Normal file
117
flexiapi/app/Http/Controllers/AccountRegisterController.php
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Carbon\Carbon;
|
||||
|
||||
use App\Account;
|
||||
use App\Alias;
|
||||
use App\Rules\SIP;
|
||||
use App\Helpers\Utils;
|
||||
use App\Libraries\OvhSMS;
|
||||
use App\Mail\RegisterConfirmation;
|
||||
use App\Mail\NewsletterRegistration;
|
||||
|
||||
class AccountRegisterController extends Controller
|
||||
{
|
||||
private $emailCodeSize = 14;
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
if (config('app.phone_authentication') == false) {
|
||||
return redirect()->route('account.register.email');
|
||||
}
|
||||
|
||||
return view('account.register');
|
||||
}
|
||||
|
||||
public function registerPhone(Request $request)
|
||||
{
|
||||
return view('account.register.phone', [
|
||||
'domain' => '@' . config('app.sip_domain')
|
||||
]);
|
||||
}
|
||||
|
||||
public function registerEmail(Request $request)
|
||||
{
|
||||
return view('account.register.email', [
|
||||
'domain' => '@' . config('app.sip_domain')
|
||||
]);
|
||||
}
|
||||
|
||||
public function storeEmail(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'terms' => 'accepted',
|
||||
'username' => 'required|unique:external.accounts,username|min:6',
|
||||
//'g-recaptcha-response' => 'required|captcha',
|
||||
'email' => 'required|email|confirmed'
|
||||
]);
|
||||
|
||||
$account = new Account;
|
||||
$account->username = $request->get('username');
|
||||
$account->email = $request->get('email');
|
||||
$account->activated = false;
|
||||
$account->domain = config('app.sip_domain');
|
||||
$account->ip_address = $request->ip();
|
||||
$account->creation_time = Carbon::now();
|
||||
$account->user_agent = config('app.name');
|
||||
$account->save();
|
||||
|
||||
$account->confirmation_key = Str::random($this->emailCodeSize);
|
||||
$account->save();
|
||||
|
||||
if (!empty(config('app.newsletter_registration_address'))
|
||||
&& $request->has('newsletter')) {
|
||||
Mail::to(config('app.newsletter_registration_address'))->send(new NewsletterRegistration($account));
|
||||
}
|
||||
|
||||
Mail::to($account)->send(new RegisterConfirmation($account));
|
||||
|
||||
return view('account.authenticate.email', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
|
||||
public function storePhone(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'terms' =>'accepted',
|
||||
'username' => 'unique:external.accounts,username|nullable|min:6',
|
||||
'phone' => 'required|unique:external.aliases,alias|unique:external.accounts,username|starts_with:+|phone:AUTO',
|
||||
'g-recaptcha-response' => 'required|captcha',
|
||||
]);
|
||||
|
||||
$account = new Account;
|
||||
$account->username = $request->has('username')
|
||||
? $request->get('username')
|
||||
: $request->get('phone');
|
||||
|
||||
$account->email = $request->get('email');
|
||||
$account->activated = false;
|
||||
$account->domain = config('app.sip_domain');
|
||||
$account->ip_address = $request->ip();
|
||||
$account->creation_time = Carbon::now();
|
||||
$account->user_agent = config('app.name');
|
||||
$account->save();
|
||||
|
||||
$alias = new Alias;
|
||||
$alias->alias = $request->get('phone');
|
||||
$alias->domain = config('app.sip_domain');
|
||||
$alias->account_id = $account->id;
|
||||
$alias->save();
|
||||
|
||||
$account->confirmation_key = Utils::generatePin();
|
||||
$account->save();
|
||||
|
||||
$ovhSMS = new OvhSMS;
|
||||
$ovhSMS->send($request->get('phone'), 'Your '.config('app.name').' validation code is '.$account->confirmation_key);
|
||||
|
||||
return view('account.authenticate.phone', [
|
||||
'account' => $account
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -15,7 +15,7 @@ class Authenticate extends Middleware
|
|||
protected function redirectTo($request)
|
||||
{
|
||||
if (! $request->expectsJson()) {
|
||||
return route('account.register');
|
||||
return route('account.home');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
29
flexiapi/app/Mail/NewsletterRegistration.php
Normal file
29
flexiapi/app/Mail/NewsletterRegistration.php
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
use App\Account;
|
||||
|
||||
class NewsletterRegistration extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
private $_account;
|
||||
|
||||
public function __construct(Account $account)
|
||||
{
|
||||
$this->_account = $account;
|
||||
}
|
||||
|
||||
public function build()
|
||||
{
|
||||
return $this->view('mails.newsletter_registration')
|
||||
->text('mails.newsletter_registration_text')
|
||||
->with(['account' => $this->_account]);
|
||||
}
|
||||
}
|
||||
|
|
@ -35,7 +35,7 @@ class PasswordAuthentication extends Mailable
|
|||
return $this->view('mails.authentication')
|
||||
->text('mails.authentication_text')
|
||||
->with([
|
||||
'link' => route('account.authenticate_email_confirm', [$this->_account->confirmation_key])
|
||||
'link' => route('account.authenticate.email_confirm', [$this->_account->confirmation_key])
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class RegisterConfirmation extends Mailable
|
|||
return $this->view('mails.register_confirmation')
|
||||
->text('mails.register_confirmation_text')
|
||||
->with([
|
||||
'link' => route('account.authenticate_email_confirm', [$this->_account->confirmation_key])
|
||||
'link' => route('account.authenticate.email_confirm', [$this->_account->confirmation_key])
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
382
flexiapi/composer.lock
generated
382
flexiapi/composer.lock
generated
|
|
@ -8,20 +8,20 @@
|
|||
"packages": [
|
||||
{
|
||||
"name": "anhskohbo/no-captcha",
|
||||
"version": "3.2.0",
|
||||
"version": "3.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/anhskohbo/no-captcha.git",
|
||||
"reference": "c14dd67024f30fd28f38ac9faa44cc47e1d4bddf"
|
||||
"reference": "6386365b76cfa6a6043dc2783a2a615c8574faf9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/anhskohbo/no-captcha/zipball/c14dd67024f30fd28f38ac9faa44cc47e1d4bddf",
|
||||
"reference": "c14dd67024f30fd28f38ac9faa44cc47e1d4bddf",
|
||||
"url": "https://api.github.com/repos/anhskohbo/no-captcha/zipball/6386365b76cfa6a6043dc2783a2a615c8574faf9",
|
||||
"reference": "6386365b76cfa6a6043dc2783a2a615c8574faf9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^6.2",
|
||||
"guzzlehttp/guzzle": "^6.2|^7.0",
|
||||
"illuminate/support": "^5.0|^6.0|^7.0",
|
||||
"php": ">=5.5.5"
|
||||
},
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
"no-captcha",
|
||||
"recaptcha"
|
||||
],
|
||||
"time": "2020-03-04T03:27:38+00:00"
|
||||
"time": "2020-08-06T05:45:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dnoegel/php-xdg-base-dir",
|
||||
|
|
@ -322,16 +322,16 @@
|
|||
},
|
||||
{
|
||||
"name": "egulias/email-validator",
|
||||
"version": "2.1.18",
|
||||
"version": "2.1.19",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/egulias/EmailValidator.git",
|
||||
"reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441"
|
||||
"reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/cfa3d44471c7f5bfb684ac2b0da7114283d78441",
|
||||
"reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/840d5603eb84cc81a6a0382adac3293e57c1c64c",
|
||||
"reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -376,7 +376,7 @@
|
|||
"validation",
|
||||
"validator"
|
||||
],
|
||||
"time": "2020-06-16T20:11:17+00:00"
|
||||
"time": "2020-08-08T21:28:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "fideloper/proxy",
|
||||
|
|
@ -434,16 +434,16 @@
|
|||
},
|
||||
{
|
||||
"name": "giggsey/libphonenumber-for-php",
|
||||
"version": "8.12.7",
|
||||
"version": "8.12.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/giggsey/libphonenumber-for-php.git",
|
||||
"reference": "3ca7b9a09fc2b00a508875ac2c52ef5c19ef2c4c"
|
||||
"reference": "674b79ae3362409d08e550cb196d982485a76225"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/3ca7b9a09fc2b00a508875ac2c52ef5c19ef2c4c",
|
||||
"reference": "3ca7b9a09fc2b00a508875ac2c52ef5c19ef2c4c",
|
||||
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/674b79ae3362409d08e550cb196d982485a76225",
|
||||
"reference": "674b79ae3362409d08e550cb196d982485a76225",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -498,7 +498,7 @@
|
|||
"phonenumber",
|
||||
"validation"
|
||||
],
|
||||
"time": "2020-07-02T12:08:36+00:00"
|
||||
"time": "2020-08-31T09:51:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "giggsey/locale",
|
||||
|
|
@ -740,16 +740,16 @@
|
|||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v6.18.26",
|
||||
"version": "v6.18.37",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "d11b6168c65251ffa81ae0dfaf017ad2f30013da"
|
||||
"reference": "cd1ab410f7dda21de360dabd7fe25ffd2402d2bc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/d11b6168c65251ffa81ae0dfaf017ad2f30013da",
|
||||
"reference": "d11b6168c65251ffa81ae0dfaf017ad2f30013da",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/cd1ab410f7dda21de360dabd7fe25ffd2402d2bc",
|
||||
"reference": "cd1ab410f7dda21de360dabd7fe25ffd2402d2bc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -847,6 +847,7 @@
|
|||
"moontoast/math": "Required to use ordered UUIDs (^1.1).",
|
||||
"nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
|
||||
"pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
|
||||
"predis/predis": "Required to use the predis connector (^1.1.2).",
|
||||
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
|
||||
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).",
|
||||
"symfony/cache": "Required to PSR-6 cache bridge (^4.3.4).",
|
||||
|
|
@ -884,20 +885,20 @@
|
|||
"framework",
|
||||
"laravel"
|
||||
],
|
||||
"time": "2020-07-21T14:25:39+00:00"
|
||||
"time": "2020-08-27T14:18:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/tinker",
|
||||
"version": "v2.4.1",
|
||||
"version": "v2.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/tinker.git",
|
||||
"reference": "3c9ef136ca59366bc1b50b7f2500a946d5149c62"
|
||||
"reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/tinker/zipball/3c9ef136ca59366bc1b50b7f2500a946d5149c62",
|
||||
"reference": "3c9ef136ca59366bc1b50b7f2500a946d5149c62",
|
||||
"url": "https://api.github.com/repos/laravel/tinker/zipball/58424c24e8aec31c3a3ac54eb3adb15e8a0a067b",
|
||||
"reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -948,7 +949,7 @@
|
|||
"laravel",
|
||||
"psysh"
|
||||
],
|
||||
"time": "2020-07-07T15:10:00+00:00"
|
||||
"time": "2020-08-11T19:28:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravelcollective/html",
|
||||
|
|
@ -1020,16 +1021,16 @@
|
|||
},
|
||||
{
|
||||
"name": "league/commonmark",
|
||||
"version": "1.5.3",
|
||||
"version": "1.5.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/commonmark.git",
|
||||
"reference": "2574454b97e4103dc4e36917bd783b25624aefcd"
|
||||
"reference": "21819c989e69bab07e933866ad30c7e3f32984ba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2574454b97e4103dc4e36917bd783b25624aefcd",
|
||||
"reference": "2574454b97e4103dc4e36917bd783b25624aefcd",
|
||||
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/21819c989e69bab07e933866ad30c7e3f32984ba",
|
||||
"reference": "21819c989e69bab07e933866ad30c7e3f32984ba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1111,32 +1112,33 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-07-19T22:47:30+00:00"
|
||||
"time": "2020-08-18T01:19:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.0.69",
|
||||
"version": "1.1.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem.git",
|
||||
"reference": "7106f78428a344bc4f643c233a94e48795f10967"
|
||||
"reference": "9be3b16c877d477357c015cec057548cf9b2a14a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967",
|
||||
"reference": "7106f78428a344bc4f643c233a94e48795f10967",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a",
|
||||
"reference": "9be3b16c877d477357c015cec057548cf9b2a14a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-fileinfo": "*",
|
||||
"php": ">=5.5.9"
|
||||
"league/mime-type-detection": "^1.3",
|
||||
"php": "^7.2.5 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"league/flysystem-sftp": "<1.0.6"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpspec/phpspec": "^3.4",
|
||||
"phpunit/phpunit": "^5.7.26"
|
||||
"phpspec/prophecy": "^1.11.1",
|
||||
"phpunit/phpunit": "^8.5.8"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-fileinfo": "Required for MimeType",
|
||||
|
|
@ -1201,7 +1203,7 @@
|
|||
"type": "other"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-18T15:13:39+00:00"
|
||||
"time": "2020-08-23T07:39:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/iso3166",
|
||||
|
|
@ -1258,17 +1260,68 @@
|
|||
"time": "2020-01-29T07:08:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
"version": "2.1.0",
|
||||
"name": "league/mime-type-detection",
|
||||
"version": "1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Seldaek/monolog.git",
|
||||
"reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1"
|
||||
"url": "https://github.com/thephpleague/mime-type-detection.git",
|
||||
"reference": "fda190b62b962d96a069fcc414d781db66d65b69"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1",
|
||||
"reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/fda190b62b962d96a069fcc414d781db66d65b69",
|
||||
"reference": "fda190b62b962d96a069fcc414d781db66d65b69",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-fileinfo": "*",
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^0.12.36",
|
||||
"phpunit/phpunit": "^8.5.8"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\MimeTypeDetection\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Frank de Jonge",
|
||||
"email": "info@frankdejonge.nl"
|
||||
}
|
||||
],
|
||||
"description": "Mime-type detection for Flysystem",
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/frankdejonge",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/league/flysystem",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-08-09T10:34:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
"version": "2.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Seldaek/monolog.git",
|
||||
"reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/f9eee5cec93dfb313a38b6b288741e84e53f02d5",
|
||||
"reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1346,20 +1399,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-22T08:12:19+00:00"
|
||||
"time": "2020-07-23T08:41:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.36.1",
|
||||
"version": "2.39.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||
"reference": "ee7378a36cc62952100e718bcc58be4c7210e55f"
|
||||
"reference": "0a41ea7f7fedacf307b7a339800e10356a042918"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ee7378a36cc62952100e718bcc58be4c7210e55f",
|
||||
"reference": "ee7378a36cc62952100e718bcc58be4c7210e55f",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0a41ea7f7fedacf307b7a339800e10356a042918",
|
||||
"reference": "0a41ea7f7fedacf307b7a339800e10356a042918",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1374,7 +1427,7 @@
|
|||
"kylekatarnls/multi-tester": "^2.0",
|
||||
"phpmd/phpmd": "^2.8",
|
||||
"phpstan/extension-installer": "^1.0",
|
||||
"phpstan/phpstan": "^0.12.30",
|
||||
"phpstan/phpstan": "^0.12.35",
|
||||
"phpunit/phpunit": "^7.5 || ^8.0",
|
||||
"squizlabs/php_codesniffer": "^3.4"
|
||||
},
|
||||
|
|
@ -1435,20 +1488,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-07-04T12:29:56+00:00"
|
||||
"time": "2020-08-24T12:35:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
"version": "v4.6.0",
|
||||
"version": "v4.9.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||
"reference": "c346bbfafe2ff60680258b631afb730d186ed864"
|
||||
"reference": "88e519766fc58bd46b8265561fb79b54e2e00b28"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c346bbfafe2ff60680258b631afb730d186ed864",
|
||||
"reference": "c346bbfafe2ff60680258b631afb730d186ed864",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/88e519766fc58bd46b8265561fb79b54e2e00b28",
|
||||
"reference": "88e519766fc58bd46b8265561fb79b54e2e00b28",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1456,8 +1509,8 @@
|
|||
"php": ">=7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ircmaxell/php-yacc": "0.0.5",
|
||||
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
|
||||
"ircmaxell/php-yacc": "^0.0.7",
|
||||
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
|
||||
},
|
||||
"bin": [
|
||||
"bin/php-parse"
|
||||
|
|
@ -1465,7 +1518,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.3-dev"
|
||||
"dev-master": "4.9-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
|
@ -1487,20 +1540,20 @@
|
|||
"parser",
|
||||
"php"
|
||||
],
|
||||
"time": "2020-07-02T17:12:47+00:00"
|
||||
"time": "2020-08-30T16:15:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "opis/closure",
|
||||
"version": "3.5.5",
|
||||
"version": "3.5.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/opis/closure.git",
|
||||
"reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c"
|
||||
"reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/opis/closure/zipball/dec9fc5ecfca93f45cd6121f8e6f14457dff372c",
|
||||
"reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c",
|
||||
"url": "https://api.github.com/repos/opis/closure/zipball/e8d34df855b0a0549a300cb8cb4db472556e8aa9",
|
||||
"reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1548,7 +1601,7 @@
|
|||
"serialization",
|
||||
"serialize"
|
||||
],
|
||||
"time": "2020-06-17T14:59:55+00:00"
|
||||
"time": "2020-08-11T08:46:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ovh/ovh",
|
||||
|
|
@ -2213,16 +2266,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "326b064d804043005526f5a0494cfb49edb59bb0"
|
||||
"reference": "1f601a29fd7591a0316bffbc0d7550a5953c6c1c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/326b064d804043005526f5a0494cfb49edb59bb0",
|
||||
"reference": "326b064d804043005526f5a0494cfb49edb59bb0",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/1f601a29fd7591a0316bffbc0d7550a5953c6c1c",
|
||||
"reference": "1f601a29fd7591a0316bffbc0d7550a5953c6c1c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2300,11 +2353,11 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-30T20:06:45+00:00"
|
||||
"time": "2020-08-17T07:39:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
"version": "v5.1.2",
|
||||
"version": "v5.1.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/css-selector.git",
|
||||
|
|
@ -2371,16 +2424,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/debug.git",
|
||||
"reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6"
|
||||
"reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/28f92d08bb6d1fddf8158e02c194ad43870007e6",
|
||||
"reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e",
|
||||
"reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2438,20 +2491,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-24T08:33:35+00:00"
|
||||
"time": "2020-08-10T07:47:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/error-handler",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/error-handler.git",
|
||||
"reference": "0df9a23c0f9eddbb6682479fee6fd58b88add75b"
|
||||
"reference": "2434fb32851f252e4f27691eee0b77c16198db62"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/error-handler/zipball/0df9a23c0f9eddbb6682479fee6fd58b88add75b",
|
||||
"reference": "0df9a23c0f9eddbb6682479fee6fd58b88add75b",
|
||||
"url": "https://api.github.com/repos/symfony/error-handler/zipball/2434fb32851f252e4f27691eee0b77c16198db62",
|
||||
"reference": "2434fb32851f252e4f27691eee0b77c16198db62",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2509,20 +2562,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-28T10:39:14+00:00"
|
||||
"time": "2020-08-17T09:56:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "a5370aaa7807c7a439b21386661ffccf3dff2866"
|
||||
"reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a5370aaa7807c7a439b21386661ffccf3dff2866",
|
||||
"reference": "a5370aaa7807c7a439b21386661ffccf3dff2866",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3e8ea5ccddd00556b86d69d42f99f1061a704030",
|
||||
"reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2593,7 +2646,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-20T08:37:50+00:00"
|
||||
"time": "2020-08-13T14:18:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher-contracts",
|
||||
|
|
@ -2673,20 +2726,20 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "5729f943f9854c5781984ed4907bbb817735776b"
|
||||
"reference": "2a78590b2c7e3de5c429628457c47541c58db9c7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b",
|
||||
"reference": "5729f943f9854c5781984ed4907bbb817735776b",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/2a78590b2c7e3de5c429628457c47541c58db9c7",
|
||||
"reference": "2a78590b2c7e3de5c429628457c47541c58db9c7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3"
|
||||
"php": ">=7.1.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|
|
@ -2732,20 +2785,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-03-27T16:54:36+00:00"
|
||||
"time": "2020-08-17T09:56:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-foundation",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-foundation.git",
|
||||
"reference": "3adfbd7098c850b02d107330b7b9deacf2581578"
|
||||
"reference": "e3e5a62a6631a461954d471e7206e3750dbe8ee1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/3adfbd7098c850b02d107330b7b9deacf2581578",
|
||||
"reference": "3adfbd7098c850b02d107330b7b9deacf2581578",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/e3e5a62a6631a461954d471e7206e3750dbe8ee1",
|
||||
"reference": "e3e5a62a6631a461954d471e7206e3750dbe8ee1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2801,20 +2854,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-23T09:11:46+00:00"
|
||||
"time": "2020-08-17T07:39:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-kernel",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-kernel.git",
|
||||
"reference": "81d42148474e1852a333ed7a732f2a014af75430"
|
||||
"reference": "f93f6b3e52a590749994cc23d8fb879472ceb76c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/81d42148474e1852a333ed7a732f2a014af75430",
|
||||
"reference": "81d42148474e1852a333ed7a732f2a014af75430",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/f93f6b3e52a590749994cc23d8fb879472ceb76c",
|
||||
"reference": "f93f6b3e52a590749994cc23d8fb879472ceb76c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2906,20 +2959,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-06-12T11:15:37+00:00"
|
||||
"time": "2020-08-31T06:09:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/mime",
|
||||
"version": "v5.1.2",
|
||||
"version": "v5.1.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/mime.git",
|
||||
"reference": "c0c418f05e727606e85b482a8591519c4712cf45"
|
||||
"reference": "89a2c9b4cb7b5aa516cf55f5194c384f444c81dc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/mime/zipball/c0c418f05e727606e85b482a8591519c4712cf45",
|
||||
"reference": "c0c418f05e727606e85b482a8591519c4712cf45",
|
||||
"url": "https://api.github.com/repos/symfony/mime/zipball/89a2c9b4cb7b5aa516cf55f5194c384f444c81dc",
|
||||
"reference": "89a2c9b4cb7b5aa516cf55f5194c384f444c81dc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2983,11 +3036,11 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-06-09T15:07:35+00:00"
|
||||
"time": "2020-08-17T10:01:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
|
|
@ -3063,7 +3116,7 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-iconv",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-iconv.git",
|
||||
|
|
@ -3140,16 +3193,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-idn",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||
"reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe"
|
||||
"reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/bc6549d068d0160e0f10f7a5a23c7d1406b95ebe",
|
||||
"reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251",
|
||||
"reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -3221,11 +3274,11 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-07-14T12:35:20+00:00"
|
||||
"time": "2020-08-04T06:02:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
|
|
@ -3306,7 +3359,7 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
|
|
@ -3383,7 +3436,7 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php70",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php70.git",
|
||||
|
|
@ -3460,7 +3513,7 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
|
|
@ -3533,7 +3586,7 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php73",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php73.git",
|
||||
|
|
@ -3609,7 +3662,7 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.18.0",
|
||||
"version": "v1.18.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
|
|
@ -3689,20 +3742,20 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "c714958428a85c86ab97e3a0c96db4c4f381b7f5"
|
||||
"reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/c714958428a85c86ab97e3a0c96db4c4f381b7f5",
|
||||
"reference": "c714958428a85c86ab97e3a0c96db4c4f381b7f5",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/65e70bab62f3da7089a8d4591fb23fbacacb3479",
|
||||
"reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3"
|
||||
"php": ">=7.1.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|
|
@ -3748,24 +3801,24 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-30T20:06:45+00:00"
|
||||
"time": "2020-07-23T08:31:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/routing.git",
|
||||
"reference": "0f557911dde75c2a9652b8097bd7c9f54507f646"
|
||||
"reference": "e3387963565da9bae51d1d3ab8041646cc93bd04"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/0f557911dde75c2a9652b8097bd7c9f54507f646",
|
||||
"reference": "0f557911dde75c2a9652b8097bd7c9f54507f646",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/e3387963565da9bae51d1d3ab8041646cc93bd04",
|
||||
"reference": "e3387963565da9bae51d1d3ab8041646cc93bd04",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3"
|
||||
"php": ">=7.1.3"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/config": "<4.2",
|
||||
|
|
@ -3838,7 +3891,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-30T20:07:26+00:00"
|
||||
"time": "2020-08-10T07:27:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
|
|
@ -3918,16 +3971,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/translation",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/translation.git",
|
||||
"reference": "79d3ef9096a6a6047dbc69218b68c7b7f63193af"
|
||||
"reference": "700e6e50174b0cdcf0fa232773bec5c314680575"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/79d3ef9096a6a6047dbc69218b68c7b7f63193af",
|
||||
"reference": "79d3ef9096a6a6047dbc69218b68c7b7f63193af",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/700e6e50174b0cdcf0fa232773bec5c314680575",
|
||||
"reference": "700e6e50174b0cdcf0fa232773bec5c314680575",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -4004,7 +4057,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-30T20:06:45+00:00"
|
||||
"time": "2020-08-17T09:56:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation-contracts",
|
||||
|
|
@ -4083,16 +4136,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
"version": "v4.4.10",
|
||||
"version": "v4.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-dumper.git",
|
||||
"reference": "56b3aa5eab0ac6720dcd559fd1d590ce301594ac"
|
||||
"reference": "1bef32329f3166486ab7cb88599cae4875632b99"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/56b3aa5eab0ac6720dcd559fd1d590ce301594ac",
|
||||
"reference": "56b3aa5eab0ac6720dcd559fd1d590ce301594ac",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/1bef32329f3166486ab7cb88599cae4875632b99",
|
||||
"reference": "1bef32329f3166486ab7cb88599cae4875632b99",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -4170,7 +4223,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-05-30T20:06:45+00:00"
|
||||
"time": "2020-08-17T07:31:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tijsverkoyen/css-to-inline-styles",
|
||||
|
|
@ -4368,21 +4421,21 @@
|
|||
},
|
||||
{
|
||||
"name": "facade/flare-client-php",
|
||||
"version": "1.3.4",
|
||||
"version": "1.3.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facade/flare-client-php.git",
|
||||
"reference": "0eeb0de4fc1078433f0915010bd8f41e998adcb4"
|
||||
"reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/facade/flare-client-php/zipball/0eeb0de4fc1078433f0915010bd8f41e998adcb4",
|
||||
"reference": "0eeb0de4fc1078433f0915010bd8f41e998adcb4",
|
||||
"url": "https://api.github.com/repos/facade/flare-client-php/zipball/25907a113bfc212a38d458ae365bfb902b4e7fb8",
|
||||
"reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"facade/ignition-contracts": "~1.0",
|
||||
"illuminate/pipeline": "^5.5|^6.0|^7.0",
|
||||
"illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0",
|
||||
"php": "^7.1",
|
||||
"symfony/http-foundation": "^3.3|^4.1|^5.0",
|
||||
"symfony/mime": "^3.4|^4.0|^5.1",
|
||||
|
|
@ -4426,7 +4479,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-07-13T23:25:57+00:00"
|
||||
"time": "2020-08-26T18:06:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "facade/ignition",
|
||||
|
|
@ -4798,16 +4851,16 @@
|
|||
},
|
||||
{
|
||||
"name": "mockery/mockery",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mockery/mockery.git",
|
||||
"reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6"
|
||||
"reference": "20cab678faed06fac225193be281ea0fddb43b93"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/1404386ca3410b04fe58b9517e85d702ab33b2c6",
|
||||
"reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93",
|
||||
"reference": "20cab678faed06fac225193be281ea0fddb43b93",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -4819,7 +4872,7 @@
|
|||
"phpunit/phpunit": "<8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.5 || ^9.0"
|
||||
"phpunit/phpunit": "^8.5 || ^9.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|
|
@ -4862,7 +4915,7 @@
|
|||
"test double",
|
||||
"testing"
|
||||
],
|
||||
"time": "2020-07-09T08:31:54+00:00"
|
||||
"time": "2020-08-11T18:10:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
|
|
@ -5135,16 +5188,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpdocumentor/reflection-docblock",
|
||||
"version": "5.2.0",
|
||||
"version": "5.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
||||
"reference": "3170448f5769fe19f456173d833734e0ff1b84df"
|
||||
"reference": "d870572532cd70bc3fab58f2e23ad423c8404c44"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/3170448f5769fe19f456173d833734e0ff1b84df",
|
||||
"reference": "3170448f5769fe19f456173d833734e0ff1b84df",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44",
|
||||
"reference": "d870572532cd70bc3fab58f2e23ad423c8404c44",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -5183,7 +5236,7 @@
|
|||
}
|
||||
],
|
||||
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
||||
"time": "2020-07-20T20:05:34+00:00"
|
||||
"time": "2020-08-15T11:14:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/type-resolver",
|
||||
|
|
@ -5543,6 +5596,7 @@
|
|||
"keywords": [
|
||||
"tokenizer"
|
||||
],
|
||||
"abandoned": true,
|
||||
"time": "2019-09-17T06:23:10+00:00"
|
||||
},
|
||||
{
|
||||
|
|
@ -5640,16 +5694,16 @@
|
|||
},
|
||||
{
|
||||
"name": "scrivo/highlight.php",
|
||||
"version": "v9.18.1.1",
|
||||
"version": "v9.18.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/scrivo/highlight.php.git",
|
||||
"reference": "52fc21c99fd888e33aed4879e55a3646f8d40558"
|
||||
"reference": "efb6e445494a9458aa59b0af5edfa4bdcc6809d9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/52fc21c99fd888e33aed4879e55a3646f8d40558",
|
||||
"reference": "52fc21c99fd888e33aed4879e55a3646f8d40558",
|
||||
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/efb6e445494a9458aa59b0af5edfa4bdcc6809d9",
|
||||
"reference": "efb6e445494a9458aa59b0af5edfa4bdcc6809d9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -5711,7 +5765,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-03-02T05:59:21+00:00"
|
||||
"time": "2020-08-27T03:24:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/code-unit-reverse-lookup",
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ return [
|
|||
'name' => env('APP_NAME', 'Laravel'),
|
||||
'sip_domain' => env('APP_SIP_DOMAIN', 'sip.domain.com'),
|
||||
'flexisip_proxy_pid' => env('APP_FLEXISIP_PROXY_PID', '/var/run/flexisip-proxy.pid'),
|
||||
'newsletter_registration_address' => env('NEWSLETTER_REGISTRATION_ADDRESS', ''),
|
||||
'phone_authentication' => env('PHONE_AUTHENTICATION', true),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
38
flexiapi/public/css/style.css
vendored
38
flexiapi/public/css/style.css
vendored
|
|
@ -26,22 +26,23 @@ body > div {
|
|||
}
|
||||
|
||||
.container {
|
||||
max-width: 960px;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
body > header::after,
|
||||
body > footer::before {
|
||||
background-image: url('/img/header.svg');
|
||||
background-color: white;
|
||||
background-position: bottom center;
|
||||
background-repeat: repeat-x;
|
||||
display: block;
|
||||
height: 10rem;
|
||||
width: 100%;
|
||||
background-size: 40rem;
|
||||
background-size: 50rem;
|
||||
content: '';
|
||||
background-image: url('/img/footer.svg');
|
||||
height: 9rem;
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: 991px) {
|
||||
nav.navbar {
|
||||
display: none;
|
||||
|
|
@ -72,10 +73,30 @@ input.form-control {
|
|||
background-color: transparent;
|
||||
color: #ff733b;
|
||||
border-radius: 10rem;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.8rem;
|
||||
line-height: 2.25rem;
|
||||
padding: 0 1.5rem;
|
||||
}
|
||||
|
||||
.btn.btn-centered {
|
||||
display: block;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
.btn:hover,
|
||||
.btn:not(.disabled):not(:disabled):active,
|
||||
.btn:not(.disabled):not(:disabled):focus {
|
||||
background-color: black;
|
||||
color: white;
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
body > footer,
|
||||
body > header nav {
|
||||
background-color: #f44a26;
|
||||
}
|
||||
|
||||
body > footer {
|
||||
background-color: #ff733b;
|
||||
}
|
||||
|
||||
|
|
@ -88,9 +109,4 @@ body > footer {
|
|||
body > header::after {
|
||||
background-position: top center;
|
||||
margin-bottom: -4.5rem;
|
||||
}
|
||||
|
||||
body > footer::before {
|
||||
background-image: url('/img/footer.svg');
|
||||
height: 9rem;
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
@if ($account->activated)
|
||||
<p>A unique authentication link was sent by email to <b>{{ $account->email }}</b></p>
|
||||
@else
|
||||
<p>To finish your registration process and set a password please follow the link sent on your email addres <b>{{ $account->email }}</b></p>
|
||||
<p>To finish your registration process and set a password please follow the link sent on your email address <b>{{ $account->email }}</b></p>
|
||||
@endif
|
||||
@endif
|
||||
@endsection
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
@else
|
||||
<div class="card mt-3">
|
||||
<div class="card-body">
|
||||
{!! Form::open(['route' => 'account.authenticate_phone_confirm']) !!}
|
||||
{!! Form::open(['route' => 'account.authenticate.phone_confirm']) !!}
|
||||
<div class="form-group">
|
||||
{!! Form::label('code', 'Code') !!}
|
||||
{!! Form::hidden('account_id', $account->id) !!}
|
||||
32
flexiapi/resources/views/account/home.blade.php
Normal file
32
flexiapi/resources/views/account/home.blade.php
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
|
||||
<h2>{{ config('app.name') }}</h2>
|
||||
|
||||
<p>There are {{ $count }} users registered with this service.</p>
|
||||
|
||||
@if (config('instance.intro_registration'))
|
||||
<p>{!! nl2br(config('instance.intro_registration')) !!}</p>
|
||||
@endif
|
||||
|
||||
<hr />
|
||||
|
||||
<div class="list-group mb-3">
|
||||
<a href="{{ route('account.register') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">Create an account</h5>
|
||||
</div>
|
||||
<p class="mb-1">Register on our service</p>
|
||||
</a>
|
||||
<a href="{{ route('account.login') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">Manage your account</h5>
|
||||
</div>
|
||||
<p class="mb-1">Get access to your account panel to configure it</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@include('parts.password_recovery')
|
||||
|
||||
@endsection
|
||||
|
|
@ -1,14 +1,26 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<p class="text-center">
|
||||
No account yet?
|
||||
<a class="btn btn-secondary ml-2" href="{{ route('account.register') }}">Register</a>
|
||||
</p>
|
||||
|
||||
<hr />
|
||||
|
||||
@if (Auth::check())
|
||||
@include('parts.already_auth')
|
||||
@else
|
||||
{!! Form::open(['route' => 'account.authenticate']) !!}
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-6">
|
||||
{!! Form::label('username', 'Username') !!}
|
||||
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username', 'required']) !!}
|
||||
@if (config('app.phone_authentication'))
|
||||
{!! Form::label('username', 'Username or phone number') !!}
|
||||
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username or phone number', 'required']) !!}
|
||||
@else
|
||||
{!! Form::label('username', 'Username') !!}
|
||||
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username', 'required']) !!}
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group col-md-6">
|
||||
{!! Form::label('password', 'Password') !!}
|
||||
|
|
@ -16,21 +28,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-6">
|
||||
{!! Form::submit('Authenticate', ['class' => 'btn btn-primary']) !!}
|
||||
</div>
|
||||
{!! Form::submit('Authenticate', ['class' => 'btn btn-primary btn-centered mt-1']) !!}
|
||||
|
||||
<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() !!}
|
||||
|
||||
<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>
|
||||
@include('parts.password_recovery')
|
||||
@endif
|
||||
@endsection
|
||||
|
|
@ -6,11 +6,12 @@
|
|||
@else
|
||||
<div class="card mt-3">
|
||||
<div class="card-body">
|
||||
{!! Form::open(['route' => 'account.authenticate_email']) !!}
|
||||
{!! Form::open(['route' => 'account.authenticate.email']) !!}
|
||||
<div class="form-group">
|
||||
{!! Form::label('email', 'Email') !!}
|
||||
{!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => 'myemail@address.org', 'required']) !!}
|
||||
</div>
|
||||
@include('parts.captcha')
|
||||
{!! Form::submit('Send the authentication link', ['class' => 'btn btn-primary btn-centered']) !!}
|
||||
{!! Form::close() !!}
|
||||
</div>
|
||||
|
|
@ -6,11 +6,12 @@
|
|||
@else
|
||||
<div class="card mt-3">
|
||||
<div class="card-body">
|
||||
{!! Form::open(['route' => 'account.authenticate_phone']) !!}
|
||||
{!! Form::open(['route' => 'account.authenticate.phone']) !!}
|
||||
<div class="form-group">
|
||||
{!! Form::label('phone', 'Phone') !!}
|
||||
{!! Form::text('phone', old('phone'), ['class' => 'form-control', 'placeholder' => '+123456789', 'required']) !!}
|
||||
</div>
|
||||
@include('parts.captcha')
|
||||
{!! Form::submit('Send the authentication code by SMS', ['class' => 'btn btn-primary btn-centered']) !!}
|
||||
{!! Form::close() !!}
|
||||
</div>
|
||||
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
@section('content')
|
||||
|
||||
<div class="list-group mb-3">
|
||||
<h2>Manage your account</h2>
|
||||
|
||||
<div class="list-group mb-3 pt-2">
|
||||
<a href="{{ route('account.email') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">Change my current account email</h5>
|
||||
|
|
@ -21,7 +23,11 @@
|
|||
</a>
|
||||
<a href="{{ route('account.password') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">Change my password</h5>
|
||||
@if ($account->passwords()->count() > 0)
|
||||
<h5 class="mb-1">Change my password</h5>
|
||||
@else
|
||||
<h5 class="mb-1">Set my password</h5>
|
||||
@endif
|
||||
</div>
|
||||
@if ($account->passwords()->where('algorithm', 'SHA-256')->exists())
|
||||
<p class="mb-1">SHA-256 password configured</p>
|
||||
|
|
@ -2,7 +2,11 @@
|
|||
|
||||
@section('content')
|
||||
|
||||
<h2>Change my account password</h2>
|
||||
@if ($account->passwords()->count() > 0)
|
||||
<h2>Change my account password</h2>
|
||||
@else
|
||||
<h2>Set my account password</h2>
|
||||
@endif
|
||||
|
||||
{!! Form::open(['route' => 'account.password.update']) !!}
|
||||
@if ($account->passwords()->count() > 0)
|
||||
|
|
@ -24,7 +28,7 @@
|
|||
{!! Form::label('password_sha256', 'Use a SHA-256 encrypted password. This stronger password might not work with some old SIP clients.', ['class' => 'form-check-label']) !!}
|
||||
</div>
|
||||
|
||||
{!! Form::submit('Change', ['class' => 'btn btn-primary']) !!}
|
||||
{!! Form::submit('Change', ['class' => 'btn btn-primary btn-centered']) !!}
|
||||
{!! Form::close() !!}
|
||||
|
||||
@endsection
|
||||
|
|
@ -2,9 +2,6 @@
|
|||
|
||||
@section('content')
|
||||
|
||||
@if (config('instance.intro_registration'))
|
||||
<p>{!! nl2br(config('instance.intro_registration')) !!}</p>
|
||||
@endif
|
||||
<p class="text-center">
|
||||
You already have an account?
|
||||
<a class="ml-2 btn btn-primary btn-sm" href="{{ route('account.login') }}">Authenticate</a>
|
||||
|
|
@ -14,51 +11,19 @@
|
|||
|
||||
<h2>Register a new account</h2>
|
||||
|
||||
{!! Form::open(['route' => 'account.store']) !!}
|
||||
|
||||
<p>Fill a username and an email address OR phone number, you will then be able to set a password to finish the registration process.</p>
|
||||
|
||||
<div class="form-group">
|
||||
{!! Form::label('username', 'Username') !!}
|
||||
<div class=" input-group mb-3">
|
||||
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username', 'required']) !!}
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text" id="basic-addon2">{{ $domain }}</span>
|
||||
<div class="list-group mb-3 pt-2">
|
||||
<a href="{{ route('account.register.email') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">Using your email address</h5>
|
||||
</div>
|
||||
</div>
|
||||
<p class="mb-1">Register on our service with an email address</p>
|
||||
</a>
|
||||
<a href="{{ route('account.register.phone') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">With your phone number</h5>
|
||||
</div>
|
||||
<p class="mb-1">Use your phone number to register</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-6">
|
||||
{!! Form::label('email', 'Email') !!}
|
||||
{!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => 'username@server.com']) !!}
|
||||
</div>
|
||||
<div class="form-group col-md-6">
|
||||
{!! Form::label('email_confirmation', 'Email confirmation') !!}
|
||||
{!! Form::email('email_confirmation', old('email_confirm'), ['class' => 'form-control', 'placeholder' => 'username@server.com']) !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="text-center mb-0">OR</h2>
|
||||
|
||||
<div class="form-group">
|
||||
{!! Form::label('phone', 'Phone number') !!}
|
||||
{!! Form::text('phone', old('phone'), ['class' => 'form-control', 'placeholder' => '+123456789']) !!}
|
||||
</div>
|
||||
|
||||
<div class="form-check mb-3">
|
||||
<a href="{{ route('account.terms') }}">Terms and Conditions</a><br />
|
||||
{!! Form::checkbox('terms', 'checked', false, ['class' => 'form-check-input', 'id' => 'terms']) !!}
|
||||
<label class="form-check-label" for="terms">I accept the Terms and Conditions</a></label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
{!! NoCaptcha::renderJs() !!}
|
||||
{!! NoCaptcha::display() !!}
|
||||
</div>
|
||||
|
||||
{!! Form::submit('Register', ['class' => 'btn btn-primary btn-centered']) !!}
|
||||
{!! Form::close() !!}
|
||||
|
||||
@endsection
|
||||
45
flexiapi/resources/views/account/register/email.blade.php
Normal file
45
flexiapi/resources/views/account/register/email.blade.php
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
|
||||
<h2>Register using an email address</h2>
|
||||
|
||||
{!! Form::open(['route' => 'account.store.email']) !!}
|
||||
|
||||
<p>Fill a username and an email address, you will then be able to set a password to finish the registration process.</p>
|
||||
|
||||
<div class="form-group">
|
||||
{!! Form::label('username', 'SIP Username') !!}
|
||||
<div class=" input-group mb-3">
|
||||
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username', 'required']) !!}
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text" id="basic-addon2">{{ $domain }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-6">
|
||||
{!! Form::label('email', 'Email') !!}
|
||||
{!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => 'username@server.com']) !!}
|
||||
</div>
|
||||
<div class="form-group col-md-6">
|
||||
{!! Form::label('email_confirmation', 'Email confirmation') !!}
|
||||
{!! Form::email('email_confirmation', old('email_confirm'), ['class' => 'form-control', 'placeholder' => 'username@server.com']) !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (!empty(config('app.newsletter_registration_address')))
|
||||
<div class="form-check mb-3">
|
||||
{!! Form::checkbox('newsletter', 'true', false, ['class' => 'form-check-input', 'id' => 'newsletter']) !!}
|
||||
<label class="form-check-label" for="newsletter">I would like to subscribe to the newsletter</a></label>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@include('parts.terms')
|
||||
|
||||
{!! Form::submit('Register', ['class' => 'btn btn-primary btn-centered']) !!}
|
||||
{!! Form::close() !!}
|
||||
|
||||
@endsection
|
||||
31
flexiapi/resources/views/account/register/phone.blade.php
Normal file
31
flexiapi/resources/views/account/register/phone.blade.php
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
|
||||
<h2>Register using a phone number</h2>
|
||||
|
||||
{!! Form::open(['route' => 'account.store.phone']) !!}
|
||||
|
||||
<p>Fill a phone number and a username (optional) you will then be able to set a password to finish the registration process.</p>
|
||||
|
||||
<div class="form-group">
|
||||
{!! Form::label('phone', 'Phone number') !!}
|
||||
{!! Form::text('phone', old('phone'), ['class' => 'form-control', 'placeholder' => '+123456789']) !!}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
{!! Form::label('username', 'SIP Username (optional)') !!}
|
||||
<div class=" input-group mb-3">
|
||||
{!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username']) !!}
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text" id="basic-addon2">{{ $domain }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@include('parts.terms')
|
||||
|
||||
{!! Form::submit('Register', ['class' => 'btn btn-primary btn-centered']) !!}
|
||||
{!! Form::close() !!}
|
||||
|
||||
@endsection
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
<div class="collapse navbar-collapse" >
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item active">
|
||||
<a class="nav-link" href="{{ route('account.index') }}">{{ config('app.name') }}</a>
|
||||
<a class="nav-link" href="{{ route('account.panel') }}">{{ config('app.name') }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
@if (Auth::check())
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
</li>
|
||||
@if (isset($user) && get_class($user) == 'App\Account')
|
||||
<li class="nav-item active">
|
||||
<a class="nav-link" href="{{ route('account.index') }}">My Account</a>
|
||||
<a class="nav-link" href="{{ route('account.panel') }}">My Account</a>
|
||||
</li>
|
||||
@endif
|
||||
<li class="nav-item @if (request()->routeIs('api')) active @endif">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Mailing list email registration</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Hello,</p>
|
||||
<p>
|
||||
The following email address wants to register to the mailing list: {{ $account->email }}.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
Hello,
|
||||
|
||||
The following email address wants to register to the mailing list: {{ $account->email }}.
|
||||
4
flexiapi/resources/views/parts/captcha.blade.php
Normal file
4
flexiapi/resources/views/parts/captcha.blade.php
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<div class="form-group">
|
||||
{!! NoCaptcha::renderJs() !!}
|
||||
{!! NoCaptcha::display() !!}
|
||||
</div>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<p class="text-center">
|
||||
Set or recover your password using your <a href="{{ route('account.login_email') }}">Email address</a>
|
||||
@if (config('app.phone_authentication'))
|
||||
or your <a href="{{ route('account.login_phone') }}">Phone number</a>
|
||||
@endif
|
||||
</p>
|
||||
7
flexiapi/resources/views/parts/terms.blade.php
Normal file
7
flexiapi/resources/views/parts/terms.blade.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<div class="form-check mb-3">
|
||||
{!! Form::checkbox('terms', 'true', false, ['class' => 'form-check-input', 'id' => 'terms']) !!}
|
||||
<label class="form-check-label" for="terms">I accept the Terms and Conditions: </a></label>
|
||||
<p>Read the <a href="{{ route('account.terms') }}">Terms and Conditions</a></p>
|
||||
</div>
|
||||
|
||||
@include('parts.captcha')
|
||||
|
|
@ -19,24 +19,33 @@
|
|||
|
||||
//Route::get('/', 'HomeController@index')->name('home');
|
||||
|
||||
Route::get('login', 'AccountController@login')->name('account.login');
|
||||
Route::post('authenticate', 'AccountController@authenticate')->name('account.authenticate');
|
||||
|
||||
Route::get('login/email', 'AccountController@loginEmail')->name('account.login_email');
|
||||
Route::get('/', 'AccountController@home')->name('account.home');
|
||||
Route::get('terms', 'AccountController@terms')->name('account.terms');
|
||||
Route::post('authenticate/email', 'AccountController@authenticateEmail')->name('account.authenticate_email');
|
||||
Route::get('authenticate/email/{code}', 'AccountController@authenticateEmailConfirm')->name('account.authenticate_email_confirm');
|
||||
|
||||
Route::get('login/phone', 'AccountController@loginPhone')->name('account.login_phone');
|
||||
Route::post('authenticate/phone', 'AccountController@authenticatePhone')->name('account.authenticate_phone');
|
||||
Route::post('authenticate/phone/confirm', 'AccountController@authenticatePhoneConfirm')->name('account.authenticate_phone_confirm');
|
||||
Route::get('login', 'AccountAuthenticateController@login')->name('account.login');
|
||||
Route::post('authenticate', 'AccountAuthenticateController@authenticate')->name('account.authenticate');
|
||||
|
||||
Route::get('register', 'AccountController@register')->name('account.register');
|
||||
Route::post('register', 'AccountController@store')->name('account.store');
|
||||
Route::get('login/email', 'AccountAuthenticateController@loginEmail')->name('account.login_email');
|
||||
Route::post('authenticate/email', 'AccountAuthenticateController@authenticateEmail')->name('account.authenticate.email');
|
||||
Route::get('authenticate/email/{code}', 'AccountAuthenticateController@authenticateEmailConfirm')->name('account.authenticate.email_confirm');
|
||||
|
||||
Route::get('login/phone', 'AccountAuthenticateController@loginPhone')->name('account.login_phone');
|
||||
Route::post('authenticate/phone', 'AccountAuthenticateController@authenticatePhone')->name('account.authenticate.phone');
|
||||
Route::post('authenticate/phone/confirm', 'AccountAuthenticateController@authenticatePhoneConfirm')->name('account.authenticate.phone_confirm');
|
||||
|
||||
Route::get('register', 'AccountRegisterController@register')->name('account.register');
|
||||
|
||||
if (config('app.phone_authentication')) {
|
||||
Route::get('register/phone', 'AccountRegisterController@registerPhone')->name('account.register.phone');
|
||||
Route::post('register/phone', 'AccountRegisterController@storePhone')->name('account.store.phone');
|
||||
}
|
||||
|
||||
Route::get('register/email', 'AccountRegisterController@registerEmail')->name('account.register.email');
|
||||
Route::post('register/email', 'AccountRegisterController@storeEmail')->name('account.store.email');
|
||||
|
||||
Route::group(['middleware' => 'auth'], function () {
|
||||
Route::get('/', 'AccountController@index')->name('account.index');
|
||||
Route::get('logout', 'AccountController@logout')->name('account.logout');
|
||||
Route::get('panel', 'AccountController@panel')->name('account.panel');
|
||||
Route::get('logout', 'AccountAuthenticateController@logout')->name('account.logout');
|
||||
|
||||
Route::get('delete', 'AccountController@delete')->name('account.delete');
|
||||
Route::delete('delete', 'AccountController@destroy')->name('account.destroy');
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue