diff --git a/pom.xml b/pom.xml index cf77e99..5dbd4f1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ groupId jcon - 1.0-SNAPSHOT + 1.0 org.slf4j diff --git a/src/main/java/com/marlonrcfranco/IJcon.java b/src/main/java/com/marlonrcfranco/IJcon.java index b226016..383adf8 100644 --- a/src/main/java/com/marlonrcfranco/IJcon.java +++ b/src/main/java/com/marlonrcfranco/IJcon.java @@ -1,6 +1,7 @@ package com.marlonrcfranco; import java.io.IOException; +import java.util.ArrayList; public interface IJcon { @@ -85,7 +86,7 @@ enum types { * @throws IOException */ public String listFiles(String IP, String filePath, String user, String pass) throws IOException; - + public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception; /** * public String copyFileTo(String sourceIP, String sourceFilePath, String destIP, String destFilePath, String user, String pass) * diff --git a/src/main/java/com/marlonrcfranco/Jcon.java b/src/main/java/com/marlonrcfranco/Jcon.java index b97050d..c4fe520 100644 --- a/src/main/java/com/marlonrcfranco/Jcon.java +++ b/src/main/java/com/marlonrcfranco/Jcon.java @@ -1,6 +1,7 @@ package com.marlonrcfranco; import java.io.IOException; +import java.util.ArrayList; public class Jcon implements IJcon{ private IJcon jcon; @@ -51,6 +52,11 @@ public String listFiles(String IP, String filePath, String user, String pass) th return this.jcon.listFiles(IP,filePath,user,pass); } + @Override + public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception { + return null; + } + @Override public String copyFileTo(String sourceIP, String sourceFilePath, String destIP, String destFilePath, String user, String pass) throws IOException { return this.jcon.copyFileTo(sourceIP,sourceFilePath,destIP,destFilePath,user,pass); diff --git a/src/main/java/com/marlonrcfranco/JconFileSystem.java b/src/main/java/com/marlonrcfranco/JconFileSystem.java index 16a24e7..f6d9144 100644 --- a/src/main/java/com/marlonrcfranco/JconFileSystem.java +++ b/src/main/java/com/marlonrcfranco/JconFileSystem.java @@ -1,6 +1,7 @@ package com.marlonrcfranco; import java.io.*; +import java.util.ArrayList; public class JconFileSystem implements IJcon{ @@ -84,7 +85,6 @@ public byte[] writeBytes(String IP, String filePath, String user, String pass, b } catch (IOException e) { output=("Erro: Não foi possível escrever no arquivo \""+filePath+"\"" +((e.getMessage() != null)?" ("+e.getMessage()+")":"")).getBytes(); - } finally { if (file != null) file.close(); @@ -139,22 +139,31 @@ public String listFiles(String filePath) throws IOException { @Override public String listFiles(String IP, String filePath, String user, String pass) throws IOException { String output=""; - filePath = filePath.replace("\\", "/"); - if (!filePath.endsWith("/")) filePath+="/"; - File curDir = null; try { - curDir = new File(filePath); - File[] filesList = curDir.listFiles(); - for(File f : filesList){ - output += f.getName()+(f.isDirectory()? "/":"")+"\n"; + ArrayList listFiles = listFilesAsList(IP, filePath, user, pass); + for (File file : listFiles) { + output += file + "\n"; } } catch (Exception e) { - output = "Error: Could not list the files in \""+filePath+"\"."; + output += "Error: Could not list the files in \""+filePath+"\"."; if (e.getMessage() != null) output+=" ("+e.getMessage()+")"; } return output; } + @Override + public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception { + ArrayList output = new ArrayList<>(); + filePath = filePath.replace("\\", "/"); + if (!filePath.endsWith("/")) filePath+="/"; + File curDir = new File(filePath); + File[] filesList = curDir.listFiles(); + for(File f : filesList){ + output.add(f); + } + return output; + } + public String copyFileTo(String sourceFilePath, String destFilePath) throws IOException{ return copyFileTo("",sourceFilePath,"",destFilePath,"",""); } diff --git a/src/main/java/com/marlonrcfranco/JconNFS.java b/src/main/java/com/marlonrcfranco/JconNFS.java index 47284d7..d4a40e1 100644 --- a/src/main/java/com/marlonrcfranco/JconNFS.java +++ b/src/main/java/com/marlonrcfranco/JconNFS.java @@ -7,6 +7,7 @@ import com.emc.ecs.nfsclient.rpc.CredentialUnix; import java.io.*; +import java.util.ArrayList; import java.util.List; public class JconNFS implements IJcon{ @@ -136,6 +137,11 @@ public String listFiles(String IP, String filePath, String user, String pass) th return listFiles(IP, sharedFolder, sFilePath, user, pass); } + @Override + public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws IOException { + return null; + } + public String listFiles(String IP, String sharedFolder, String path, String user, String pass) { String output=""; path = path.replace("\\", "/"); diff --git a/src/main/java/com/marlonrcfranco/JconSMB1.java b/src/main/java/com/marlonrcfranco/JconSMB1.java index 11f3489..a5c317c 100644 --- a/src/main/java/com/marlonrcfranco/JconSMB1.java +++ b/src/main/java/com/marlonrcfranco/JconSMB1.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.UnknownHostException; +import java.util.ArrayList; public class JconSMB1 implements IJcon { @@ -133,25 +134,37 @@ public String listFiles(String IP, String filePath, String user, String pass) th String output=""; filePath=filePath.replace("\\", "/"); if (!filePath.endsWith("/") && !"".equalsIgnoreCase(filePath.trim())) filePath+="/"; - NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass); String path="smb://"+IP+"/"+filePath; - SmbFile smbFile=null; try { - smbFile = new SmbFile(path,auth); - SmbFile[] aSmbFiles = smbFile.listFiles(); + ArrayList aSmbFiles = listFilesAsList(IP, filePath, user, pass); for (SmbFile smbF : aSmbFiles) { output+=smbF.getName()+"\n"; } } catch (MalformedURLException e) { output="Erro: Nao foi possivel localizar o caminho \"" + path + "\""; if (e.getMessage() != null) output+=" ("+e.getMessage()+")"; - }catch (SmbException e) { + }catch (Exception e) { output="Erro: Verifique se o usuário e senha estão corretos, e se possui permissão para acessar o caminho \"" + path + "\""; if (e.getMessage() != null) output+=" ("+e.getMessage()+")"; } return output; } + @Override + public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception { + ArrayList output = new ArrayList<>(); + filePath=filePath.replace("\\", "/"); + if (!filePath.endsWith("/") && !"".equalsIgnoreCase(filePath.trim())) filePath+="/"; + String path="smb://"+IP+"/"+filePath; + NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass); + SmbFile smbFile = new SmbFile(path,auth); + SmbFile[] aSmbFiles = smbFile.listFiles(); + for (SmbFile smbF : aSmbFiles) { + output.add(smbF); + } + return output; + } + @Override public String copyFileTo(String sourceIP, String sourceFilePath, String destIP, String destFilePath, String user, String pass) throws IOException { String output=""; diff --git a/src/main/java/com/marlonrcfranco/JconSMB23.java b/src/main/java/com/marlonrcfranco/JconSMB23.java index 12678dc..8786d9c 100644 --- a/src/main/java/com/marlonrcfranco/JconSMB23.java +++ b/src/main/java/com/marlonrcfranco/JconSMB23.java @@ -16,6 +16,7 @@ import java.io.IOException; import java.io.OutputStream; +import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; import java.util.HashSet; @@ -202,36 +203,53 @@ public String copyFileTo(String sourceIP, String sourceFilePath, String destIP, @Override public String listFiles(String IP, String filePath, String user, String pass) throws IOException { extractSharedPathFromPath(filePath.replace("\\", "/")); - return listFiles(IP, sharedFolder, sFilePath, user, pass, null); - } - - public String listFiles(String IP, String sharedFolder, String path, String user, String pass, String domain) { String output=""; + boolean isDirectory = false; sharedFolder = parsePath(sharedFolder); - path = parsePath(path); + String path = parsePath(sFilePath); if (!path.trim().endsWith("/") && !"".equalsIgnoreCase(path.trim())) path+="/"; - boolean isDirectory = false; - SMBClient client = new SMBClient(); - try (Connection connection = client.connect(IP)) { - AuthenticationContext ac = new AuthenticationContext(user, pass.toCharArray(),domain); - Session session = connection.authenticate(ac); - // Connect to Share - try (DiskShare share = (DiskShare) session.connectShare(sharedFolder)) { - for (FileIdBothDirectoryInformation f : share.list(path, "*")) { - isDirectory = f.getFileAttributes()==FileAttributes.FILE_ATTRIBUTE_DIRECTORY.getValue(); - output+= f.getFileName() + (isDirectory? "/" : "") + "\n"; - } - } catch (SMBApiException e) { - output="Erro: Nao foi possivel localizar o diretorio "+sharedFolder+(!"".equalsIgnoreCase((sharedFolder+path).trim())? "/" : "")+path; - if (e.getMessage() != null) output+=" ("+e.getMessage()+")"; + try { + ArrayList list = listFilesAsList(IP, sharedFolder, sFilePath, user, pass, null); + for (FileIdBothDirectoryInformation f : list) { + isDirectory = f.getFileAttributes()==FileAttributes.FILE_ATTRIBUTE_DIRECTORY.getValue(); + output+= f.getFileName() + (isDirectory? "/" : "") + "\n"; } } catch (IOException e) { - output="Erro: Nao foi possivel listar os arquivos do diretorio: "+sharedFolder; + output="Erro: Nao foi possivel listar os arquivos do diretorio: "+sharedFolder; + if (e.getMessage() != null) output+=" ("+e.getMessage()+")"; + } catch (Exception e) { + output="Erro: Nao foi possivel localizar o diretorio "+sharedFolder+(!"".equalsIgnoreCase((sharedFolder+path).trim())? "/" : "")+path; if (e.getMessage() != null) output+=" ("+e.getMessage()+")"; } return output; } + @Override + public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception { + extractSharedPathFromPath(filePath.replace("\\", "/")); + return listFilesAsList(IP, sharedFolder, sFilePath, user, pass, null); + } + + public ArrayList listFilesAsList(String IP, String sharedFolder, String path, String user, String pass, String domain) throws Exception { + ArrayList output = new ArrayList<>(); + sharedFolder = parsePath(sharedFolder); + path = parsePath(path); + if (!path.trim().endsWith("/") && !"".equalsIgnoreCase(path.trim())) path+="/"; + SMBClient client = new SMBClient(); + Connection connection = client.connect(IP); + AuthenticationContext ac = new AuthenticationContext(user, pass.toCharArray(),domain); + Session session = connection.authenticate(ac); + // Connect to Share + DiskShare share = (DiskShare) session.connectShare(sharedFolder); + for (FileIdBothDirectoryInformation f : share.list(path, "*")) { + output.add(f); + } + if (share!=null) share.close(); + if (session!=null) session.close(); + if (connection!=null) connection.close(); + return output; + } + private String parsePath(String path) { while (path.startsWith("\\") || path.startsWith("/")) { path = path.substring(1); diff --git a/src/main/java/com/marlonrcfranco/Main.java b/src/main/java/com/marlonrcfranco/Main.java index 67fda20..eb3742a 100644 --- a/src/main/java/com/marlonrcfranco/Main.java +++ b/src/main/java/com/marlonrcfranco/Main.java @@ -29,7 +29,7 @@ public static void main(String[] args) { "\n║ ║ ╠═══╦═══╣ ╚╗ ║║ ║" + "\n║ ╔═╗ ║ ║ ╔═╣╔═╗║╔╗╚╗║║ ║" + "\n║ ║ ╚═╝ ║ ╚═╣╚═╝║║╚╗╚╝║ ║" + - "\n║ ╚═════╩═══╩═══╩╝ ╚══╝ v0.1 ║" + + "\n║ ╚═════╩═══╩═══╩╝ ╚══╝ v"+Util.getVersion()+" ║" + "\n║ @marlonrcfranco ║" + "\n║ https://github.com/marlonrcfranco/jcon ║" + "\n║ ║" + diff --git a/src/main/java/com/marlonrcfranco/Util.java b/src/main/java/com/marlonrcfranco/Util.java index 664b7f1..c29c17c 100644 --- a/src/main/java/com/marlonrcfranco/Util.java +++ b/src/main/java/com/marlonrcfranco/Util.java @@ -19,4 +19,8 @@ public static byte[] toByteArray(InputStream in) throws IOException { } return os.toByteArray(); } + + public static String getVersion() { + return "1.0"; + } } diff --git a/src/main/java/tests/JconFileSystemTest.java b/src/main/java/tests/JconFileSystemTest.java index b4d0a86..9d50ba1 100644 --- a/src/main/java/tests/JconFileSystemTest.java +++ b/src/main/java/tests/JconFileSystemTest.java @@ -4,7 +4,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.io.IOException; +import java.util.ArrayList; class JconFileSystemTest { @@ -173,11 +175,16 @@ public void listFiles() { System.out.println(response); assert response.contains("teste10.xml"); + ArrayList list = jconFS.listFilesAsList("","C:\\Users\\marlon.franco\\Documents","",""); + assert list.size()==response.split("\\n").length; + response = jconFS.delete( "C:\\Users\\marlon.franco\\Documents\\teste10.xml"); assert !response.contains("Erro"); System.out.println(response); } catch (IOException e) { assert false; + } catch (Exception e) { + assert false; } } diff --git a/src/main/java/tests/JconSMB1Test.java b/src/main/java/tests/JconSMB1Test.java index c207a53..961df33 100644 --- a/src/main/java/tests/JconSMB1Test.java +++ b/src/main/java/tests/JconSMB1Test.java @@ -1,10 +1,12 @@ package tests; import com.marlonrcfranco.JconSMB1; +import jcifs.smb.SmbFile; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; +import java.util.ArrayList; class JconSMB1Test { @@ -177,12 +179,17 @@ public void listFiles() { System.out.println(response); assert response.contains("fileTest123.xml"); + ArrayList list = jSMB1.listFilesAsList(IP,"/Marlon/Teste",user,pass); + assert list.size()==response.split("\\n").length; + response = jSMB1.delete(IP,"/Marlon/Teste/fileTest123.xml",user,pass); System.out.println(response); assert !response.contains("Erro"); } catch (IOException e) { assert false; + } catch (Exception e) { + assert false; } } diff --git a/src/main/java/tests/JconSMB23Test.java b/src/main/java/tests/JconSMB23Test.java index 9f109a3..d2f3075 100644 --- a/src/main/java/tests/JconSMB23Test.java +++ b/src/main/java/tests/JconSMB23Test.java @@ -1,10 +1,13 @@ package tests; +import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation; import com.marlonrcfranco.JconSMB23; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; +import java.nio.file.FileAlreadyExistsException; +import java.util.ArrayList; class JconSMB23Test { @@ -133,6 +136,9 @@ public void listFiles() { response = jSMBJ.listFiles(IP,"Marlon",user,pass); assert response.contains("fileTest123.xml"); + ArrayList list = jSMBJ.listFilesAsList(IP,"Marlon",user,pass); + assert list.size()==response.split("\\n").length; + response = jSMBJ.delete(IP,"/Marlon/Teste/fileTest123.xml",user,pass); System.out.println(response); assert !response.contains("Erro"); @@ -141,6 +147,8 @@ public void listFiles() { assert !response.contains("Erro"); } catch (IOException e) { assert false; + } catch (Exception e) { + e.printStackTrace(); } } diff --git a/target/classes/com/marlonrcfranco/IJcon$types.class b/target/classes/com/marlonrcfranco/IJcon$types.class index 738f146..d039768 100644 Binary files a/target/classes/com/marlonrcfranco/IJcon$types.class and b/target/classes/com/marlonrcfranco/IJcon$types.class differ diff --git a/target/classes/com/marlonrcfranco/IJcon.class b/target/classes/com/marlonrcfranco/IJcon.class index 79a2b3d..639b3e5 100644 Binary files a/target/classes/com/marlonrcfranco/IJcon.class and b/target/classes/com/marlonrcfranco/IJcon.class differ diff --git a/target/classes/com/marlonrcfranco/Jcon.class b/target/classes/com/marlonrcfranco/Jcon.class index 7e2b3dd..8e41f3e 100644 Binary files a/target/classes/com/marlonrcfranco/Jcon.class and b/target/classes/com/marlonrcfranco/Jcon.class differ diff --git a/target/classes/com/marlonrcfranco/JconFileSystem.class b/target/classes/com/marlonrcfranco/JconFileSystem.class index bcdc8a7..8d3a7fe 100644 Binary files a/target/classes/com/marlonrcfranco/JconFileSystem.class and b/target/classes/com/marlonrcfranco/JconFileSystem.class differ diff --git a/target/classes/com/marlonrcfranco/JconNFS.class b/target/classes/com/marlonrcfranco/JconNFS.class index 66cc66a..b7a9339 100644 Binary files a/target/classes/com/marlonrcfranco/JconNFS.class and b/target/classes/com/marlonrcfranco/JconNFS.class differ diff --git a/target/classes/com/marlonrcfranco/JconSMB1.class b/target/classes/com/marlonrcfranco/JconSMB1.class index 9707c90..f066444 100644 Binary files a/target/classes/com/marlonrcfranco/JconSMB1.class and b/target/classes/com/marlonrcfranco/JconSMB1.class differ diff --git a/target/classes/com/marlonrcfranco/JconSMB23.class b/target/classes/com/marlonrcfranco/JconSMB23.class index 350b42f..f1bdf3b 100644 Binary files a/target/classes/com/marlonrcfranco/JconSMB23.class and b/target/classes/com/marlonrcfranco/JconSMB23.class differ diff --git a/target/classes/com/marlonrcfranco/Main.class b/target/classes/com/marlonrcfranco/Main.class index 5ece0ac..73cd3f9 100644 Binary files a/target/classes/com/marlonrcfranco/Main.class and b/target/classes/com/marlonrcfranco/Main.class differ diff --git a/target/classes/com/marlonrcfranco/Util.class b/target/classes/com/marlonrcfranco/Util.class index d947785..bace74d 100644 Binary files a/target/classes/com/marlonrcfranco/Util.class and b/target/classes/com/marlonrcfranco/Util.class differ diff --git a/target/classes/tests/JconFileSystemTest.class b/target/classes/tests/JconFileSystemTest.class index 675a389..0348cb8 100644 Binary files a/target/classes/tests/JconFileSystemTest.class and b/target/classes/tests/JconFileSystemTest.class differ diff --git a/target/classes/tests/JconSMB1Test.class b/target/classes/tests/JconSMB1Test.class index ad53b76..6c590d0 100644 Binary files a/target/classes/tests/JconSMB1Test.class and b/target/classes/tests/JconSMB1Test.class differ diff --git a/target/classes/tests/JconSMB23Test.class b/target/classes/tests/JconSMB23Test.class index d598fc3..af8fa07 100644 Binary files a/target/classes/tests/JconSMB23Test.class and b/target/classes/tests/JconSMB23Test.class differ diff --git a/target/jcon.jar b/target/jcon.jar index c03871c..9cac1eb 100644 Binary files a/target/jcon.jar and b/target/jcon.jar differ