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 }}
+
+
+
@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())
+
+
Logout
+ You are already authenticated
+
+ @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')
-
+
diff --git a/flexiapi/routes/web.php b/flexiapi/routes/web.php
index 70a6ecd..485e1d8 100644
--- a/flexiapi/routes/web.php
+++ b/flexiapi/routes/web.php
@@ -17,11 +17,17 @@
along with this program. If not, see .
*/
-Route::get('/', 'HomeController@index')->name('home');
-Route::get('logout', 'HomeController@logout')->name('logout');
+//Route::get('/', 'HomeController@index')->name('home');
-Route::post('account/authenticate', 'AccountController@authenticate')->name('account.authenticate');
+Route::get('login', 'AccountController@login')->name('account.login');
+Route::post('authenticate', 'AccountController@authenticate')->name('account.authenticate');
Route::group(['middleware' => 'auth'], function () {
- Route::get('account', 'AccountController@index')->name('account.index');
+ Route::get('/', 'AccountController@index')->name('account.index');
+ Route::get('logout', 'AccountController@logout')->name('account.logout');
+
+ Route::get('email', 'AccountEmailController@show')->name('account.email');
+ Route::post('email', 'AccountEmailController@update')->name('account.email.update');
+ Route::get('password', 'AccountPasswordController@show')->name('account.password');
+ Route::post('password', 'AccountPasswordController@update')->name('account.password.update');
});
\ No newline at end of file