aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--css/style.css2
-rw-r--r--loginregister.js1
-rw-r--r--php/.database.php.swpbin0 -> 16384 bytes
-rw-r--r--php/.node.php.swpbin0 -> 12288 bytes
-rw-r--r--php/.upload.php.swpbin0 -> 12288 bytes
-rw-r--r--php/configuration.php11
-rw-r--r--php/database.php150
-rw-r--r--php/node.php26
-rw-r--r--php/upload.php23
-rw-r--r--php/user.php2
-rw-r--r--sql/.fileshare.sql.swpbin0 -> 12288 bytes
-rw-r--r--sql/fileshare.sql59
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
new file mode 100644
index 0000000..eecacf9
--- /dev/null
+++ b/php/.database.php.swp
Binary files differ
diff --git a/php/.node.php.swp b/php/.node.php.swp
new file mode 100644
index 0000000..2046c2b
--- /dev/null
+++ b/php/.node.php.swp
Binary files differ
diff --git a/php/.upload.php.swp b/php/.upload.php.swp
new file mode 100644
index 0000000..e1fc62b
--- /dev/null
+++ b/php/.upload.php.swp
Binary files differ
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
new file mode 100644
index 0000000..963a386
--- /dev/null
+++ b/sql/.fileshare.sql.swp
Binary files differ
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)
);
+
+