diff options
-rw-r--r-- | css/style.css | 2 | ||||
-rw-r--r-- | loginregister.js | 1 | ||||
-rw-r--r-- | php/.database.php.swp | bin | 0 -> 16384 bytes | |||
-rw-r--r-- | php/.node.php.swp | bin | 0 -> 12288 bytes | |||
-rw-r--r-- | php/.upload.php.swp | bin | 0 -> 12288 bytes | |||
-rw-r--r-- | php/configuration.php | 11 | ||||
-rw-r--r-- | php/database.php | 150 | ||||
-rw-r--r-- | php/node.php | 26 | ||||
-rw-r--r-- | php/upload.php | 23 | ||||
-rw-r--r-- | php/user.php | 2 | ||||
-rw-r--r-- | sql/.fileshare.sql.swp | bin | 0 -> 12288 bytes | |||
-rw-r--r-- | sql/fileshare.sql | 59 |
12 files changed, 227 insertions, 47 deletions
diff --git a/css/style.css b/css/style.css index f37eed0..8073fe6 100644 --- a/css/style.css +++ b/css/style.css @@ -230,7 +230,7 @@ input[type=submit]:hover { z-index: -200; } -#loginform { +#signupform { display: none; } diff --git a/loginregister.js b/loginregister.js index cb87444..cb49607 100644 --- a/loginregister.js +++ b/loginregister.js @@ -37,7 +37,6 @@ update(); - function clear_hero_errors() { let errors = document.getElementsByClassName("hero_form_error"); diff --git a/php/.database.php.swp b/php/.database.php.swp Binary files differnew file mode 100644 index 0000000..eecacf9 --- /dev/null +++ b/php/.database.php.swp diff --git a/php/.node.php.swp b/php/.node.php.swp Binary files differnew file mode 100644 index 0000000..2046c2b --- /dev/null +++ b/php/.node.php.swp diff --git a/php/.upload.php.swp b/php/.upload.php.swp Binary files differnew file mode 100644 index 0000000..e1fc62b --- /dev/null +++ b/php/.upload.php.swp diff --git a/php/configuration.php b/php/configuration.php index a8a7a29..5510131 100644 --- a/php/configuration.php +++ b/php/configuration.php @@ -12,12 +12,13 @@ if (file_exists("/home/alex")) { $storage_root = "/home/alex/fileup_storage"; } else { - $database_name="adam"; - $database_username="adam"; - $database_password="asdfd"; - $database_location="127.0.0.1"; - $storage_root = "/home/adam/fileup_storage"; +$database_name="fileup_testing"; +$database_username="outsider"; +$database_password="parola123"; +$database_location="localhost"; + + $storage_root = "/tmp/fileup_storage"; } diff --git a/php/database.php b/php/database.php index f472cbf..cfef823 100644 --- a/php/database.php +++ b/php/database.php @@ -2,6 +2,7 @@ require_once "configuration.php"; require_once "user.php"; require_once "misc.php"; +require_once "node.php"; /*handles database stuff*/ class Database @@ -37,6 +38,7 @@ require_once "misc.php"; $ret->user_id=$hold["user_id"]; $ret->username=$hold["username"]; $ret->email_address=$hold["email"]; + $ret->current_directory=$hold["home_directory"]; return $ret; }else { @@ -71,6 +73,141 @@ require_once "misc.php"; return false; } } + function get_home_id($user_id) + { + $statement=$this->pdo->prepare("select home_directory + from users + where user_id=:id + "); + $statement->bindParam(':id',$user_id); + + $ret=$statement->execute(PDO::FETCH_ASSOC); + return $ret["home_directory"]; + } + function get_node_id($name,$directory_id) + { + $hold=NULL; + $statement=NULL; + $ret=[]; + if($name != NULL) + { + if($directory_id!=NULL) + { + $statement=$this->pdo->prepare( + "select nl.node_id as id from node_links nl + inner join nodes n on n.node_id=nl.node_id + where name=:name and directory_id=:directory_id)"); + $statement->bindParam(':name',$name); + $statement->bindParam(':directory_id',$directory_id); + }else + { + /*get all node_ids with the name name*/ + $statement=$this->pdo->prepare("select node_id as id from nodes where name=:name"); + $statement->bindParam(':name',$name); + } + if($statement==NULL) + { + error_log("statement is null"); + exit(1); + } + }else { + $statement=$this->pdo->prepare("select node_id as id from node_links where directory_id=:dir_id"); + $statement->bindParam(':dir_id',$directory_id); + } + if($statement->execute()==false) + { + error_log("there is an error in the sql statement in get_node_id"); + exit(1); + } + + while($hold=$statement->fetch(PDO::FETCH_ASSOC)) + { + print_r($hold); + array_push($ret,$hold["id"]); + } + return $ret; + + } + function get_random_node_name(string $prefix) + { + do{ + $proposal=uniqid($prefix,true); + }while($this->get_node_id($proposal,NULL)!=NULL); + return $proposal; + } + /*returns NULL if node doesn't exist*/ + /*if name is NULL return all node ids in the directory*/ + /*if directory is NULL return all node ids with the name name*/ + /*if both are null return NULL*/ + /*returns node id*/ + function create_dangling_directory(): int + { + $dir_name=$this->get_random_node_name(""); + global $storage_root; + + $prep=$this->pdo->prepare("insert into nodes(is_directory,relative_path,name) values(true,:root,:name)"); + $prep->bindParam(':name',$dir_name); + $prep->bindParam(':root',$storage_root); + if($prep->execute()==false) + { + error_log("tried to create a dangling directory but sql statement failed. Fatal error!"); + exit(1); + } + + $id=$this->get_node_id($dir_name,NULL); + if(count($id)!=1) + { + error_log("created a dangling directory but couldn't find it afterward. Fatal error!"); + exit(1); + } + + //print count($id); + return $id[0]; + } + /*returns the file name as it must be in the filesystem*/ + function create_file_node(string $filename): string + { + global $storage_root; + $code=get_random_node_name(""); + if($filename==NULL)return false; + $prep=$this->pdo->prepare("insert into nodes(is_directory,relative_path,name,code) + values(false,:root,:name,:code) + "); + $prep->bindParam(':name',$filename); + $prep->bindParam(':root',$storage_root); + + $prep->bindParam(':code',$code); + if($prep->execute()==false) + { + error_log("could not upload file"); + /*not so quiet error*/ + return "error"; + } + return code; + } + function are_linked(int $directory_id,int $node_id): bool + { + $prepare=$this->pdo->prepare("select node_id + from node_links + where node_id=:node_id and directory_id=:dir_id + "); + $prepare->bindParam(':node_id',$node_id); + $prepare->bindParam(':dir_id',$directory_id); + if($prepare->execute()==false) + { + error_log("there is an sql error in are_linked"); + /*quiet error*/ + return false; + } + if(count($prepare->fetch(PDO::FETCH_ASSOC))==1) + { + return true; + }else + { + return false; + } + } + /*returns false if username is taken, email is not checked here*/ function register_user(string $user,string $password,string $email) : bool { @@ -91,16 +228,23 @@ require_once "misc.php"; }else { $hashed_pass=password_hash($password,$password_hash_algo); - $prep=$this->pdo->prepare("insert into users(username,password,email) values(:username,:password,:email)"); + $home_dir=$this->create_dangling_directory(); + $prep=$this->pdo->prepare("insert into users(username,password,email,home_directory) values(:username,:password,:email,:dir)"); $prep->bindParam(':username',$user); $prep->bindParam(':password',$hashed_pass); $prep->bindParam(':email',$email); - $prep->execute(); + $prep->bindParam(':dir',$home_dir); + if($prep->execute()==false) + { + error_log("can't create user because there was an error in the sql statement"); + /*todo make an error page*/ + exit(1); + } } return true; } } } - +$database=new Database(); ?> diff --git a/php/node.php b/php/node.php new file mode 100644 index 0000000..b6c3428 --- /dev/null +++ b/php/node.php @@ -0,0 +1,26 @@ +<?php +require_once "database.php"; + + class Current_Directory + { + public $node_id; + /*an array of the dir_ids taken to reach here*/ + public $path; + + function __construct($user_id) + { + $this->dir_id=get_home_id($user_id); + $this->path=[$dir_id]; + } + function change_directory($directory_id):bool + { + global $database; + if(!$database->is_directory($directory_id)) + { + return false; + } + + } + } + +?> diff --git a/php/upload.php b/php/upload.php index d9110c7..bd72b6b 100644 --- a/php/upload.php +++ b/php/upload.php @@ -1,22 +1,21 @@ <?php +require_once "database.php" +require_once "configuration.php" -if (!array_key_exists('uf', $_FILES)) { +if (!isset( $_POST["filename") || !isset($_POST["the_file"]) +{ http_response_code(400); - exit(); + error_log("someone tried to upload something impropperly"); + exit(1); } -$file = $_FILES['uf']; +$file = $_POST["the_file"]; +$filename= $_POST["filename"]; -if (file['error'] != 0) { - http_response_code(400); - exit(); -} - -$m = md5_file($file['tmp_name']); - -copy($file['tmp_name'], "screen/$m.png"); +$codename=create_file_node($filename); -echo "http://india.fmi.fail/screen/$m.png"; +copy($file['tmp_name'], "$storage_root/$codename"); +echo $codename; ?> diff --git a/php/user.php b/php/user.php index 1ef3083..3cfcc89 100644 --- a/php/user.php +++ b/php/user.php @@ -1,10 +1,10 @@ <?php class User { - /*I don't think we need to abstract these away*/ public $user_id; public $username; public $email_address; + public $current_directory; } ?> diff --git a/sql/.fileshare.sql.swp b/sql/.fileshare.sql.swp Binary files differnew file mode 100644 index 0000000..963a386 --- /dev/null +++ b/sql/.fileshare.sql.swp diff --git a/sql/fileshare.sql b/sql/fileshare.sql index a079a7f..4cd748a 100644 --- a/sql/fileshare.sql +++ b/sql/fileshare.sql @@ -1,31 +1,42 @@ +create table nodes ( + node_id int not null auto_increment, + is_directory boolean default false, + relative_path varchar(500) not null, + type varchar(20) not null default 'data', + name varchar(100) not null default 'no name', + note varchar(200) not null default "", + code varchar(100) not null default "error", + primary key (node_id) +); + /*base user information*/ create table users ( - user_id int not null auto_increment, - username varchar(50) not null unique, - password varchar(255) not null, - email varchar(50), - primary key (user_id) + user_id int not null auto_increment, + username varchar(50) not null unique, + password varchar(255) not null, + email varchar(50), + home_directory int not null, + primary key (user_id), + foreign key (home_directory) references nodes(node_id) ); -/*table has only one owner and is identifyed by a number*/ -create table files ( - file_id int not null auto_increment, - owner_id int default null, - relative_path varchar(500) not null, - type varchar(20) not null default 'data', - primary key (file_id), - foreign key (owner_id) references users(user_id) +create table node_access ( + node_id int not null, + user_id int not null, + + can_view boolean not null default true, + can_edit boolean not null default false, + check (can_view=true or can_edit=true) , + foreign key (node_id) references nodes(node_id), + foreign key (user_id) references users(user_id) ); -/*the user with userid is given some kind of access to the file with fileid*/ -/*there is no edit bit because it will be too dificult to implement prehaps a change bit is in order (but not an edit bit)*/ -/*might be beneficial to even go full minimalist and remove the remove bit and only have the view bit*/ -create table access ( - file_id int not null, - user_id int not null, - can_view boolean not null default true, - can_remove boolean not null default false, - check (can_view=true or can_remove=true) , - foreign key (file_id) references files(file_id), - foreign key (user_id) references users(user_id) +create table node_links ( + directory_id int not null, + node_id int not null, + check (directory_id != node_id), + foreign key (directory_id) references nodes(node_id), + foreign key (node_id) references nodes(node_id) ); + + |