diff --git a/app/Config/Database.php b/app/Config/Database.php index 388b1b03..1a43584f 100755 --- a/app/Config/Database.php +++ b/app/Config/Database.php @@ -45,6 +45,9 @@ class Database extends Config 'numberNative' => false, ]; + + public array $book_stack = []; + /** * This database connection is used when * running PHPUnit database tests. @@ -75,6 +78,29 @@ class Database extends Config { parent::__construct(); + // Initialize book_stack configuration with environment variables + $this->book_stack = [ + 'DSN' => '', + 'hostname' => getenv('bookStack_hostname'), + 'username' => getenv('bookStack_username'), + 'password' => getenv('bookStack_password'), + 'database' => getenv('bookStack_database'), + 'DBDriver' => 'MySQLi', + 'DBPrefix' => '', + 'pConnect' => false, + 'DBDebug' => true, + 'charset' => 'utf8', + 'DBCollat' => 'utf8_general_ci', + 'swapPre' => '', + 'encrypt' => false, + 'compress' => false, + 'strictOn' => false, + 'failover' => [], + 'port' => 3306, + 'foreignKeys' => true, + 'busyTimeout' => 1000, + ]; + // Ensure that we always set the database group to 'tests' if // we are currently running an automated test suite, so that // we don't overwrite live data on accident. @@ -82,4 +108,5 @@ class Database extends Config $this->defaultGroup = 'tests'; } } + } diff --git a/app/Controllers/RestAuthenticationController.php b/app/Controllers/RestAuthenticationController.php index 3fd13fce..b5c50536 100755 --- a/app/Controllers/RestAuthenticationController.php +++ b/app/Controllers/RestAuthenticationController.php @@ -508,21 +508,25 @@ class RestAuthenticationController extends AdminController // TokenController.php public function bookstackLoginToken() { - // $user = session()->get('user'); - // $secret = getenv('BOOKSTACK_TOKEN_SECRET'); - $user = 'staff@staff.com'; - $secret = '5a8c1e9b18e6a94f724f6a6b36b6f26d9eec0e4a15e88b6e3e2d5efad23a8f4f'; + $session = \Config\Services::session(); + $user_data = session()->get('userData'); + $user = $user_data->email; + $secret = getenv('bookstack.token'); + // $user = 'staff@staff.com'; + $name = $user_data->first_name ?? 'User'; $payload = [ 'email' => $user, - 'name' => 'Hi', - 'exp' => time() + 60 // expires in 1 minute + 'name' => $name, + 'exp' => time() + (60 * 60 * 24) // expires in 1 day ]; + // dd($payload); $token = base64_encode(json_encode($payload)); $signature = hash_hmac('sha256', $token, $secret); + $bookStackUrl = getenv('bookstack.baseURL'); - $url = 'https://localhost/PHP828APPS/manual/bookstack/public/autologin?token=' . urlencode($token) . '&sig=' . $signature; + $url = $bookStackUrl . urlencode($token) . '&sig=' . $signature; return redirect()->to($url); } diff --git a/app/Controllers/UserController.php b/app/Controllers/UserController.php index b9f5c34e..cc23a148 100755 --- a/app/Controllers/UserController.php +++ b/app/Controllers/UserController.php @@ -12,6 +12,7 @@ use App\Models\UserModel; use App\Models\RoleModel; use App\Models\TeamModel; use App\Models\UserTeamsModel; +use App\Helpers\BookStackUserHelper; class UserController extends AdminController @@ -21,6 +22,7 @@ class UserController extends AdminController protected $roleModel; protected $teamModel; protected $userTeamsModel; + protected $bookStack; public function __construct() { @@ -31,6 +33,7 @@ class UserController extends AdminController $this->roleModel = new RoleModel(); $this->teamModel = new TeamModel(); $this->userTeamsModel = new UserTeamsModel(); + $this->bookStack = new BookStackUserHelper(); } public function list() @@ -60,10 +63,17 @@ class UserController extends AdminController $userData['created_by'] = get_session_userid(); $temp_team = $userData['team']; unset($userData['team']); + $insert = $this->userModel->insert($userData); - if ($insert) { + $bookStackData = [ + 'name' => $userData['first_name'], + 'email' => $userData['email'], + + ]; + $this->bookStack->createEditUser($bookStackData); + if ($insert) { $teamData['user_id'] = $insert; foreach ($teams as $value) { $teamData['team_id'] = $value; @@ -137,10 +147,20 @@ class UserController extends AdminController unset($userData['csrf_test_name']); unset($userData['PrimaryKey']); + $existingData = $this->userModel->where('id',$id)->first();; + // Update data in the 'users' table based on the $id $userData['updated_by'] = get_session_userid(); $update = $this->userModel->where('id', $id)->set($userData)->update(); + $bookStackData = [ + 'name' => $userData['first_name'], + 'email' => $userData['email'], + ]; + + $this->bookStack->createEditUser($bookStackData,$existingData); + + if ($update) { if ($teams) { @@ -211,7 +231,11 @@ class UserController extends AdminController public function deactive($id = null) { $model = new UserModel(); + + $emailToDelete = $model->where('id', $id)->first(); $deactive = $model->where('id', $id)->set(['is_active' => 0])->update(); + + $this->bookStack->deleteUser($emailToDelete); if($deactive) { // $db = \Config\Database::connect(); diff --git a/app/Helpers/BookStackUserHelper.php b/app/Helpers/BookStackUserHelper.php new file mode 100644 index 00000000..c27386b2 --- /dev/null +++ b/app/Helpers/BookStackUserHelper.php @@ -0,0 +1,77 @@ +userModel = new BookStackUserModel(); + $this->roleModel = new BookStackRoleModel(); + } + + public function createEditUser($data,$preData = null) { + // This function will handle the creation or editing of a user + // It will check if the user already exists and update or create accordingly + // The $data parameter should contain all necessary user information + // For example: ['name' => 'johndoe', 'email' => 'johndoe@doe.com'] + + if (!empty($preData)) { + + $isExistingUser = $this->userModel->where('email', $preData['email'])->first(); + + if ($isExistingUser) { + $id = $isExistingUser['id']; + $update = $this->userModel->where('id', $id)->set($data)->update(); + return $update; + } + } + + $password = 'password'; + $hashedPassword = ['password' => password_hash($password, PASSWORD_DEFAULT)]; + + $slug = ['slug' => $this->createSlug($data['name'])]; + + // array_push($data,$hashedPassword,$slug); + + $data['password'] = $hashedPassword['password']; + $data['slug'] = $slug['slug']; + + // dd($data); + $this->userModel->insert($data); + $userId = $this->userModel->insertID(); + + if (!empty($userId)) { + + $roleData = [ + 'user_id' => $userId, + 'role_id' => 3 // 3 is the default role ID for viewers + ]; + + $this->roleModel->insert($roleData); + } + + + } + + protected function createSlug($string) { + return strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string))); + } + + public function deleteUser($data) { + + $isExistingUser = $this->userModel->where('email', $data['email'])->first(); + if ($isExistingUser) { + $id = $isExistingUser['id']; + $delete = $this->userModel->where('id', $id)->delete(); + $this->roleModel->where('user_id', $id)->delete(); + return $delete; + } + + } +} \ No newline at end of file diff --git a/app/Models/BookStackRoleModel.php b/app/Models/BookStackRoleModel.php new file mode 100644 index 00000000..a57256a9 --- /dev/null +++ b/app/Models/BookStackRoleModel.php @@ -0,0 +1,19 @@ +
  • - + 2 - App Content Management + App Content Mgmt
  • - +
  • + " class="waves-effect" target="_blank" rel="noopener noreferrer"> + + User Manual + +
  • diff --git a/writable/venbaehn_nhance_manual b/writable/venbaehn_nhance_manual new file mode 100644 index 00000000..e69de29b