diff --git a/flexiapi/.env.example b/flexiapi/.env.example index 957c751..0b0f67d 100644 --- a/flexiapi/.env.example +++ b/flexiapi/.env.example @@ -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 diff --git a/flexiapi/app/Http/Controllers/AccountAuthenticateController.php b/flexiapi/app/Http/Controllers/AccountAuthenticateController.php new file mode 100644 index 0000000..84b2cec --- /dev/null +++ b/flexiapi/app/Http/Controllers/AccountAuthenticateController.php @@ -0,0 +1,164 @@ +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'); + } +} diff --git a/flexiapi/app/Http/Controllers/AccountController.php b/flexiapi/app/Http/Controllers/AccountController.php index cc165b1..d29d3ea 100644 --- a/flexiapi/app/Http/Controllers/AccountController.php +++ b/flexiapi/app/Http/Controllers/AccountController.php @@ -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'); - } } diff --git a/flexiapi/app/Http/Controllers/AccountEmailController.php b/flexiapi/app/Http/Controllers/AccountEmailController.php index 88da0cf..d7dc2a9 100644 --- a/flexiapi/app/Http/Controllers/AccountEmailController.php +++ b/flexiapi/app/Http/Controllers/AccountEmailController.php @@ -28,6 +28,6 @@ class AccountEmailController extends Controller Mail::to($account)->send(new ChangedEmail()); - return redirect()->route('account.index'); + return redirect()->route('account.panel'); } } diff --git a/flexiapi/app/Http/Controllers/AccountPasswordController.php b/flexiapi/app/Http/Controllers/AccountPasswordController.php index 56ffcfc..a47240e 100644 --- a/flexiapi/app/Http/Controllers/AccountPasswordController.php +++ b/flexiapi/app/Http/Controllers/AccountPasswordController.php @@ -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'); } } diff --git a/flexiapi/app/Http/Controllers/AccountRegisterController.php b/flexiapi/app/Http/Controllers/AccountRegisterController.php new file mode 100644 index 0000000..646f3af --- /dev/null +++ b/flexiapi/app/Http/Controllers/AccountRegisterController.php @@ -0,0 +1,117 @@ +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 + ]); + } +} diff --git a/flexiapi/app/Http/Middleware/Authenticate.php b/flexiapi/app/Http/Middleware/Authenticate.php index 5a9b666..18ed0ec 100644 --- a/flexiapi/app/Http/Middleware/Authenticate.php +++ b/flexiapi/app/Http/Middleware/Authenticate.php @@ -15,7 +15,7 @@ class Authenticate extends Middleware protected function redirectTo($request) { if (! $request->expectsJson()) { - return route('account.register'); + return route('account.home'); } } } diff --git a/flexiapi/app/Mail/NewsletterRegistration.php b/flexiapi/app/Mail/NewsletterRegistration.php new file mode 100644 index 0000000..8f6e548 --- /dev/null +++ b/flexiapi/app/Mail/NewsletterRegistration.php @@ -0,0 +1,29 @@ +_account = $account; + } + + public function build() + { + return $this->view('mails.newsletter_registration') + ->text('mails.newsletter_registration_text') + ->with(['account' => $this->_account]); + } +} diff --git a/flexiapi/app/Mail/PasswordAuthentication.php b/flexiapi/app/Mail/PasswordAuthentication.php index d459a1c..df429af 100644 --- a/flexiapi/app/Mail/PasswordAuthentication.php +++ b/flexiapi/app/Mail/PasswordAuthentication.php @@ -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]) ]); } } diff --git a/flexiapi/app/Mail/RegisterConfirmation.php b/flexiapi/app/Mail/RegisterConfirmation.php index 45c74e0..8bf8847 100644 --- a/flexiapi/app/Mail/RegisterConfirmation.php +++ b/flexiapi/app/Mail/RegisterConfirmation.php @@ -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]) ]); } } diff --git a/flexiapi/composer.lock b/flexiapi/composer.lock index 8d41186..b74417f 100644 --- a/flexiapi/composer.lock +++ b/flexiapi/composer.lock @@ -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", diff --git a/flexiapi/config/app.php b/flexiapi/config/app.php index cb35bc4..2fd89e4 100644 --- a/flexiapi/config/app.php +++ b/flexiapi/config/app.php @@ -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), /* |-------------------------------------------------------------------------- diff --git a/flexiapi/public/css/style.css b/flexiapi/public/css/style.css index df445a6..2b45eae 100644 --- a/flexiapi/public/css/style.css +++ b/flexiapi/public/css/style.css @@ -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; -} +} \ No newline at end of file diff --git a/flexiapi/resources/views/account/authenticate_email.blade.php b/flexiapi/resources/views/account/authenticate/email.blade.php similarity index 78% rename from flexiapi/resources/views/account/authenticate_email.blade.php rename to flexiapi/resources/views/account/authenticate/email.blade.php index f1259e8..447b4e3 100644 --- a/flexiapi/resources/views/account/authenticate_email.blade.php +++ b/flexiapi/resources/views/account/authenticate/email.blade.php @@ -7,7 +7,7 @@ @if ($account->activated)
A unique authentication link was sent by email to {{ $account->email }}
@else -To finish your registration process and set a password please follow the link sent on your email addres {{ $account->email }}
+To finish your registration process and set a password please follow the link sent on your email address {{ $account->email }}
@endif @endif @endsection \ No newline at end of file diff --git a/flexiapi/resources/views/account/authenticate_phone.blade.php b/flexiapi/resources/views/account/authenticate/phone.blade.php similarity index 95% rename from flexiapi/resources/views/account/authenticate_phone.blade.php rename to flexiapi/resources/views/account/authenticate/phone.blade.php index 64039f2..a920b89 100644 --- a/flexiapi/resources/views/account/authenticate_phone.blade.php +++ b/flexiapi/resources/views/account/authenticate/phone.blade.php @@ -6,7 +6,7 @@ @elseThere are {{ $count }} users registered with this service.
+ +@if (config('instance.intro_registration')) +{!! nl2br(config('instance.intro_registration')) !!}
+@endif + +Register on our service
+ + +Get access to your account panel to configure it
+ ++ No account yet? + Register +
+ +- No account yet? - Register - -
-You can also authenticate using your Email address or your Phone number
+ @include('parts.password_recovery') @endif @endsection \ No newline at end of file diff --git a/flexiapi/resources/views/account/login_email.blade.php b/flexiapi/resources/views/account/login/email.blade.php similarity index 91% rename from flexiapi/resources/views/account/login_email.blade.php rename to flexiapi/resources/views/account/login/email.blade.php index afec3f5..9e1b62d 100644 --- a/flexiapi/resources/views/account/login_email.blade.php +++ b/flexiapi/resources/views/account/login/email.blade.php @@ -6,11 +6,12 @@ @else{!! nl2br(config('instance.intro_registration')) !!}
-@endifYou already have an account? Authenticate @@ -14,51 +11,19 @@
Fill a username and an email address OR phone number, you will then be able to set a password to finish the registration process.
- -Register on our service with an email address
+ + +Use your phone number to register
+Fill a username and an email address, you will then be able to set a password to finish the registration process.
+ +Fill a phone number and a username (optional) you will then be able to set a password to finish the registration process.
+ +