From 11ea08df8d4784aad4836852180098c45b90c5a2 Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Fri, 18 May 2018 23:06:40 +0200 Subject: Add invitation key deletion Signed-off-by: Florian Pritz --- application/controllers/User.php | 12 ++++++ application/service/user.php | 11 +++++ application/test/tests/test_service_user.php | 61 ++++++++++++++++++++++++++++ application/views/user/invite.php | 6 +++ 4 files changed, 90 insertions(+) create mode 100644 application/test/tests/test_service_user.php diff --git a/application/controllers/User.php b/application/controllers/User.php index a2ce5c823..26704f3e5 100644 --- a/application/controllers/User.php +++ b/application/controllers/User.php @@ -133,6 +133,18 @@ class User extends MY_Controller { redirect("user/invite"); } + function delete_invitation_key() + { + $this->duser->require_implemented("can_register_new_users"); + $this->muser->require_access(); + + $userid = $this->muser->get_userid(); + $key = $this->input->post("key"); + + \service\user::delete_invitation_key($userid, $key); + redirect("user/invite"); + } + function invite() { $this->duser->require_implemented("can_register_new_users"); diff --git a/application/service/user.php b/application/service/user.php index bb0c44599..f7dfa5799 100644 --- a/application/service/user.php +++ b/application/service/user.php @@ -103,4 +103,15 @@ class user { return $key; } + + static public function delete_invitation_key($userid, $key) { + $CI =& get_instance(); + + $CI->db + ->where('key', $key) + ->where('user', $userid) + ->delete('actions'); + + return $CI->db->affected_rows(); + } } diff --git a/application/test/tests/test_service_user.php b/application/test/tests/test_service_user.php new file mode 100644 index 000000000..4cbbdfac0 --- /dev/null +++ b/application/test/tests/test_service_user.php @@ -0,0 +1,61 @@ + + * + * Licensed under AGPLv3 + * (see COPYING for full license text) + * + */ + +namespace test\tests; + +class test_service_user extends \test\Test { + + public function __construct() { + parent::__construct(); + } + + public function init() { + } + + public function cleanup() { + } + + public function test_invitation_key_delete() { + $CI =& get_instance(); + + $userid = 1; + + $result = $CI->db->select('user, key, action')->from('actions')->get()->result_array(); + $this->t->is_deeply([], $result, "database contains no actions"); + + $key = \service\user::create_invitation_key($userid); + + $result = $CI->db->select('user, key, action')->from('actions')->get()->result_array(); + $this->t->is_deeply([['user' => "".$userid, 'key' => $key, 'action' => 'invitation']], $result, "database contains new key"); + + \service\user::delete_invitation_key($userid+1, $key); + $result = $CI->db->select('user, key, action')->from('actions')->get()->result_array(); + $this->t->is_deeply([['user' => "".$userid, 'key' => $key, 'action' => 'invitation']], $result, "database contains new key after incorrect deletion"); + + \service\user::delete_invitation_key($userid+1, "foobar-"); + $result = $CI->db->select('user, key, action')->from('actions')->get()->result_array(); + $this->t->is_deeply([['user' => "".$userid, 'key' => $key, 'action' => 'invitation']], $result, "database contains new key after incorrect deletion"); + + \service\user::delete_invitation_key($userid+1, ""); + $result = $CI->db->select('user, key, action')->from('actions')->get()->result_array(); + $this->t->is_deeply([['user' => "".$userid, 'key' => $key, 'action' => 'invitation']], $result, "database contains new key after incorrect deletion"); + + \service\user::delete_invitation_key($userid, ""); + $result = $CI->db->select('user, key, action')->from('actions')->get()->result_array(); + $this->t->is_deeply([['user' => "".$userid, 'key' => $key, 'action' => 'invitation']], $result, "database contains new key"); + + \service\user::delete_invitation_key($userid, $key); + + $result = $CI->db->select('user, key, action')->from('actions')->get()->result_array(); + $this->t->is_deeply([], $result, "key has been deleted"); + + } + +} + diff --git a/application/views/user/invite.php b/application/views/user/invite.php index d3e2fb7a6..042ba0b61 100644 --- a/application/views/user/invite.php +++ b/application/views/user/invite.php @@ -26,6 +26,12 @@ + + + + " /> + + -- cgit v1.2.3-24-g4f1b