diff --git a/serveurFTP/.gitigniore b/serveurFTP/.getigniore similarity index 100% rename from serveurFTP/.gitigniore rename to serveurFTP/.getigniore diff --git a/serveurFTP/src/main/java/sr/projet2/Request/CDUP.java b/serveurFTP/src/main/java/sr/projet2/Request/CDUP.java new file mode 100644 index 0000000000000000000000000000000000000000..395037556ec3dcfa80fbfad6d7c378ecb22dfa1f --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/CDUP.java @@ -0,0 +1,40 @@ +package sr.projet2.Request; + +import java.io.File; +import java.io.IOException; + +import sr.projet2.Server.FtpConnexion; + +public class CDUP implements request { + private FtpConnexion ftp; + public CDUP(FtpConnexion ftp) { + this.ftp =ftp; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + String newPath=this.ftp.getDirectory(); + String[] pa=newPath.split("/"); + newPath=""; + if(pa.length>2) { + for(int i=1;i<pa.length-1;i++) { + newPath+="/"+pa[i]; + } + } + else { + newPath="/"; + } + this.ftp.SetDirectory(newPath); + this.ftp.getBufferedWriter().write("250 success to exit.\r\n"); + this.ftp.getBufferedWriter().flush(); + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/CWD.java b/serveurFTP/src/main/java/sr/projet2/Request/CWD.java new file mode 100644 index 0000000000000000000000000000000000000000..0f13d03d81d53347e32dbebac06b741343b3266a --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/CWD.java @@ -0,0 +1,46 @@ +package sr.projet2.Request; + +import java.io.File; +import java.io.IOException; + +import sr.projet2.Server.FtpConnexion; + +public class CWD implements request { + private FtpConnexion ftp; + private String directory; + public CWD(FtpConnexion ftp,String directory) { + this.ftp =ftp; + this.directory=directory; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + String newPath; + if(this.ftp.getDirectory().trim().equals("/")) { + newPath=this.ftp.getDirectory()+this.directory; + } + else { + newPath=this.ftp.getDirectory()+"/"+this.directory; + + } + File file= new File(newPath); + if (file.exists() && file.canRead() && file.isDirectory()) { + this.ftp.SetDirectory(newPath); + this.ftp.getBufferedWriter().write("200 success to access to the directory.\r\n"); + this.ftp.getBufferedWriter().flush(); + } + else { + this.ftp.getBufferedWriter().write("550 failed to access to the directory. \r\n"); + this.ftp.getBufferedWriter().flush(); + } + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/LIST.java b/serveurFTP/src/main/java/sr/projet2/Request/LIST.java index 6a1d2f145b0f0b3cbb924127135c1314f03818c8..84decec1197b3eed48e100db30495eb143ab6d18 100644 --- a/serveurFTP/src/main/java/sr/projet2/Request/LIST.java +++ b/serveurFTP/src/main/java/sr/projet2/Request/LIST.java @@ -1,6 +1,15 @@ package sr.projet2.Request; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.Socket; +import java.nio.file.Files; +import java.sql.Date; +import java.text.SimpleDateFormat; import sr.projet2.Server.FtpConnexion; @@ -16,8 +25,40 @@ public class LIST implements request { throw new IOException("Ftp server error"); } try { - this.ftp.getBufferedWriter().write("530 please login with USER AND PASS.\r\n"); - this.ftp.getBufferedWriter().flush(); + File file=new File(this.ftp.getDirectory()); + if(file.isDirectory()) { + this.ftp.getBufferedWriter().write("150 Here comes the directory listing.\r\n"); + this.ftp.getBufferedWriter().flush(); + File[] files = file.listFiles(); + Socket socket1=this.ftp.getServerSocket().accept(); + BufferedReader bfR1 =new BufferedReader(new InputStreamReader(socket1.getInputStream())); + BufferedWriter bfW1 = new BufferedWriter(new OutputStreamWriter(socket1.getOutputStream())); + String res=""; + for(File oneFile: files) { + int len =1; + if(oneFile.isDirectory() && oneFile.canRead()) { + res+="d"; // if directory + len=oneFile.listFiles().length; + } + else { + res+="-"; + } + res+="rwxr-xr-x "; //Permission + res+=len+" "; + //res+= Files.getOwner(oneFile.toPath()).toString()+" "; + res+= "root "; + Date date = new Date(oneFile.lastModified()); + SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd hh:mm"); + res+= dateFormat.format(date)+" "; + res+=oneFile.getName()+"\r\n"; + + } + bfW1.write(res); + bfW1.flush(); + socket1.close(); + this.ftp.getBufferedWriter().write("226 Directory send OK.\r\n"); + this.ftp.getBufferedWriter().flush(); + } } catch(IOException e){ throw new IOException("Connexion failed"); diff --git a/serveurFTP/src/main/java/sr/projet2/Request/PASV.java b/serveurFTP/src/main/java/sr/projet2/Request/PASV.java index 4b63fc64af2da144460cab3f89504caa6dccb0a8..bbad0719bbccd3ca4786e79f9363867699d95299 100644 --- a/serveurFTP/src/main/java/sr/projet2/Request/PASV.java +++ b/serveurFTP/src/main/java/sr/projet2/Request/PASV.java @@ -18,8 +18,9 @@ public class PASV implements request { throw new IOException("Ftp server error"); } try { - ServerSocket socket= new ServerSocket(0); - int newPort = socket.getLocalPort(); + ServerSocket s=new ServerSocket(0); + this.ftp.SetServerSocket(s); + int newPort = this.ftp.getServerSocket().getLocalPort(); int port1 = newPort / 256; int port2 = newPort % 256; String ips[] = this.ftp.getSocket().getLocalAddress().getHostAddress().split("\\."); diff --git a/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java b/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java index e4df8ccc619151b52b8a7c3787f1fb6e828aed7a..150815e22ff185b7f15c22ba4663ec331f35844f 100644 --- a/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java +++ b/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java @@ -5,11 +5,15 @@ import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.net.ServerSocket; import java.net.Socket; import sr.projet2.Request.AUTH_SSL; import sr.projet2.Request.AUTH_TLS; +import sr.projet2.Request.CDUP; +import sr.projet2.Request.CWD; import sr.projet2.Request.FEAT; +import sr.projet2.Request.LIST; import sr.projet2.Request.PASS; import sr.projet2.Request.PASV; import sr.projet2.Request.PWD; @@ -22,7 +26,8 @@ public class FtpConnexion extends Thread { private BufferedReader bfR; private BufferedWriter bfW; private boolean Connected; - private String directory; + private static String directory; + public static ServerSocket socketServer; public FtpConnexion(Socket socket) throws IOException { this.socket=socket; this.bfR =new BufferedReader(new InputStreamReader(this.socket.getInputStream())); @@ -99,6 +104,19 @@ public class FtpConnexion extends Thread { PASV request= new PASV(this); request.send(); } + else if (readLine.startsWith("LIST")){ + LIST request= new LIST(this); + request.send(); + } + else if (readLine.startsWith("CWD")){ + String[] mystring=readLine.split(" "); + CWD request= new CWD(this,mystring[1].trim()); + request.send(); + } + else if (readLine.startsWith("CDUP")){ + CDUP request= new CDUP(this); + request.send(); + } } else { this.bfW.write("530 server is not connected\r\n"); @@ -129,4 +147,13 @@ public class FtpConnexion extends Thread { public String getDirectory(){ return this.directory; } + public void SetDirectory(String Directory){ + this.directory=Directory; + } + public ServerSocket getServerSocket(){ + return this.socketServer; + } + public void SetServerSocket(ServerSocket s){ + this.socketServer=s; + } } diff --git a/serveurFTP/target/classes/sr/projet2/Request/CDUP.class b/serveurFTP/target/classes/sr/projet2/Request/CDUP.class new file mode 100644 index 0000000000000000000000000000000000000000..56394ab94dff6c99a064f76f98ee060f96026386 Binary files /dev/null and b/serveurFTP/target/classes/sr/projet2/Request/CDUP.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Request/CWD.class b/serveurFTP/target/classes/sr/projet2/Request/CWD.class new file mode 100644 index 0000000000000000000000000000000000000000..8815f602c12a6d6a09abee488f1811e5cf7c6aad Binary files /dev/null and b/serveurFTP/target/classes/sr/projet2/Request/CWD.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Request/FEAT.class b/serveurFTP/target/classes/sr/projet2/Request/FEAT.class index e7210017bdad9ae8f827a6119c7981447694a7b3..c42179588c498dfd77fdc3b313e23cf706c58094 100644 Binary files a/serveurFTP/target/classes/sr/projet2/Request/FEAT.class and b/serveurFTP/target/classes/sr/projet2/Request/FEAT.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Request/LIST.class b/serveurFTP/target/classes/sr/projet2/Request/LIST.class index 89172d9ac6f3ae59b2fd580bd965f5feeb564407..236d176ca12a0029715e29203e9fe30402e0db6e 100644 Binary files a/serveurFTP/target/classes/sr/projet2/Request/LIST.class and b/serveurFTP/target/classes/sr/projet2/Request/LIST.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Request/PASV.class b/serveurFTP/target/classes/sr/projet2/Request/PASV.class index 9339601d5975d624f9cdead16ac3b92c8eddb3d2..c80550d3d2f94bf401af8c0f20d1fbf2b92f4722 100644 Binary files a/serveurFTP/target/classes/sr/projet2/Request/PASV.class and b/serveurFTP/target/classes/sr/projet2/Request/PASV.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Request/PWD.class b/serveurFTP/target/classes/sr/projet2/Request/PWD.class index bd2e0d30b96f623de53d793640eebeab645495a7..f9904b7dff6239f671dc5904f77e92cd449af897 100644 Binary files a/serveurFTP/target/classes/sr/projet2/Request/PWD.class and b/serveurFTP/target/classes/sr/projet2/Request/PWD.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Request/TYPE.class b/serveurFTP/target/classes/sr/projet2/Request/TYPE.class index defc04d7041d592c233da7c8ed927073ddb924f9..337932a35eb6017a6306acebe34a6bdb656a7327 100644 Binary files a/serveurFTP/target/classes/sr/projet2/Request/TYPE.class and b/serveurFTP/target/classes/sr/projet2/Request/TYPE.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Request/USER.class b/serveurFTP/target/classes/sr/projet2/Request/USER.class index 441896aaf8363cc9b9dbd90ec1aab6ae7bb978f4..f886618a06165804b7a61e59a98f8fac54c7ad71 100644 Binary files a/serveurFTP/target/classes/sr/projet2/Request/USER.class and b/serveurFTP/target/classes/sr/projet2/Request/USER.class differ diff --git a/serveurFTP/target/classes/sr/projet2/Server/FtpConnexion.class b/serveurFTP/target/classes/sr/projet2/Server/FtpConnexion.class index 47d2df0040fc2b08f3e6bb61701ac251be384ea2..89528432d1ca93fb9f56329e4cc3032c397811aa 100644 Binary files a/serveurFTP/target/classes/sr/projet2/Server/FtpConnexion.class and b/serveurFTP/target/classes/sr/projet2/Server/FtpConnexion.class differ diff --git a/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index c8427259419a3de002956638a4e6d273c7158048..064918ea60f269f5d497b043d0c38998edd4b587 100644 --- a/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -2,12 +2,14 @@ /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Main.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/SYST.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/TYPE.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/CDUP.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/USER.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/LIST.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/AUTH_TLS.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/request.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/PWD.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/PASS.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/CWD.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/PASV.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/AUTH_SSL.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java diff --git a/serveurFTP/target/serveurFTP-1.0-SNAPSHOT.jar b/serveurFTP/target/serveurFTP-1.0-SNAPSHOT.jar index 85cc54b1bba6e2606a9dd8216b5f5abdb3ce1777..d3c30b553baed36eb65ed7a948c1d17d1ba8c290 100644 Binary files a/serveurFTP/target/serveurFTP-1.0-SNAPSHOT.jar and b/serveurFTP/target/serveurFTP-1.0-SNAPSHOT.jar differ diff --git a/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml b/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml index 8f8ab532b44fbd7cfafbb501d26c8dc35c58ce79..04f2f66785ae373137c679ddc97e7a57a9598841 100644 --- a/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml +++ b/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="sr.projet2.AppTest" time="0.048" tests="1" errors="0" skipped="0" failures="0"> +<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="sr.projet2.AppTest" time="0.027" tests="1" errors="0" skipped="0" failures="0"> <properties> <property name="sun.desktop" value="gnome"/> <property name="awt.toolkit" value="sun.awt.X11.XToolkit"/> @@ -16,7 +16,7 @@ <property name="sun.java.launcher" value="SUN_STANDARD"/> <property name="user.country" value="FR"/> <property name="sun.boot.library.path" value="/usr/lib/jvm/java-11-openjdk-amd64/lib"/> - <property name="sun.java.command" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter7079129417024759708.jar /home/hocine/eclipse-workspace/serveurFTP/target/surefire 2021-03-07T15-29-07_870-jvmRun1 surefire9845237247780243398tmp surefire_015024554498971470310tmp"/> + <property name="sun.java.command" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter14735518812710354340.jar /home/hocine/eclipse-workspace/serveurFTP/target/surefire 2021-03-07T18-57-43_678-jvmRun1 surefire10410808926169169035tmp surefire_018045902178909471772tmp"/> <property name="jdk.debug" value="release"/> <property name="surefire.test.class.path" value="/home/hocine/eclipse-workspace/serveurFTP/target/test-classes:/home/hocine/eclipse-workspace/serveurFTP/target/classes:/home/hocine/.m2/repository/junit/junit/4.11/junit-4.11.jar:/home/hocine/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:"/> <property name="sun.cpu.endian" value="little"/> @@ -32,7 +32,7 @@ <property name="java.specification.name" value="Java Platform API Specification"/> <property name="java.vm.specification.vendor" value="Oracle Corporation"/> <property name="java.awt.graphicsenv" value="sun.awt.X11GraphicsEnvironment"/> - <property name="surefire.real.class.path" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter7079129417024759708.jar"/> + <property name="surefire.real.class.path" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter14735518812710354340.jar"/> <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/> <property name="java.runtime.version" value="11.0.10+9-Ubuntu-0ubuntu1.20.04"/> <property name="user.name" value="hocine"/> @@ -57,5 +57,5 @@ <property name="sun.io.unicode.encoding" value="UnicodeLittle"/> <property name="java.class.version" value="55.0"/> </properties> - <testcase name="shouldAnswerWithTrue" classname="sr.projet2.AppTest" time="0.003"/> + <testcase name="shouldAnswerWithTrue" classname="sr.projet2.AppTest" time="0.001"/> </testsuite> \ No newline at end of file diff --git a/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt b/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt index 70439b27ebc909d6ca072e40ea128d16678b8d76..cd1d9c7f24ea109a23cd9234d25120344d979244 100644 --- a/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt +++ b/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: sr.projet2.AppTest ------------------------------------------------------------------------------- -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.048 s - in sr.projet2.AppTest +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 s - in sr.projet2.AppTest