diff --git a/sr1/TreeFtp/.gitignore b/sr1/TreeFtp/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b83d22266ac8aa2f8df2edef68082c789727841d --- /dev/null +++ b/sr1/TreeFtp/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/sr1/TreeFtp/doc/video_exemple.mp4 b/sr1/TreeFtp/doc/video_exemple.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..78ae9bd6aa1baa7449e59cb4f235af0c3041ab82 Binary files /dev/null and b/sr1/TreeFtp/doc/video_exemple.mp4 differ diff --git a/sr1/TreeFtp/pom.xml b/sr1/TreeFtp/pom.xml index 8e559238b314857bad37641a82c2f7ffbe80e314..3b1918ca27f4347fc948df3471d126d460c82564 100644 --- a/sr1/TreeFtp/pom.xml +++ b/sr1/TreeFtp/pom.xml @@ -28,7 +28,8 @@ </dependencies> <build> - <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> + <finalName>Tree</finalName> + <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> @@ -51,6 +52,25 @@ <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> + <configuration> + <archive> + <manifest> + <mainClass>sr1.main.Main</mainClass> + </manifest> + </archive> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>3.2.0</version> + <configuration> + <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable> + + <reportOutputDirectory>${project.build.directory}/docs</reportOutputDirectory> + <destDir>docs</destDir> + <nohelp>true</nohelp> + </configuration> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> diff --git a/sr1/TreeFtp/src/main/java/sr1/App.java b/sr1/TreeFtp/src/main/java/sr1/App.java deleted file mode 100644 index 3d8d7949744299d4e100c97dab62714cd03e0e0f..0000000000000000000000000000000000000000 --- a/sr1/TreeFtp/src/main/java/sr1/App.java +++ /dev/null @@ -1,20 +0,0 @@ -package sr1; - -import java.io.IOException; -import java.net.UnknownHostException; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) throws UnknownHostException, IOException - { - ClientFTP myclient = new ClientFTP("anonymous", ""); - Client2FTP myclient2 = new Client2FTP(myclient); - myclient2.init("ftp.free.fr", 21); - myclient2.myExplorer("/",""); - - } -} diff --git a/sr1/TreeFtp/src/main/java/sr1/Client2FTP.java b/sr1/TreeFtp/src/main/java/sr1/Client2FTP.java deleted file mode 100644 index 3c856f9d094e1184d133e13d2c2b269f7d7e9385..0000000000000000000000000000000000000000 --- a/sr1/TreeFtp/src/main/java/sr1/Client2FTP.java +++ /dev/null @@ -1,115 +0,0 @@ -package sr1; - -import java.io.*; -import java.net.Socket; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.List; - -public class Client2FTP { - private Socket mysocket; - - private ClientFTP myclient; - - public Client2FTP(ClientFTP myclient) { - this.myclient = myclient; - } - - - public void init(String ip,int port)throws UnknownHostException, IOException { - mysocket = new Socket(ip,port); - OutputStream out = mysocket.getOutputStream(); - PrintWriter printer = new PrintWriter(out, true); - - InputStream in = mysocket.getInputStream(); - InputStreamReader isr= new InputStreamReader(in); - BufferedReader reader = new BufferedReader(isr); - - String content = reader.readLine(); - System.out.println(content); - - printer.println("USER "+ this.myclient.getUser().trim()+"\r\n"); - content = reader.readLine(); - System.out.println(content); - - printer.println("PASS "+this.myclient.getPassword().trim()+"\r\n"); - content = reader.readLine(); - System.out.println(content); - - - } - public void myExplorer(String dir,String space) throws IOException { - List<String> myFolder = new ArrayList<>(); - myFolder = displaymyFolder(dir); - System.out.println(""); - System.out.println("Display the first folders : "); - space+=" "; - for (String sd : myFolder) { - System.out.println(space+"└──"+sd); - - } - } - - public List<String> displaymyFolder(String myDir) throws IOException { - List<String> myFolder = new ArrayList<>(); - OutputStream out = mysocket.getOutputStream(); - PrintWriter printer = new PrintWriter(out, true); - - InputStream in = mysocket.getInputStream(); - InputStreamReader isr= new InputStreamReader(in); - BufferedReader reader = new BufferedReader(isr); - - printer.println("CWD "+myDir+"\r\n"); - reader.readLine(); - printer.println("PWD "+"\r\n"); - reader.readLine(); - printer.println("PASV "+"\r\n"); - String res = ""; - int newport = 0; - String newip = null; - res= reader.readLine(); - - if(res.toLowerCase().startsWith("227 entering passive mode")) { - String temp = res.substring(res.indexOf("(")+1,res.indexOf(")")); - newip = getIP(temp); - newport = getPort(temp); - myFolder = getData(newip, newport); - } - res= reader.readLine(); - - return myFolder; - } - - private List<String> getData(String ip,int newport) throws UnknownHostException, IOException { - - OutputStream out = mysocket.getOutputStream(); - PrintWriter printer = new PrintWriter(out, true); - printer.println("NLST "+"\r\n"); - Socket mySocket; - List<String> myFolder = new ArrayList<>(); - - - mySocket = new Socket(ip,newport); - InputStream in = mySocket.getInputStream(); - InputStreamReader isr = new InputStreamReader(in); - BufferedReader reader2 = new BufferedReader(isr); - String dir; - while((dir = reader2.readLine())!=null){ - myFolder.add(dir); - } - - mySocket.close(); - return myFolder; - } - - public String getIP(String ip) { - String[] s = ip.split(","); - return s[0]+ "." + s[1]+ "." + s[2]+ "." + s[3]; - } - - public int getPort(String port) { - String[] s = port.split(","); - int i = Integer.parseInt(s[4])*256 + Integer.parseInt(s[5]); - return i; - } -} diff --git a/sr1/TreeFtp/src/main/java/sr1/ClientFTP.java b/sr1/TreeFtp/src/main/java/sr1/ClientFTP.java index 84bcd1b49d4d7706b1e670837d9d700a973142d9..f397d3e12718c6a5a7e7e519b33e6a00a78037b7 100644 --- a/sr1/TreeFtp/src/main/java/sr1/ClientFTP.java +++ b/sr1/TreeFtp/src/main/java/sr1/ClientFTP.java @@ -1,130 +1,83 @@ package sr1; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.net.Socket; -import java.net.UnknownHostException; +import java.io.*; +import java.net.*; + +/** + * @author Samy MEGHARI + * + * */ + public class ClientFTP { - private Socket mysocket; private String user; private String password; - - public ClientFTP(String user,String password){ - this.user=user; - this.password=password; - } - public ClientFTP() { - this.user="anonymous"; - this.password= ""; + private Socket mysocket; + public ClientFTP(String user, String password) { + this.user=user; + this.password= password; } public String getUser() { return user; } - + public Socket getSocket() { + return mysocket; + } public String getPassword() { return password; } - - public String getIP(String ip) { - String[] s = ip.split(","); - return s[0]+ "." + s[1]+ "." + s[2]+ "." + s[3]; - } - - public int getPort(String port) { - String[] s = port.split(","); - int i = Integer.parseInt(s[4])*256 + Integer.parseInt(s[5]); - return i; - } - public void init(String ip, int port) throws UnknownHostException, IOException { - this.mysocket = new Socket(ip,port); + /** + * Lance le client + * + * @param ip , l'ip du serveur + * @param port , le port du serveur + * @throws IOException + * @throws ErrorException + */ + public void init(String ip, int port)throws IOException, ErrorException { + + mysocket = new Socket(ip, port); OutputStream out = mysocket.getOutputStream(); PrintWriter printer = new PrintWriter(out, true); - - InputStream in = mysocket.getInputStream(); - InputStreamReader isr= new InputStreamReader(in); - BufferedReader reader = new BufferedReader(isr); - - String content = reader.readLine(); - System.out.println(content); - //printer.println("USER "+ getUser() + "\r\n" + "PASS" + getPassword() + "\r\n" + "PWD" + "\r\n" +"PASV" + "\r\n"+ "LIST" + "\r\n"); - printer.println("USER "+ getUser().trim()+"\r\n"); + InputStream in = mysocket.getInputStream(); + InputStreamReader isr = new InputStreamReader(in); + BufferedReader reader = new BufferedReader(isr); + + String content = reader.readLine(); + System.out.println(content); + + printer.println("USER " + getUser().trim() + "\r\n"); content = reader.readLine(); System.out.println(content); - printer.println("PASS "+ getPassword().trim()+"\r\n"); + printer.println("PASS " + getPassword().trim() + "\r\n"); content = reader.readLine(); System.out.println(content); -/* - content = reader.readLine(); - System.out.println(content); - - content = reader.readLine(); - System.out.println(content); - - content = reader.readLine(); - System.out.println(content); - - content = reader.readLine(); - System.out.println(content); - - - String pasv = content.substring(content.indexOf("(")+1,content.indexOf(")")); - String [] mysplit = pasv.split(","); - String newip = mysplit[0]+"."+mysplit[1]+"."+mysplit[2]+"."+mysplit[3]; - int newport = Integer.parseInt(mysplit[4])*256+ Integer.parseInt(mysplit[5]); -*/ - int newport = 0; - String newip = null; - while((content = reader.readLine()) !=null) { - if (content.toLowerCase().startsWith("227 entering passive mode")) { - String temp = content.substring(content.indexOf("(")+1,content.indexOf(")")); - ip = getIP(temp); - newport = getPort(temp); - getData(newip, newport,printer,reader); - } } - this.mysocket.close(); - - -/* - Socket newsocket = new Socket(newip,newport); - - OutputStream newout = newsocket.getOutputStream(); - PrintWriter newprinter = new PrintWriter(newout, true); - - InputStream newin = newsocket.getInputStream(); - InputStreamReader newisr= new InputStreamReader(newin); - BufferedReader newreader = new BufferedReader(newisr); - - String newcontent = newreader.readLine(); - System.out.println(newcontent); - - content = reader.readLine(); - System.out.println(content); -*/ - + /** + * Parse le retour de la commande PASV et recupere l'IP + * @param ip commande FTP PASV nettoye + * @return IP reconstruite + */ + public String getIP(String ip) { + String[] s = ip.split(","); + return s[0]+ "." + s[1]+ "." + s[2]+ "." + s[3]; } - private void getData(String ip,int newport,PrintWriter myprinter,BufferedReader myreader) throws UnknownHostException, IOException { - Socket mySocket; - - mySocket = new Socket(ip,newport); - InputStream in = mySocket.getInputStream(); - InputStreamReader isr = new InputStreamReader(in); - BufferedReader myreader2 = new BufferedReader(isr); - - String dir; - while((dir = myreader2.readLine())!=null){ - System.out.println(dir); - } - mySocket.close(); + + /** + * Parse le retour de la commande PASV , recupere le port et le recalcul + * + * @param port retour de la commande PASV nettoye + * @return le port recalculer + */ + public int getPort(String port) { + String[] s = port.split(","); + int i = Integer.parseInt(s[4])*256 + Integer.parseInt(s[5]); + return i; } + } diff --git a/sr1/TreeFtp/src/main/java/sr1/ErrorException.java b/sr1/TreeFtp/src/main/java/sr1/ErrorException.java new file mode 100644 index 0000000000000000000000000000000000000000..1cd44ab956ccca6e00b86b057505093e789fe5b7 --- /dev/null +++ b/sr1/TreeFtp/src/main/java/sr1/ErrorException.java @@ -0,0 +1,17 @@ +package sr1; + +public class ErrorException extends Exception{ + /** + * + */ + private static final long serialVersionUID = 1L; + public ErrorException() { + super("failed to connect, please check your ids"); + } + public ErrorException(String msg) { + super(msg); + + } + + +} diff --git a/sr1/TreeFtp/src/main/java/sr1/Tree.java b/sr1/TreeFtp/src/main/java/sr1/Tree.java new file mode 100644 index 0000000000000000000000000000000000000000..11ddcb550d095f59ec0e37dbc4f480fe5e46c8fb --- /dev/null +++ b/sr1/TreeFtp/src/main/java/sr1/Tree.java @@ -0,0 +1,180 @@ +package sr1; + +import java.io.*; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +/** + * @author Samy MEGHARI + * + * */ +public class Tree { + private String myfile; + private ClientFTP myclient; + + public Tree(ClientFTP client) { + myclient = client;} + + + /** + * Parse le retour de la commande LIST + */ + private String analyse(String myreponse) { + String reponse = myreponse.replaceAll("(\\s)+", " "); + String[] tab = reponse.split(" "); + if (tab.length > 9) { + for (int i = 8; i < tab.length; i++) { + this.myfile += " " + tab[i]; + } + } else { + this.myfile = tab[8]; + } + return myfile; + + } + + /** + * affiche l'arborescence d'un repertoir + * + * @param dir le repertoire a parcouru + * @param res espace pour distinguer l'arborescence + * @param profondeur profondeur maximale + * @throws IOException + * @throws @throws ErrorException + */ + private void myExplorer(String dir, String res, int profondeur) + throws IOException, ErrorException { + if (profondeur > 0) { + List<String> myFolder = new ArrayList<>(); + myFolder = displaymyFolder(dir); + + res += " "; + + for (String S : myFolder) { + + switch (S.charAt(0)) { + case ('d'): + System.out.println(res + " └── " + analyse(S)); + myExplorer(dir + "/" + analyse(S), res, profondeur - 1); + + case ('l'): + System.out.println(res + " └──" + analyse(S)); + + case ('-'): + System.out.println(res + " └── " + analyse(S)); + + default: + break; + } + } + } else { + return; + } + } + + /** + * Affiche l'arborescence des dossiers + * + * @param dir le repertoire parcouru + * @param profondeur profondeur maximale + * @throws IOException + * @throws ErrorException + */ + public void displayFolders(String dir, int profondeur)throws IOException, ErrorException { + List<String> myFolder = new ArrayList<>(); + myFolder = displaymyFolder(dir); + + if (dir == "") { + System.out.println("/"); + } else { + System.out.println(dir); + } + if (myFolder.isEmpty()) { + System.out.println("empty"); + return; + } + for (String s : myFolder) { + switch (s.charAt(0)) { + case ('d'): + System.out.println(" └── " + s); + myExplorer(dir + "/" + analyse(s), "", profondeur - 1); + break; + case ('l'): + System.out.println(" └──" + s); + break; + + case ('-'): + System.out.println(" └── " + s); + break; + + default: + break; + } + } + } + /** + * Recupere la sortie de LIST + * + * @param ip , Ip du nouveau socket + * @param port, Port du nouveau socket + * @return transforme en liste la sortie de LIST + */ + private List<String> getData(String ip, int port) throws UnknownHostException, IOException { + OutputStream out = this.myclient.getSocket().getOutputStream(); + PrintWriter printer = new PrintWriter(out, true); + printer.println("LIST " + "\r\n"); + + Socket mySocket; + List<String> myFolder = new ArrayList<>(); + mySocket = new Socket(ip, port); + InputStream in = mySocket.getInputStream(); + InputStreamReader isr = new InputStreamReader(in); + BufferedReader reader2 = new BufferedReader(isr); + String dir; + while ((dir = reader2.readLine()) != null) { + myFolder.add(dir); + } + + mySocket.close(); + return myFolder; + } + + /** + *Renvoie le contenu d'un dossier + * + * @param myDir le dossier parcouru + * @return la liste des elements du repertoire + * @throws IOException + + */ + public List<String> displaymyFolder(String myDir) throws IOException { + List<String> myFolder = new ArrayList<>(); + OutputStream out = this.myclient.getSocket().getOutputStream(); + PrintWriter printer = new PrintWriter(out, true); + + InputStream in = this.myclient.getSocket().getInputStream(); + InputStreamReader isr= new InputStreamReader(in); + BufferedReader reader = new BufferedReader(isr); + + printer.println("CWD "+myDir+"\r\n"); + reader.readLine(); + printer.println("PWD "+"\r\n"); + reader.readLine(); + printer.println("PASV "+"\r\n"); + String res = ""; + int newport = 0; + String newip = null; + res= reader.readLine(); + + if(res.toLowerCase().startsWith("227 entering passive mode")) { + String temp = res.substring(res.indexOf("(")+1,res.indexOf(")")); + newip = this.myclient.getIP(temp); + newport = this.myclient.getPort(temp); + myFolder = getData(newip, newport); + } + res= reader.readLine(); + + return myFolder; + } +} diff --git a/sr1/TreeFtp/src/main/java/sr1/main/Main.java b/sr1/TreeFtp/src/main/java/sr1/main/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..37d68fcb8f840e6a724170c20db4cc6653c58d70 --- /dev/null +++ b/sr1/TreeFtp/src/main/java/sr1/main/Main.java @@ -0,0 +1,55 @@ +package sr1.main; +import java.io.IOException; + +import sr1.*; +/** + * @author Samy MEGHARI + * + * */ + +public class Main { + + /** + *lancera Tree en fonction des arguments passés + * + *@param args les arguments passées + *@throws IOException + *@throws ErrorException + */ + public static void main(String[] args) throws IOException, ErrorException { + int len = args.length; + ClientFTP client; + String serveur = ""; + Tree tree; + if(len>= 1 && len<=4) { + serveur = args[0]; + client = new ClientFTP("anonymous","anonymous"); + client.init(serveur, 21); + tree = new Tree(client); + + if(len == 1) { + + tree.displayFolders("", 3); + } + else if(len == 2) { + + tree.displayFolders("", Integer.parseInt(args[1])); + } + else if(len == 3) { + + tree.displayFolders("", 3); + } + else if(len == 4) { + + tree.displayFolders("", Integer.parseInt(args[3])); + } + } + + else { + System.out.println("please check the readme"); + } + + + + } +} diff --git a/sr1/TreeFtp/src/test/java/sr1/AppTest.java b/sr1/TreeFtp/src/test/java/sr1/AppTest.java deleted file mode 100644 index a5f897cf2157fd6d2749abbdc074e09ee34c0fdb..0000000000000000000000000000000000000000 --- a/sr1/TreeFtp/src/test/java/sr1/AppTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package sr1; - -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -/** - * Unit test for simple App. - */ -public class AppTest -{ - /** - * Rigorous Test :-) - */ - @Test - public void shouldAnswerWithTrue() - { - assertTrue( true ); - } -} diff --git a/sr1/TreeFtp/src/test/java/sr1/ClientFTPTest.java b/sr1/TreeFtp/src/test/java/sr1/ClientFTPTest.java new file mode 100644 index 0000000000000000000000000000000000000000..7375c9b0d24008b919ace1ae7affe6c20f1e4e67 --- /dev/null +++ b/sr1/TreeFtp/src/test/java/sr1/ClientFTPTest.java @@ -0,0 +1,22 @@ +package sr1; + +import java.io.IOException; +import java.net.UnknownHostException; + +import org.junit.Before; +import org.junit.Test; + +public class ClientFTPTest { + private ClientFTP client; + + @Before + public void setupBefore(){ + client = new ClientFTP("test", "test"); + } + + @Test(expected = UnknownHostException.class) + public void testConnectWhenfalseAdress() throws UnknownHostException, IOException,ErrorException { + + client.init("ftp.randomadress.com", 75); + } +} diff --git a/sr1/TreeFtp/target/classes/.gitignore b/sr1/TreeFtp/target/classes/.gitignore deleted file mode 100644 index 066562d622931be141c97c0f067c7e370df31a5f..0000000000000000000000000000000000000000 --- a/sr1/TreeFtp/target/classes/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/sr1/ diff --git a/sr1/TreeFtp/target/classes/sr1/App.class b/sr1/TreeFtp/target/classes/sr1/App.class deleted file mode 100644 index 0dfa49143cfdf8aad51ad73dffb224034592989c..0000000000000000000000000000000000000000 Binary files a/sr1/TreeFtp/target/classes/sr1/App.class and /dev/null differ diff --git a/sr1/TreeFtp/target/classes/sr1/ClientFTP.class b/sr1/TreeFtp/target/classes/sr1/ClientFTP.class index d4f816384be5ebd7bf2009f4cfbfea2a62598456..8601c075258b7e0b97013a4ede3f24748ec47dc3 100644 Binary files a/sr1/TreeFtp/target/classes/sr1/ClientFTP.class and b/sr1/TreeFtp/target/classes/sr1/ClientFTP.class differ diff --git a/sr1/TreeFtp/target/test-classes/sr1/AppTest.class b/sr1/TreeFtp/target/test-classes/sr1/AppTest.class deleted file mode 100644 index 6fc3d4f1d4f1855686ddae4424111671eb14a912..0000000000000000000000000000000000000000 Binary files a/sr1/TreeFtp/target/test-classes/sr1/AppTest.class and /dev/null differ