From 81338b1e65c4dd3f00edc58a4ab882b325a89bf9 Mon Sep 17 00:00:00 2001 From: xevidos Date: Sat, 9 Feb 2019 16:14:27 -0500 Subject: [PATCH] Changed $path to __DIR__ for config location, Updated auto reload variables, Removed unload listener for auto reload, Changed project default to array so that if no projects exist the program does not crash, Updated autosave to use let instead of vars, Fixed capitalization for sideExpanded variable, Added try catch to pdo initialization on install, Added more error checks on install, Removed password function on install query, Changed default settings array, Added loading div to user delete, Updated queries that threw errors when a default value was zero, Added blank username and password check, --- common.php | 4 +- components/autosave/init.js | 6 +- components/filemanager/init.js | 29 +++-- components/install/process.php | 150 ++++++++---------------- components/install/view.php | 2 +- components/project/class.project.php | 16 ++- components/project/controller.php | 7 +- components/project/init.js | 6 +- components/settings/class.settings.php | 18 +-- components/settings/dialog.php | 2 +- components/settings/settings.system.php | 2 +- components/sql/class.sql.php | 4 +- components/user/class.user.php | 64 ++++++++-- components/user/dialog.php | 1 + components/user/init.js | 2 +- 15 files changed, 156 insertions(+), 157 deletions(-) diff --git a/common.php b/common.php index f7036b9..63bb4bc 100755 --- a/common.php +++ b/common.php @@ -44,9 +44,9 @@ class Common { } } - if( file_exists( $path . 'config.php' ) ) { + if( file_exists( __DIR__ . '/config.php' ) ) { - require_once( $path . 'config.php' ); + require_once( __DIR__ . '/config.php' ); } if( ! defined( 'BASE_PATH' ) ) { diff --git a/components/autosave/init.js b/components/autosave/init.js index a6cfba9..d677483 100755 --- a/components/autosave/init.js +++ b/components/autosave/init.js @@ -151,7 +151,7 @@ if( content == _this.content ) { - var session = codiad.active.sessions[path]; + let session = codiad.active.sessions[path]; if( typeof session != 'undefined' ) { session.untainted = content; @@ -171,7 +171,7 @@ /* - _this code caused issues even though it is the proper way to save something. + this code caused issues even though it is the proper way to save something. Whenever in collaboration, the server constantly gave a wrong file version error. let path = codiad.active.getPath(); @@ -183,7 +183,7 @@ _this.content = content; codiad.active.save; codiad.filemanager.saveFile( path, content, localStorage.removeItem( path ), false ); - var session = codiad.active.sessions[path]; + let session = codiad.active.sessions[path]; if( typeof session != 'undefined' ) { session.untainted = content; diff --git a/components/filemanager/init.js b/components/filemanager/init.js index 09423cb..0271620 100755 --- a/components/filemanager/init.js +++ b/components/filemanager/init.js @@ -59,13 +59,13 @@ // Initialize node listener this.nodeListener(); - this.auto_reload = ( await codiad.settings.get_option( "codiad.filemanager.auto_reload_preview" ) == "true" ); + this.auto_reload = ( await codiad.settings.get_option( "codiad.filemanager.autoReloadPreview" ) == "true" ); console.log( this.auto_reload ); amplify.subscribe( 'settings.save', async function() { - let option = ( await codiad.settings.get_option( "codiad.filemanager.auto_reload_preview" ) == "true" ); + let option = ( await codiad.settings.get_option( "codiad.filemanager.autoReloadPreview" ) == "true" ); if( option != codiad.filemanager.auto_reload ) { //codiad.auto_save.reload_interval(); @@ -81,7 +81,6 @@ if( _this.auto_reload && editor !== null ) { - _this.preview.addEventListener( "beforeunload", _this.closePreview ); codiad.editor.getActive().addEventListener( "change", _this.refreshPreview ); } }); @@ -483,7 +482,6 @@ if( _this.auto_reload && editor !== null ) { - _this.preview.addEventListener( "beforeunload", _this.closePreview ); codiad.editor.getActive().addEventListener( "change", _this.refreshPreview ); } @@ -494,12 +492,6 @@ }); }, - closePreview: function( event ) { - - _this = codiad.filemanager; - _this.preview = null; - }, - refreshPreview: function( event ) { _this = codiad.filemanager; @@ -509,7 +501,22 @@ return; } - _this.preview.location.reload(); + try { + + if( ( typeof _this.preview.location.reload ) == "undefined" ) { + + _this.preview = null; + codiad.editor.getActive().removeEventListener( "change", _this.refreshPreview ); + return; + } + _this.preview.location.reload(); + } catch( e ) { + + console.log( e ); + codiad.message.error( 'Please close your previously opened preview window.' ); + _this.preview = null; + codiad.editor.getActive().removeEventListener( "change", _this.refreshPreview ); + } }, openInModal: function(path) { diff --git a/components/install/process.php b/components/install/process.php index 618014f..8b76484 100755 --- a/components/install/process.php +++ b/components/install/process.php @@ -94,43 +94,28 @@ if ( ! ( defined( "DBHOST" ) && defined( "DBNAME" ) && defined( "DBUSER" ) && de $dbuser = $_POST['dbuser']; $dbpass = $_POST['dbpass']; - $connection = new PDO( "{$dbtype}:host={$dbhost};dbname={$dbname}", $dbuser, $dbpass ); + try { + + $connection = new PDO( "{$dbtype}:host={$dbhost};dbname={$dbname}", $dbuser, $dbpass ); + } catch( exception $e ) { + + die( "Could not connect to database." ); + die(); + } $bind_vars = array(); $bind = ""; $sql = " --- phpMyAdmin SQL Dump --- version 4.6.6deb5 --- https://www.phpmyadmin.net/ --- --- Host: localhost:3306 --- Generation Time: Dec 11, 2018 at 05:31 PM --- Server version: 5.7.24-0ubuntu0.18.04.1 --- PHP Version: 7.2.10-0ubuntu0.18.04.1 - -SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'; -SET time_zone = '+00:00'; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- Database: code_test --- - --- -------------------------------------------------------- -- -- Table structure for table options -- CREATE TABLE IF NOT EXISTS options ( - id int(11) NOT NULL, + id int NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(255) NOT NULL, - value text NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; + value text NOT NULL, + CONSTRAINT option_name UNIQUE (name) +); -- -------------------------------------------------------- @@ -139,12 +124,13 @@ CREATE TABLE IF NOT EXISTS options ( -- CREATE TABLE IF NOT EXISTS projects ( - id int(11) NOT NULL, + id int NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(255) NOT NULL, path varchar(255) NOT NULL, owner varchar(255) NOT NULL, - access text -) ENGINE=InnoDB DEFAULT CHARSET=latin1; + access text, + CONSTRAINT project UNIQUE (path, owner) +); -- -------------------------------------------------------- @@ -153,7 +139,7 @@ CREATE TABLE IF NOT EXISTS projects ( -- CREATE TABLE IF NOT EXISTS users ( - id int(11) NOT NULL, + id int NOT NULL AUTO_INCREMENT PRIMARY KEY, first_name varchar(255) DEFAULT NULL, last_name varchar(255) DEFAULT NULL, username varchar(255) NOT NULL, @@ -162,79 +148,22 @@ CREATE TABLE IF NOT EXISTS users ( project varchar(255) DEFAULT NULL, access varchar(255) NOT NULL, groups text, - token text -) ENGINE=InnoDB DEFAULT CHARSET=latin1; + token text, + CONSTRAINT username UNIQUE (username) +); -- -- Table structure for table user_options -- CREATE TABLE IF NOT EXISTS user_options ( - id int(11) NOT NULL, + id int NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(255) NOT NULL, username varchar(255) NOT NULL, - value text NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; + value text NOT NULL, + CONSTRAINT option_name UNIQUE (name,username) +); --- --- Indexes for dumped tables --- - --- --- Indexes for table options --- -ALTER TABLE options - ADD PRIMARY KEY (id), - ADD UNIQUE KEY option_name (name); - --- --- Indexes for table projects --- -ALTER TABLE projects - ADD PRIMARY KEY (id), - ADD UNIQUE KEY project_path (path,owner); - --- --- Indexes for table users --- -ALTER TABLE users - ADD PRIMARY KEY (id), - ADD UNIQUE KEY username (username); - --- --- Indexes for table user_options --- -ALTER TABLE user_options - ADD PRIMARY KEY (id), - ADD UNIQUE KEY option_name (name,username); - --- --- AUTO_INCREMENT for dumped tables --- - --- --- AUTO_INCREMENT for table options --- -ALTER TABLE options - MODIFY id int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table projects --- -ALTER TABLE projects - MODIFY id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=41; --- --- AUTO_INCREMENT for table users --- -ALTER TABLE users - MODIFY id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=79; --- --- AUTO_INCREMENT for table user_options --- -ALTER TABLE user_options - MODIFY id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2541; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; "; try { @@ -242,8 +171,13 @@ ALTER TABLE user_options $result = $connection->exec($sql); } catch( PDOException $e ) { - echo $e->getMessage(); - die(); + die($e->getMessage()); + } + + $error = $connection->errorInfo(); + if( ! $error[0] == "00000" ) { + + die( $error[2] ); } ////////////////////////////////////////////////////////////////// @@ -281,7 +215,7 @@ ALTER TABLE user_options } } - $bind_vars = array( + $bind_variables = array( $project_name, $project_path, $username @@ -289,8 +223,14 @@ ALTER TABLE user_options $query = "INSERT INTO projects(name, path, owner) VALUES (?,?,?);"; $statement = $connection->prepare( $query ); $statement->execute( $bind_variables ); + $error = $statement->errorInfo(); - $bind_vars = array( + if( ! $error[0] == "00000" ) { + + die( $error[2] ); + } + + $bind_variables = array( "", "", $username, @@ -301,19 +241,23 @@ ALTER TABLE user_options "", "" ); - $query = "INSERT INTO users(first_name, last_name, username, password, email, project, access, groups, token) VALUES (?,?,?,PASSWORD(?),?,?,?,?,?)"; + $query = "INSERT INTO users(first_name, last_name, username, password, email, project, access, groups, token) VALUES (?,?,?,?,?,?,?,?,?)"; $statement = $connection->prepare( $query ); $statement->execute( $bind_variables ); + $error = $statement->errorInfo(); + if( ! $error[0] == "00000" ) { + + die( $error[2] ); + } - - + /** * Create sessions path. */ if ( ! is_dir( $sessions ) ) { - + mkdir( $sessions, 00755 ); } diff --git a/components/install/view.php b/components/install/view.php index a4c1bda..635a82d 100755 --- a/components/install/view.php +++ b/components/install/view.php @@ -345,7 +345,7 @@ if ($newrelic) { if(data=='success'){ window.location.reload(); }else{ - alert("An Error Occoured

"+data); + alert("An Error Occoured\n"+data); } }); } diff --git a/components/project/class.project.php b/components/project/class.project.php index a6d3d14..90bf48b 100755 --- a/components/project/class.project.php +++ b/components/project/class.project.php @@ -18,7 +18,7 @@ class Project extends Common { public $path = ''; public $gitrepo = false; public $gitbranch = ''; - public $projects = ''; + public $projects = array(); public $no_return = false; public $assigned = false; public $command_exec = ''; @@ -58,12 +58,9 @@ class Project extends Common { $bind_variables = array( $project_name, $project_path, $owner ); $return = $sql->query( $query, $bind_variables, 0, "rowCount" ); - if( $return > 0 ) { + if( ! ( $return > 0 ) ) { - formatJSEND( "success", "Created project $project_name" ); - } else { - - formatJSEND( "error", "Error creating project $project_name" ); + exit( formatJSEND( "error", "Error creating project $project_name" ) ); } } @@ -377,6 +374,13 @@ class Project extends Common { if( ! $this->public_project && ! $this->isAbsPath( $this->path ) ) { + $user_path = WORKSPACE . '/' . preg_replace( '/[^\w-]/', '', strtolower( $_SESSION["user"] ) ); + + if( ! is_dir( $user_path ) ) { + + mkdir( $user_path, 0755, true ); + } + $this->path = $_SESSION["user"] . '/' . $this->path; } diff --git a/components/project/controller.php b/components/project/controller.php index f87aa0a..0af8186 100755 --- a/components/project/controller.php +++ b/components/project/controller.php @@ -6,7 +6,6 @@ * [root]/license.txt for more. This information must remain intact. */ - require_once('../../common.php'); require_once('./class.project.php'); @@ -19,6 +18,12 @@ checkSession(); $Project = new Project(); $Project->projects = $Project->get_projects(); +if( ! is_array( $Project->projects ) ) { + + $Project->projects = array(); +} + + if( $_GET['action'] == 'add_user' ) { $invalid_users = array( diff --git a/components/project/init.js b/components/project/init.js index e396251..9516ad0 100755 --- a/components/project/init.js +++ b/components/project/init.js @@ -275,7 +275,7 @@ ////////////////////////////////////////////////////////////////// loadSide: async function() { - this._sideExpanded = ( await codiad.settings.get_option( "codiad.projects.SideExpaned" ) == "true" ); + this._sideExpanded = ( await codiad.settings.get_option( "codiad.projects.sideExpanded" ) == "true" ); $( '.sb-projects-content' ).load( this.dialog + '?action=sidelist&trigger='+ await codiad.settings.get_option( 'codiad.editor.fileManagerTrigger' ) ); if ( ! this._sideExpanded ) { @@ -323,7 +323,7 @@ projectsExpand: function() { this._sideExpanded = true; - codiad.settings.update_option( 'codiad.projects.SideExpaned', this._sideExpanded ); + codiad.settings.update_option( 'codiad.projects.sideExpanded', this._sideExpanded ); $( '#side-projects' ).css( 'height', 276 + 'px' ); $( '.project-list-title' ).css( 'right', 0 ); $( '.sb-left-content' ).css( 'bottom', 276 + 'px' ); @@ -335,7 +335,7 @@ projectsCollapse: function() { this._sideExpanded = false; - codiad.settings.update_option( 'codiad.projects.SideExpaned', this._sideExpanded ); + codiad.settings.update_option( 'codiad.projects.sideExpanded', this._sideExpanded ); $( '#side-projects' ).css( 'height', 33 + 'px' ); $( '.project-list-title' ).css( 'right', 0 ); $( '.sb-left-content' ).css( 'bottom', 33 + 'px' ); diff --git a/components/settings/class.settings.php b/components/settings/class.settings.php index e0bf46a..57b423b 100755 --- a/components/settings/class.settings.php +++ b/components/settings/class.settings.php @@ -11,10 +11,6 @@ class Settings { const DEFAULT_OPTIONS = array( array( "name" => "codiad.editor.autocomplete", - "value" => "false", - ), - array( - "name" => "codiad.editor.autosave", "value" => "true", ), array( @@ -67,14 +63,18 @@ class Settings { ), array( "name" => "codiad.editor.wrapMode", - "value" => "false", - ), - array( - "name" => "codiad.settings.autosave", "value" => "true", ), array( - "name" => "codiad.settings.plugin.sync", + "name" => "codiad.filemanager.autoReloadPreview", + "value" => "true", + ), + array( + "name" => "codiad.projects.sideExpanded", + "value" => "true", + ), + array( + "name" => "codiad.settings.autosave", "value" => "true", ), array( diff --git a/components/settings/dialog.php b/components/settings/dialog.php index 942dc05..a9c0d56 100755 --- a/components/settings/dialog.php +++ b/components/settings/dialog.php @@ -140,7 +140,7 @@ case "codiad.settings.autosave": var bool_val = (val == "true"); break; - case "codiad.filemanager.auto_reload_preview": + case "codiad.filemanager.autoReloadPreview": var bool_val = (val == "true"); break; } diff --git a/components/settings/settings.system.php b/components/settings/settings.system.php index b4b1a73..b37cdcb 100755 --- a/components/settings/settings.system.php +++ b/components/settings/settings.system.php @@ -17,7 +17,7 @@ - diff --git a/components/sql/class.sql.php b/components/sql/class.sql.php index ddc0edb..ea1d7d8 100755 --- a/components/sql/class.sql.php +++ b/components/sql/class.sql.php @@ -92,10 +92,10 @@ class sql { } $error = $statement->errorInfo(); - if( ! $error[0] == "00000" ) { - echo var_export( $return, $error ); + echo var_export( $error ); + echo var_export( $return ); $return = $default; } diff --git a/components/user/class.user.php b/components/user/class.user.php index 654acd9..6904263 100755 --- a/components/user/class.user.php +++ b/components/user/class.user.php @@ -61,24 +61,40 @@ class User { global $sql; $query = "DELETE FROM user_options WHERE username=?;"; $bind_variables = array( $this->username ); - $return = $sql->query( $query, $bind_variables, 0, "rowCount" ); - - if( $return > 0 ) { + $return = $sql->query( $query, $bind_variables, -1, "rowCount" ); + if( $return > -1 ) { - $query = "DELETE FROM users WHERE username=?;"; - $bind_variables = array( $this->username ); - $return = $sql->query( $query, $bind_variables, 0, "rowCount" ); + $query = "DELETE FROM projects WHERE owner=? AND access IN ( ?,?,?,?,? );"; + $bind_variables = array( + $this->username, + "null", + null, + "[]", + "", + json_encode( array( $this->username ) ) + ); + $return = $sql->query( $query, $bind_variables, -1, "rowCount" ); - if( $return > 0 ) { + if( $return > -1 ) { - echo formatJSEND( "success", null ); + $query = "DELETE FROM users WHERE username=?;"; + $bind_variables = array( $this->username ); + $return = $sql->query( $query, $bind_variables, 0, "rowCount" ); + + if( $return > 0 ) { + + echo formatJSEND( "success", null ); + } else { + + echo formatJSEND( "error", "Error deleting user information." ); + } } else { - echo formatJSEND( "error", "Error deleting user information." ); + echo formatJSEND( "error", "Error deleting user project information." ); } } else { - echo formatJSEND( "error", "Error deleting user information." ); + echo formatJSEND( "error", "Error deleting user option information." ); } } @@ -116,11 +132,27 @@ class User { public function set_default_options() { - $Settings = new Settings(); - $Settings->username = $this->username; foreach( Settings::DEFAULT_OPTIONS as $id => $option ) { - $Settings->update_option( $option["name"], $option["value"], true ); + global $sql; + $query = "INSERT INTO user_options ( name, username, value ) VALUES ( ?, ?, ? );"; + $bind_variables = array( + $option["name"], + $this->username, + $option["value"], + ); + $result = $sql->query( $query, $bind_variables, 0, "rowCount" ); + + if( $result == 0 ) { + + $query = "UPDATE user_options SET value=? WHERE name=? AND username=?;"; + $bind_variables = array( + $option["value"], + $option["name"], + $this->username, + ); + $result = $sql->query( $query, $bind_variables, 0, "rowCount" ); + } } } @@ -130,6 +162,12 @@ class User { public function Authenticate() { + if( $this->username == "" || $this->password == "" ) { + + echo( formatJSEND( "error", "Username or password can not be blank." ) ); + return; + } + if( ! is_dir( SESSIONS_PATH ) ) { mkdir( SESSIONS_PATH, 00755 ); diff --git a/components/user/dialog.php b/components/user/dialog.php index 83ecfc0..d69160d 100755 --- a/components/user/dialog.php +++ b/components/user/dialog.php @@ -107,6 +107,7 @@
 
+