From d73c952c76eb1054bedee8c068ab592c708cb53e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Jaussoin?= Date: Wed, 15 Apr 2020 16:59:34 +0200 Subject: [PATCH] Change the routes Implement email and password change + password when it's not set --- .../Http/Controllers/AccountController.php | 15 ++++- .../Controllers/AccountEmailController.php | 29 +++++++++ .../Controllers/AccountPasswordController.php | 62 +++++++++++++++++++ .../app/Http/Controllers/HomeController.php | 22 ------- flexiapi/app/Http/Middleware/Authenticate.php | 2 +- .../resources/views/account/email.blade.php | 26 ++++++++ .../resources/views/account/index.blade.php | 25 +++++++- .../resources/views/account/login.blade.php | 26 ++++++++ .../views/account/password.blade.php | 30 +++++++++ .../resources/views/layouts/account.blade.php | 9 +-- flexiapi/routes/web.php | 14 +++-- 11 files changed, 224 insertions(+), 36 deletions(-) create mode 100644 flexiapi/app/Http/Controllers/AccountEmailController.php create mode 100644 flexiapi/app/Http/Controllers/AccountPasswordController.php delete mode 100644 flexiapi/app/Http/Controllers/HomeController.php create mode 100644 flexiapi/resources/views/account/email.blade.php create mode 100644 flexiapi/resources/views/account/login.blade.php create mode 100644 flexiapi/resources/views/account/password.blade.php diff --git a/flexiapi/app/Http/Controllers/AccountController.php b/flexiapi/app/Http/Controllers/AccountController.php index d0d1904..56c7bff 100644 --- a/flexiapi/app/Http/Controllers/AccountController.php +++ b/flexiapi/app/Http/Controllers/AccountController.php @@ -18,6 +18,17 @@ class AccountController extends Controller ]); } + public function login(Request $request) + { + return view('account.login'); + } + + public function logout(Request $request) + { + Auth::logout(); + return redirect()->route('account.login'); + } + public function authenticate(Request $request) { $request->validate([ @@ -34,8 +45,8 @@ class AccountController extends Controller // Try out the passwords foreach ($account->passwords as $password) { if (hash_equals( - $password->password, - Utils::bchash($username, $domain, $request->get('password'), $password->algorithm) + $password->password, + Utils::bchash($username, $domain, $request->get('password'), $password->algorithm) )) { Auth::login($account); return redirect()->route('account.index'); diff --git a/flexiapi/app/Http/Controllers/AccountEmailController.php b/flexiapi/app/Http/Controllers/AccountEmailController.php new file mode 100644 index 0000000..4ea5af8 --- /dev/null +++ b/flexiapi/app/Http/Controllers/AccountEmailController.php @@ -0,0 +1,29 @@ + $request->user() + ]); + } + + public function update(Request $request) + { + $request->validate([ + 'email' => 'required|email', + 'email_confirm' => 'required|same:email' + ]); + + $account = $request->user(); + $account->email = $request->get('email'); + $account->save(); + + return redirect()->route('account.index'); + } +} diff --git a/flexiapi/app/Http/Controllers/AccountPasswordController.php b/flexiapi/app/Http/Controllers/AccountPasswordController.php new file mode 100644 index 0000000..eadc74c --- /dev/null +++ b/flexiapi/app/Http/Controllers/AccountPasswordController.php @@ -0,0 +1,62 @@ + $request->user() + ]); + } + + public function update(Request $request) + { + $request->validate([ + 'password' => 'required|confirmed|min:6', + ]); + + $account = $request->user(); + $algorithm = $request->has('password_sha256') ? 'SHA-256' : 'MD5'; + + if ($account->passwords()->count() > 0) { + $request->validate(['old_password' => 'required']); + + foreach ($account->passwords as $password) { + // If one of the password stored equals the one entered + if (hash_equals( + $password->password, + 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()->back()->withErrors(['old_password' => 'Old password not correct']); + } else { + // No password yet + $this->updatePassword($account, $request->get('password'), $algorithm); + + return redirect()->back(); + } + } + + private function updatePassword(Account $account, $newPassword, $algorithm) + { + $account->passwords()->delete(); + + $password = new Password; + $password->account_id = $account->id; + $password->password = Utils::bchash($account->username, $account->domain, $newPassword, $algorithm); + $password->algorithm = $algorithm; + $password->save(); + } +} diff --git a/flexiapi/app/Http/Controllers/HomeController.php b/flexiapi/app/Http/Controllers/HomeController.php deleted file mode 100644 index d1c18b5..0000000 --- a/flexiapi/app/Http/Controllers/HomeController.php +++ /dev/null @@ -1,22 +0,0 @@ -route('home'); - } -} diff --git a/flexiapi/app/Http/Middleware/Authenticate.php b/flexiapi/app/Http/Middleware/Authenticate.php index 6beaee5..546d93d 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('home'); + return route('account.login'); } } } diff --git a/flexiapi/resources/views/account/email.blade.php b/flexiapi/resources/views/account/email.blade.php new file mode 100644 index 0000000..c35694b --- /dev/null +++ b/flexiapi/resources/views/account/email.blade.php @@ -0,0 +1,26 @@ +@extends('layouts.account') + +@section('content') + +

Change my account email address

+ +@if (!empty($account->email)) +

Currently: {{ $account->email }}

+@else +

No email yet

+@endif + +{!! Form::open(['route' => 'account.email.update']) !!} +
+ {!! Form::label('email', 'New email') !!} + {!! Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => 'username@server.com', 'required']) !!} +
+
+ {!! Form::label('email_confirmation', 'Email confirmation') !!} + {!! Form::email('email_confirmation', old('email_confirm'), ['class' => 'form-control', 'placeholder' => 'username@server.com', 'required']) !!} +
+ +{!! Form::submit('Change', ['class' => 'btn btn-primary float-right']) !!} +{!! Form::close() !!} + +@endsection \ No newline at end of file diff --git a/flexiapi/resources/views/account/index.blade.php b/flexiapi/resources/views/account/index.blade.php index 2a8486f..99ccf6f 100644 --- a/flexiapi/resources/views/account/index.blade.php +++ b/flexiapi/resources/views/account/index.blade.php @@ -1,5 +1,28 @@ @extends('layouts.account') @section('content') - {{ $account->identifier }} + +
+ +
+
Change my current account email
+
+ @if (!empty($account->email)) +

{{ $account->email }}

+ @else +

No email yet

+ @endif +
+ +
+
Change my password
+
+ @if ($account->passwords()->where('algorithm', 'SHA-256')->exists()) +

SHA-256 password configured

+ @else +

MD5 password only

+ @endif +
+
+ @endsection \ No newline at end of file diff --git a/flexiapi/resources/views/account/login.blade.php b/flexiapi/resources/views/account/login.blade.php new file mode 100644 index 0000000..55aa3c6 --- /dev/null +++ b/flexiapi/resources/views/account/login.blade.php @@ -0,0 +1,26 @@ +@extends('layouts.main') + +@section('content') + @if (Auth::check()) + + @else +
+
+ {!! Form::open(['route' => 'account.authenticate']) !!} +
+ {!! Form::label('username', 'Username') !!} + {!! Form::text('username', old('username'), ['class' => 'form-control', 'placeholder' => 'username@sip.linphone.org', 'required']) !!} +
+
+ {!! Form::label('password', 'Password') !!} + {!! Form::password('password', ['class' => 'form-control', 'placeholder' => 'myPassword', 'required']) !!} +
+ {!! Form::submit('Authenticate', ['class' => 'btn btn-primary']) !!} + {!! Form::close() !!} +
+
+ @endif +@endsection \ No newline at end of file diff --git a/flexiapi/resources/views/account/password.blade.php b/flexiapi/resources/views/account/password.blade.php new file mode 100644 index 0000000..21a62e5 --- /dev/null +++ b/flexiapi/resources/views/account/password.blade.php @@ -0,0 +1,30 @@ +@extends('layouts.account') + +@section('content') + +

Change my account password

+ +{!! Form::open(['route' => 'account.password.update']) !!} +@if ($account->passwords()->count() > 0) +
+ {!! Form::label('old_password', 'Old password') !!} + {!! Form::password('old_password', ['class' => 'form-control', 'required']) !!} +
+@endif +
+ {!! Form::label('password', 'New password') !!} + {!! Form::password('password', ['class' => 'form-control', 'required']) !!} +
+
+ {!! Form::label('password_confirmation', 'Password confirmation') !!} + {!! Form::password('password_confirmation', ['class' => 'form-control', 'required']) !!} +
+
+ {!! Form::checkbox('password_sha256', 'checked', $account->passwords()->where('algorithm', 'SHA-256')->exists(), ['class' => 'form-check-input']) !!} + {!! 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']) !!} +
+ +{!! Form::submit('Change', ['class' => 'btn btn-primary float-right']) !!} +{!! Form::close() !!} + +@endsection \ No newline at end of file diff --git a/flexiapi/resources/views/layouts/account.blade.php b/flexiapi/resources/views/layouts/account.blade.php index 4b039c9..f155f4d 100644 --- a/flexiapi/resources/views/layouts/account.blade.php +++ b/flexiapi/resources/views/layouts/account.blade.php @@ -1,19 +1,16 @@ @extends('layouts.base') @section('body') -