From e3d1e54bd5b5ce8e2a843101caf1ef39c6685262 Mon Sep 17 00:00:00 2001
From: "romain.gabet.etu" <romain.gabet.etu@univ-lille.fr>
Date: Sat, 27 Mar 2021 19:34:54 +0100
Subject: [PATCH] site web ok

---
 webserver/.client.c.swp                       | Bin 1024 -> 1024 bytes
 .../{.document.txt.swp => .client.c.swp.save} | Bin 1024 -> 782 bytes
 webserver/.nano.swp                           | Bin 1024 -> 0 bytes
 .../{..client.c.swp.swp => .socket.c.swp}     | Bin 1024 -> 1024 bytes
 webserver/.test.swp                           | Bin 1024 -> 0 bytes
 webserver/client.c                            |  41 ++---
 webserver/client.c.save                       | 160 ++++++++++++++++++
 webserver/client.c.save.1                     | 144 ++++++++++++++++
 webserver/client.o                            | Bin 17056 -> 16704 bytes
 webserver/html/index.html                     |  34 ++++
 webserver/pawnee                              | Bin 32744 -> 32768 bytes
 webserver/socket.c                            |   2 +-
 webserver/socket.o                            | Bin 9960 -> 10048 bytes
 webserver/test/document.txt                   |   3 -
 14 files changed, 360 insertions(+), 24 deletions(-)
 rename webserver/{.document.txt.swp => .client.c.swp.save} (75%)
 delete mode 100644 webserver/.nano.swp
 rename webserver/{..client.c.swp.swp => .socket.c.swp} (87%)
 delete mode 100644 webserver/.test.swp
 create mode 100644 webserver/client.c.save
 create mode 100644 webserver/client.c.save.1
 create mode 100644 webserver/html/index.html
 delete mode 100644 webserver/test/document.txt

diff --git a/webserver/.client.c.swp b/webserver/.client.c.swp
index 89bfb748a7ce25b0d9b9abd494ac610f6ec1825b..1aad83d5cbf6b3e4aac257f4777c24d68b7d3ebf 100644
GIT binary patch
delta 19
acmZqRXyBM2!IUj9Q7UNT+#u$O2b=&obp~kw

delta 84
zcmZqRXyBM2!Ss}SqEwKfenx(7s(yN6Qff(&zEf#YYGSE=Kv8~rd~s!Qd}5h?u8E<6
aVX}UCYEp4(QCVt{{>GdjX2DPfGynjX0vB@t

diff --git a/webserver/.document.txt.swp b/webserver/.client.c.swp.save
similarity index 75%
rename from webserver/.document.txt.swp
rename to webserver/.client.c.swp.save
index 54dd4c4c00b2fab3b7db91a173d9677d338c3341..b86799163a6af268ebb63ebcfd0034b947390d31 100644
GIT binary patch
delta 10
RcmZqR=wsX1z{||Y1ppA+0%-sM

literal 1024
zcmYc?$V<%2S1{HyVn6{=Tnr59iAkv?MJU2pImD_<$xklLP0cIOE2${KYS5_QXb6mk
I09``>0D40WEdT%j

diff --git a/webserver/.nano.swp b/webserver/.nano.swp
deleted file mode 100644
index 9a0a707f9ff6e8d7a6a754ec740646d767a2cf9a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1024
ycmYc?$V<%2S1{HyVn6}&IT;wz6O&R)ico~Ha)?z2vI(mJqk^L$Fd6~_5&{7CQVK8t

diff --git a/webserver/..client.c.swp.swp b/webserver/.socket.c.swp
similarity index 87%
rename from webserver/..client.c.swp.swp
rename to webserver/.socket.c.swp
index 17b95d71f499cd101e051c580b8489881decd84e..76d211972c3b571d46420700438a25d4eb1132d5 100644
GIT binary patch
delta 32
ocmZqRXyBM2!IUd7QL34vI6pZ%wL~v@<3>B?i3vQD-!lsW0H=rwz5oCK

delta 37
tcmZqRXyBM2!KBJIQL33&FF7YOHLpZ3S+BUfVB<zR=7|aHlixE70szx~3>W|a

diff --git a/webserver/.test.swp b/webserver/.test.swp
deleted file mode 100644
index c5d593cd0bd14f5f57bd4022477ae4ae6a0cdb52..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1024
zcmYc?$V<%2S1{HyVn6|V*ccen6O&R)ico~Ha)?!@pOK%Nst-}E?^IfpnpmnIP?Vn@
wUtC!npID}!Yhq|%n5<u(npB)xRF+z#Uy@o}g4M=R!O;*H4FNJjAQW8>06D%KbpQYW

diff --git a/webserver/client.c b/webserver/client.c
index f0d43e8..57fb9fa 100644
--- a/webserver/client.c
+++ b/webserver/client.c
@@ -50,7 +50,7 @@ FILE* check_and_open(const char* target, const char *document_root){
 
 char* rewrite_target(char *target){
 	char* ret = strrchr(target, '?');
-	printf("rewrite target ret : %s\n",ret);
+//	printf("rewrite target ret : %s\n",ret);
 	if(ret != NULL){
 		char* rep = malloc(strlen(target)*sizeof(char));
 		size_t i = (int)(strlen(target)-strlen(ret));
@@ -58,8 +58,8 @@ char* rewrite_target(char *target){
 		return rep;
 	}else{
 		char* rep = malloc(strlen(target)*sizeof(char));
-                size_t i = (int)(strlen(target));
-                rep = strncpy(rep,target+1,i);
+               	size_t i = (int)(strlen(target));
+               	rep = strncpy(rep,target+1,i);
 		return rep;
 	}
 }
@@ -110,7 +110,7 @@ void send_response(FILE *client, int code, const char *reason_phrase, const char
 
 int traitementClient(int socket_client){
 	/* On peut maintenant dialoguer avec le client */
-	char *motd="Votre requète est bonne";
+//	char *motd="Votre requète est bonne";
 	printf("test\n");
 	char str[8000];
 	http_request request;
@@ -130,28 +130,29 @@ int traitementClient(int socket_client){
 		}else{
 			send_response(fd, 400, "Bad Request", "Bad request");
 		}
-	}else if (strcmp(request.target, "/") == 0){
-		send_response(fd, 200, "OK", motd);
+	}else if (strcmp(request.target, "/html") == 0){
+		//send_response(fd, 200, "OK", motd);
 	//---
+        	char* absolute_path = rewrite_target(request.target);
+//		printf("test - - -  - - - - - %s\n",absolute_path);
+    		FILE* fichier = check_and_open(absolute_path, "index.html");
+    		if(fichier == NULL){
+                	send_response(fd, 404, "Not Found", "Not Found");
+        	}else{
+        		int size = get_file_size(fileno(fichier));
+        		send_status(fd, 200, "OK");
+			    fprintf(fd,"Content-Lenght : %d\r\n\r\n",size);
+           		if(copy(fichier,fd)==-1){
+                		//error
+        		}
+		}
+
 	}else{
 		send_response(fd, 404, "Not Found", "Not Found");
 	}
 	fflush(fd);
 	//partie 7
-	char* absolute_path = rewrite_target(request.target);
-	printf("test - - -  - - - - - %s\n",absolute_path);
-
-	FILE* fichier = check_and_open(absolute_path, "document.txt");
-	fprintf(fd,"fichier : \n");
-        if(fichier == NULL){
-                send_response(fd, 404, "Not Found2", "Not Found2");
-        }else{
-        	int size = get_file_size(fileno(fichier));
-        	if(copy(fichier,fd)==-1){
-                //error
-        	}
-		fprintf(fd,"Size : %d\n",size);
-	}
+	
 	fclose(fd);
     	return 0;
 }
diff --git a/webserver/client.c.save b/webserver/client.c.save
new file mode 100644
index 0000000..014916e
--- /dev/null
+++ b/webserver/client.c.save
@@ -0,0 +1,160 @@
+#include <string.h>
+#include <unistd.h>
+#include <stdio.h>
+#include "socket.h"
+#include <netinet/in.h>
+#include <sys/wait.h>
+#include <stdlib.h>
+#include "client.h"
+#include "http_parse.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+
+int copy(FILE* in, FILE* out){
+	int ch;
+	if(in && out){
+		ch = fgetc(in);
+		while(ch != EOF ){
+			fputc(ch,out);
+			ch=fgetc(in);
+		}
+	}else{
+	//error reading
+		exit(1);
+	}
+	return 0;
+}
+int get_file_size(int fd){
+	struct stat sb;
+	if(fstat(fd,&sb)==-1){
+		perror("stat");
+		exit(1);
+	}
+	return sb.st_size;
+	return 0;
+}
+
+FILE* check_and_open(const char* target, const char *document_root){
+	printf("check and open test\n");
+	char tmp[300]="";
+	strcat(tmp,target);
+	strcat(tmp,"/");
+	strcat(tmp,document_root);
+
+	printf("testons");
+	printf("check and open tmp : %s/%s \n tmp : %s \n",target,document_root,tmp);
+	return fopen(tmp,"r");
+}
+
+char* rewrite_target(char *target){
+	char* ret = strrchr(target, '?');
+//	printf("rewrite target ret : %s\n",ret);
+	if(ret != NULL){
+		char* rep = malloc(strlen(target)*sizeof(char));
+		size_t i = (int)(strlen(target)-strlen(ret));
+		rep = strncpy(rep,target+1,i-1);
+		return rep;
+	}else{
+		char* rep = malloc(strlen(target)*sizeof(char));
+               	size_t i = (int)(strlen(target));
+               	rep = strncpy(rep,target+1,i);
+		return rep;
+	}
+}
+
+
+char* fgets_or_exit(char * buffer, int size, FILE *fd){
+        char * ret = fgets(buffer,size,fd);
+        if(ret){
+                return ret;
+        } else {
+                exit(1);
+        }
+}
+
+
+
+int is_crlf(const char *str){
+	return (str[0] == '\r' && str[1] == '\n') || str[0] =='\n';
+}
+
+
+void skip_headers(FILE *client){
+	//passer les headers files
+	char buffer[8000];
+	while(1){
+		fgets_or_exit(buffer, sizeof(buffer), client);
+		if (is_crlf(buffer))
+		break;
+	}
+}
+
+
+void send_status(FILE *client, int code, const char *reason_phrase){
+	//transmet le status au client (1ère ligne)
+	fprintf(client, "HTTP/1.1 %d %s\r\n",code,reason_phrase);
+}
+
+void send_response(FILE *client, int code, const char *reason_phrase, const char *message_body){
+	send_status(client,code,reason_phrase);
+	//transmet la réponse complète (la suite)
+	fprintf(client,"Content-Lenght: %u\r\n",(unsigned int)strlen(message_body));
+	fprintf(client,"\r\n");
+	fprintf(client,"%s\r\n",message_body);
+	fflush(client);
+}
+
+
+
+int traitementClient(int socket_client){
+	/* On peut maintenant dialoguer avec le client */
+	char *motd="Votre requète est bonne";
+	printf("test\n");
+	char str[8000];
+	http_request request;
+	FILE *fd;
+	fd = fdopen(socket_client, "a+");
+	if(fd == NULL) {
+		perror("Error opening file\n");
+		exit(1);
+	}
+    //fprintf(fd,"pas d'erreurs d'ouverture\n");
+	fgets_or_exit(str,8000,fd);
+	int parse_ret = parse_http_request(str,&request);
+	skip_headers(fd);
+	if (parse_ret == -1) {
+		if (request.method == HTTP_UNSUPPORTED){
+			send_response(fd, 405, "Method Not Allowed", "Method Not Allowed");
+		}else{
+			send_response(fd, 400, "Bad Request", "Bad request");
+		}
+	}else if (strcmp(request.target, "/html") == 0){
+		send_response(fd, 200, "OK", motd);
+	//---
+
+
+
+	}else{
+		send_response(fd, 404, "Not Found", "Not Found");
+	}
+	fflush(fd);
+	//partie 7
+	char* absolute_path = rewrite_target(request.target);
+	printf("test - - -  - - - - - %s\n",absolute_path);
+
+	FILE* fichier = check_and_open(absolute_path, "index.html");
+//	fprintf(fd,"fichier : \n");
+        if(fichier == NULL){
+                send_response(fd, 404, "Not Found2", "Not Found2");
+        }else{
+        	int size = get_file_size(fileno(fichier));
+        	if(copy(fichier,fd)==-1){
+                //error
+        	}
+		//fprintf(fd,"Size : %d\n",size);
+	}
+	fclose(fd);
+    	return 0;
+}
diff --git a/webserver/client.c.save.1 b/webserver/client.c.save.1
new file mode 100644
index 0000000..b23f9b1
--- /dev/null
+++ b/webserver/client.c.save.1
@@ -0,0 +1,144 @@
+#include <string.h>
+#include <unistd.h>
+#include <stdio.h>
+#include "socket.h"
+#include <netinet/in.h>
+#include <sys/wait.h>
+#include <stdlib.h>
+#include "client.h"
+#include "http_parse.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+
+int copy(FILE* in, FILE* out){
+	int ch;
+	if(in && out){
+		while((ch =( fgetc(in))!= EOF) ){
+			fputc(ch,out);
+		}
+	}else{
+	//error reading
+		exit(1);
+	}
+	return 0;
+}
+int get_file_size(int fd){
+	struct stat sb;
+	if(fstat(fd,&sb)==-1){
+		perror("stat");
+		exit(1);
+	}
+	return sb.st_size;
+	return 0;
+}
+
+FILE* check_and_open(const char* target, const char *document_root){
+	char*tmp="";
+	strcat(tmp,target);
+	strcat(tmp,document_root);
+	strcat(tmp,"\n");
+	return fopen(tmp,"r");
+}
+
+char* rewrite_target(char *target){
+	char* ret = strrchr(target, '?');
+	char* rep = malloc(strlen(target)*sizeof(char));
+    if (ret!= NULL){
+        size_t i = (int)(strlen(target)-strlen(ret));
+	    rep = strncpy(rep,target,i);
+    }
+	return rep;
+}
+
+
+char* fgets_or_exit(char * buffer, int size, FILE *fd){
+        char * ret = fgets(buffer,size,fd);
+        if(ret){
+                return ret;
+        } else {
+                exit(1);
+        }
+}
+
+
+
+int is_crlf(const char *str){
+	return (str[0] == '\r' && str[1] == '\n') || str[0] =='\n';
+}
+
+
+void skip_headers(FILE *client){
+	//passer les headers files
+	char buffer[8000];
+	while(1){
+		fgets_or_exit(buffer, sizeof(buffer), client);
+		if (is_crlf(buffer))
+		break;
+	}
+}
+
+
+void send_status(FILE *client, int code, const char *reason_phrase){
+	//transmet le status au client (1ère ligne)
+	fprintf(client, "HTTP/1.1 %d %s\r\n",code,reason_phrase);
+}
+
+void send_response(FILE *client, int code, const char *reason_phrase, const char *message_body){
+	send_status(client,code,reason_phrase);
+	//transmet la réponse complète (la suite)
+	fprintf(client,"Content-Lenght: %u\r\n",(unsigned int)strlen(message_body));
+	fprintf(client,"\r\n");
+	fprintf(client,"%s\r\n",message_body);
+	fflush(client);
+}
+
+
+
+int traitementClient(int socket_client){
+	/* On peut maintenant dialoguer avec le client */
+	char *motd="Votre requète est bonne";
+	printf("test\n");
+	char str[8000];
+	http_request request;
+	FILE *fd;
+	fd = fdopen(socket_client, "a+");
+	if(fd == NULL) {
+		perror("Error opening file\n");
+		exit(1);
+	}
+    //fprintf(fd,"pas d'erreurs d'ouverture\n");
+	fgets_or_exit(str,8000,fd);
+	int parse_ret = parse_http_request(str,&request);
+	skip_headers(fd);
+	if (parse_ret == -1) {
+		if (request.method == HTTP_UNSUPPORTED){
+			send_response(fd, 405, "Method Not Allowed", "Method Not Allowed");
+		}else{
+			send_response(fd, 400, "Bad Request", "Bad request");
+		}
+	}else if (strcmp(request.target, "/") == 0){
+		send_response(fd, 200, "OK", motd);
+	//---
+	}else{
+		send_response(fd, 404, "Not Found", "Not Found");
+	}
+	//fflush(fd);
+	//partie 7
+	char* absolute_path = rewrite_target(request.target);
+	printf("test - - -  - - - - - %s\n",absolute_path);
+
+	FILE* fichier = check_and_open(absolute_path, "document.txt");
+        if(fichier == NULL){
+                send_response(fd, 404, "Not Found", "Not Found");
+        }
+        int size = get_file_size(fileno(fichier));
+        if(copy(fichier,fd)==-1){
+                //error
+        }
+	fprintf(fd,"Size : %d\n",size);
+
+	fclose(fd);
+    return 0;
+}
diff --git a/webserver/client.o b/webserver/client.o
index 7c8cbca5fa3bfa1170d9f816730c56282f35a0f3..88b2369c111e19c7d878762d520d6a8990874f8a 100644
GIT binary patch
delta 3664
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
BzJLG#

delta 4048
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

diff --git a/webserver/html/index.html b/webserver/html/index.html
new file mode 100644
index 0000000..8c33582
--- /dev/null
+++ b/webserver/html/index.html
@@ -0,0 +1,34 @@
+<html>
+<head>
+<title>       </title>
+<style type="text/css">
+<!--
+h1	{text-align:center;
+	font-family:Arial, Helvetica, Sans-Serif;
+	}
+
+p	{text-indent:20px;
+	}
+-->
+</style>
+</head>
+<body bgcolor = "#ffffcc" text = "#000000">
+<h1>Hello, World!</h1>
+
+<p>You can modify the text in the box to the left any way you like, and
+then click the "Show Page" button below the box to display the
+result here. Go ahead and do this as often and as long as you like.</p>
+
+<p>You can also use this page to test your Javascript functions and local
+style declarations. Everything you do will be handled entirely by your own
+browser; nothing you type into the text box will be sent back to the
+server.</p>
+
+<p>When you are satisfied with your page, you can select all text in the
+textarea and copy it to a new text file, with an extension of
+either <b>.htm</b> or <b>.html</b>, depending on your Operating System.
+This file can then be moved to your Web server.</p>
+
+</body>
+</html>
+	
diff --git a/webserver/pawnee b/webserver/pawnee
index 64b0a4f448da27deb176f20f2ac22a8016a27c44..7898a0eeef236ff65f4a0899df1707b396d61081 100755
GIT binary patch
delta 9746
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
XW5;CAdUM8x$&K~)jNd08tXBsB#}fM+

delta 9681
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

diff --git a/webserver/socket.c b/webserver/socket.c
index 84ed6a3..10c3514 100644
--- a/webserver/socket.c
+++ b/webserver/socket.c
@@ -55,7 +55,7 @@ int creer_serveur(int port){
 			perror("fork fail");
 			exit(1);
 		}else if(pid > 0) {
-			//close(socket_client);  fait une erreur si on le met
+			close(socket_client);//  fait une erreur si on le met
 		}else{ // à déplacer ailleurs pour une meilleure lisibilité
 			 //traitement final
         		traitementClient(socket_client);
diff --git a/webserver/socket.o b/webserver/socket.o
index 02a2d23ceca50a003abc28b9e641d79a42a5ea7a..20535edd1ca9c83a38a339db091c21897291131a 100644
GIT binary patch
delta 2059
zcmaFid%$mk1`~tQMy+f{zB-<6*B_n7UobE*Fua~Vc{-!w<SmTz7@Ic-GkLHwHcy_z
z9?RId`4{^fM#kpJjY{H-Pd2aTyurxE%975?y?1g4w~B#&Mt*LpetKe3YDtm4Q)y9Z
zVyS*WQGR-Sab<CQVwrxfiJ^gEvVM7LQgLcgS!&Vd)!bpso7MS!85x^5mkJbvsF#BL
zjEn`7KMIO7HiF2>0>W9c$vOGOsSG7WiJ2v-xv6<2&N-Q>c_j=5r6t7-44eCf3z;M{
z89@$bU|?ZjV31;9VEFSN0tzNGiit~>BFRc4$<|Lc6tlNvVut7ygis7z3=Cj=mkA;u
z3ZcMaAUTi;AR)=g8x_PS9}v?}ECz8I7#M7zG)NT)8$eBVo;*=ZTrdVrcEw~vadFQb
zP`Bly$;v=&FGCZ*3sql@CSEvsqPVzZCRDT!N`qVh!bc|`6c?A=1r=QZr9m<v960%-
zxVU5n)U`X&WaB0)N{CBdfQmkV(ja{xd~I@|gubBw)Kx4{8YBb4fuIOsU|@jBgTz31
z@#KvX;*y)8W@(}6%AEXALR``X8Uik8vQH-qN{UMcLS^I7WLqXXN{UMcK>bpICcAxd
zp`^HEFI4X&G+Fb>3nj%R7ee)}L6eP{d{I(d@)p$1$IxV(Co@WkOGZHb`v6V$>|{eJ
zea6(uiBjU8|DooKKwSX}4-giD@)e;pNDPF%p=Rl!iO-pQP)b~q4{D<an(W%iAEm@4
zcR)pxpft!l5dJ+`QCeK`Jk;bGG}-%;1Es|!6QH8gp)^Pz2q#Q#lot1#2n~nTXtJ76
z{v{|4(gDJ~P<O&|6-W$(Cr^GTEiSnc8YWyY8kz@dCJV}lOTyBJ5}IuAWJekCdRM5)
zUTCr$P~U~2iJL%OmV_qG2^B9u6aNG?ryNb(5F$SLx{RRYYpC8nG&S0j8D+&KqaZ37
zW}(UcoNOp7E(uFX%g|(JPEM2+mu!amZWEg9`^ghQdZG3nM3bFA`Jk-0BrFAAMUy=;
z`J=43Buw-@nym6<MLBWC%abkT^d)Vf=9@rW0g5pYE}PsaCqCIho<lGcO~!umMmcfG
z&rmbxp~+TFekdm{sRRv=eQ2`clLh6)C1JVp8k%guWJh^%NpYy&4`{MolMCg=C99#b
zT&$4f334k4znr{KUR<&P>KiXK*~gPF%8N5PO@1k_FZm3rrUgySlF5b&;*vfPV;L5q
z$<Cads36YRytz`LA5=kdDw%U$5QeC|FxgYdobmAFMkRa3!;=px*)yJ)%&2V7=s4L?
z*`9I1<VIzCM&-!|mF*e(CNrwoGk%!tsAA8#j}xN%#pF&Eb0!7F$%j<zIG1rl1lLaH
zR5fP|p6sY<&sZ?I5lkLbwP&(WoXn(V$GJiPqHMurPc?H+52!oZCQlR)o;*iQg)=}A
MBEJDFBBR6u0Nu(R8vp<R

delta 1911
zcmX@$_riCA2Ga_~jau1^O!bQ=FJ@Gne1dTnWBKM}CJ$D|^2ux1V;O5Vb8*aJWGZKz
zyih=l@&4xhoHrO5vnJ2wR@wZCJCs>fKO;XkRX;Z|FR?<upeR2*zPPejKi9<2z%W_A
zJT<8}wWut$XtNu?A0uP==BWb3Ac|9npOLY8vY~LJXh~6GW=U#pYF>$RPG)Le2}40?
zN%7|M!i7u{DU1wYz{J47z{<eDkPhZCFidt3lVB{Kyirtq@&Yjp$%`O)1_lN}s5BP?
z0|N-Jnfy>pd~$&}$0TtFMyJV+;^LD3p-P?6l-f@&6c?8)hstK4$+k~kC@wDf8tR%d
zG}$$iFN%vxIzVMR(PS+qGfId{PJxQfg3=)8fpF(!LkV$71*qP&XtL&$6D7nYb(tZ;
zXCV~WYaqSzCr^|RXIwgYrG&oZeW)A@)FhBR2)j-GC?PIc1QnHq(jXZSZkntpDK2RN
z^|d*gtnlPONpZ<rP}>91WECbiN{UMcLq)TpG{{sCmY=*)Qe1KkRBtPqY|P|`lH!s&
zED%S}N0Xg4Sx`z`QX3-4uoF#o<zz=GamgU4$(PY&eJ2-6i8CIW+$p6mX#$mFhx!lX
zE)f1Q`J$A#<U^>eBATq!WJYOm$!w_Y)@ZWKlMSWCC2OFfp->uRDhRhvPLvjxJO$O8
zk0v{B@<eHI$tzHoccRJaPd+FuE*T09lf`JV36noci%b51y7>~CY|~^#8F9%ZsL4Oj
zWS312lo9tVgqkb{RRwY{2>*n-RtZg92`X-fCT=x(ql~!Zb*O9@nk@6=hce=lH=yn;
zK$AT<Sx{D7k^w4PgC@IcvZJiHqyp5PQ_y5JCl|_!OP+xGZ2_9>)X58F#U(SKvaoaq
z@*fCSOui^9F1Zit<{cP%8Rf(!r$FsJi6&b;*-%bgawk;u5tIg*3c{x*C(4OSN<j7U
zLTQi;2rrsEQBI$cXYxTgaY<LG+dR?KL{0uECoahc4U<GP*%y-)<;6Wcp)OyICi@X8
zz7I{D2g*MMr9o~1;l#;}^5T;}$Z<G6Mw594HR%JIcqG)nf6>IfCO?!Hm)rq$wJoS{
zh8DUYd;BL0Du_#Nf|?nQCM!7EQ9++^>*PWOamiw+n#pKtq$e*_5SQ$O+PV=<HfZxj
zg?>iH^2v!x=A09RA!h8Dyim!UX*;-<n*2dY1I9E^)?nN*Ia1l4(QxuiWqU@C$v2hl
z8HFcHs@OBuO^#HtXPhy4riwl1I!=f=k0(D=F=slVFj-2~j&mY6L~zmML{)P}<H<8s
z?U@1uKo#NS52_lB0h1-w?3o@YOpa2s<LnTCsO^}%P|ciE0P3uU$q&`cIe#cX<Tgxx
Hs3Z>nngIdm

diff --git a/webserver/test/document.txt b/webserver/test/document.txt
deleted file mode 100644
index 8eca45c..0000000
--- a/webserver/test/document.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-testons
-le
-fopen
-- 
GitLab