From b096381aaf425921dc80952ad16fcfc2f0575efd Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 10 Aug 2018 17:44:28 +0200 Subject: [PATCH 1/6] less: adding contextual buttons. --- app/assets/less/components/button.less | 5 +++++ app/assets/less/variables.less | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/assets/less/components/button.less b/app/assets/less/components/button.less index 4d2e596..9f19980 100644 --- a/app/assets/less/components/button.less +++ b/app/assets/less/components/button.less @@ -45,6 +45,11 @@ .button-brand { .button-variant(@button-brand-color, @button-brand-bg); } .button-light { .button-variant(@text-light-color, @button-bg-color, @button-hover-color); } +.button-info { .button-variant(@button-info-color, @button-info-bg); } +.button-success { .button-variant(@button-success-color, @button-success-bg); } +.button-warning { .button-variant(@button-warning-color, @button-warning-bg); } +.button-danger { .button-variant(@button-danger-color, @button-danger-bg); } + .button-github { .button-variant(@button-github-color, @button-github-bg); } .button-gitlab { .button-variant(@button-gitlab-color, @button-gitlab-bg); } .button-google { .button-variant(@button-google-color, @button-google-bg); } diff --git a/app/assets/less/variables.less b/app/assets/less/variables.less index 0576ada..d4930f7 100644 --- a/app/assets/less/variables.less +++ b/app/assets/less/variables.less @@ -104,6 +104,16 @@ @button-brand-color: white; @button-brand-bg: @brand-color; +// State +@button-info-color: white; +@button-info-bg: @state-info-text; +@button-success-color: white; +@button-success-bg: @state-success-text; +@button-warning-color: white; +@button-warning-bg: @state-warning-text; +@button-danger-color: white; +@button-danger-bg: @state-danger-text; + // Company. @button-google-color: white; From aea09efddbc87d29baad552ba1ceaff0c3b6c262 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 10 Aug 2018 17:47:28 +0200 Subject: [PATCH 2/6] app/assets/less/vendor/bootstrap-framework.less: include modal code. --- app/assets/less/vendor/bootstrap-framework.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/less/vendor/bootstrap-framework.less b/app/assets/less/vendor/bootstrap-framework.less index 58d8446..93e7aac 100644 --- a/app/assets/less/vendor/bootstrap-framework.less +++ b/app/assets/less/vendor/bootstrap-framework.less @@ -30,7 +30,7 @@ @import (reference) "bootstrap/panels.less"; @import (reference) "bootstrap/wells.less"; @import "bootstrap/close.less"; -@import (reference) "bootstrap/modals.less"; +@import "bootstrap/modals.less"; @import (reference) "bootstrap/tooltip.less"; @import (reference) "bootstrap/popovers.less"; @import (reference) "bootstrap/carousel.less"; From 6ce456fff7e9e6a301f79adf4dd5b604ab74058f Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 10 Aug 2018 17:47:53 +0200 Subject: [PATCH 3/6] app/views/user/settings.volt: adding "Delete account" button. --- app/views/user/settings.volt | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/views/user/settings.volt b/app/views/user/settings.volt index ef5a814..c7c40df 100644 --- a/app/views/user/settings.volt +++ b/app/views/user/settings.volt @@ -71,8 +71,46 @@

{{ form.render('Save') }} + +
+ + + + From 0e7849e5f7207f9d46a5da1fc54d8a93b08c7e9c Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 10 Aug 2018 20:23:17 +0200 Subject: [PATCH 4/6] app/controllers/UserController.php: add deleteAction() --- app/controllers/UserController.php | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/app/controllers/UserController.php b/app/controllers/UserController.php index 3d4aab1..54973af 100644 --- a/app/controllers/UserController.php +++ b/app/controllers/UserController.php @@ -6,6 +6,7 @@ use App\Controller\ControllerBase, App\Form\UserSettings as UserSettingsForm, App\Model\Data\ActivityLog, App\Model\Data\PasswordLink, + App\Model\Data\User, SendGrid\Mail\Mail as SendGridMail; class UserController extends ControllerBase @@ -79,6 +80,37 @@ class UserController extends ControllerBase $this->view->form = $form; } + public function deleteAction() + { + $user = $this->_getAuth()->getUser(); + + if ($this->request->isPost()) { + $data = $this->request->getPost(); + } + + // Delete acc. + if (isset($data['deleteAcc'])) { + + if (strlen($user->getPassword()) > 0) { + if (!isset($data['currentpw']) || !$this->security->checkHash($data['currentpw'], $user->getPassword())) { + $this->flash->error('The password was not correct. Refusing to delete account.'); + $this->response->redirect('/settings'); + return; + } + } + + $user->setStatus(User::STATUS_DELETED); + $user->save(); + + // Logout the user. + $this->auth->clearIdentity(); + + $this->flash->success('The account was successfully removed.'); + } + + $this->response->redirect('/settings'); + } + /** * Activate a password. * From ecf38258f50efa7747acd5c8998cdd50c4b7e852 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 10 Aug 2018 20:30:59 +0200 Subject: [PATCH 5/6] app/models/Data/User.php: in findFirstByUsernameOrEmail() only select active users. --- app/models/Data/User.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/Data/User.php b/app/models/Data/User.php index fdeb5bf..425ec3e 100644 --- a/app/models/Data/User.php +++ b/app/models/Data/User.php @@ -281,8 +281,8 @@ class User extends Model static public function findFirstByUsernameOrEmail($value) { return self::findFirst([ - "email = :v: OR username = :v:", - "bind" => [ 'v' => $value ] + "(email = :v: OR username = :v:) AND status = :s:", + "bind" => [ 'v' => $value, 's' => self::STATUS_ACTIVE ] ]); } From a50f4604130bea4931f8cec8f79a2bf1e00f8300 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 10 Aug 2018 20:35:24 +0200 Subject: [PATCH 6/6] app/library/Auth.php: in loginOauth() activate deleted accounts. --- app/library/Auth.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/library/Auth.php b/app/library/Auth.php index 75c622b..aec9376 100644 --- a/app/library/Auth.php +++ b/app/library/Auth.php @@ -58,6 +58,13 @@ class Auth extends Component return $user->getMessages(); } } + // Here we activate the user. + // As for OAuth we perform registration if the user does not exist. + // We should therefore activate deleted accounts. + else if ($user->Status == User::STATUS_DELETED) { + $user->Status = User::STATUS_ACTIVE; + $user->save(); + } $this->setIdentity($user->getId());