Skip to content

Commit

Permalink
Merge pull request #6 from marlonrcfranco/develop
Browse files Browse the repository at this point in the history
v1.0
  • Loading branch information
marlonrcfranco authored Sep 11, 2019
2 parents b4d0962 + e628771 commit 0418f37
Show file tree
Hide file tree
Showing 25 changed files with 116 additions and 37 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>groupId</groupId>
<artifactId>jcon</artifactId>
<version>1.0-SNAPSHOT</version>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/com/marlonrcfranco/IJcon.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.marlonrcfranco;

import java.io.IOException;
import java.util.ArrayList;

public interface IJcon {

Expand Down Expand Up @@ -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)
*
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/marlonrcfranco/Jcon.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.marlonrcfranco;

import java.io.IOException;
import java.util.ArrayList;

public class Jcon implements IJcon{
private IJcon jcon;
Expand Down Expand Up @@ -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<String> 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);
Expand Down
27 changes: 18 additions & 9 deletions src/main/java/com/marlonrcfranco/JconFileSystem.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.marlonrcfranco;

import java.io.*;
import java.util.ArrayList;

public class JconFileSystem implements IJcon{

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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<File> 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<File> listFilesAsList(String IP, String filePath, String user, String pass) throws Exception {
ArrayList<File> 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,"","");
}
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/marlonrcfranco/JconNFS.java
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down Expand Up @@ -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<String> 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("\\", "/");
Expand Down
23 changes: 18 additions & 5 deletions src/main/java/com/marlonrcfranco/JconSMB1.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -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<SmbFile> 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<SmbFile> listFilesAsList(String IP, String filePath, String user, String pass) throws Exception {
ArrayList<SmbFile> 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="";
Expand Down
58 changes: 38 additions & 20 deletions src/main/java/com/marlonrcfranco/JconSMB23.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<FileIdBothDirectoryInformation> 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<FileIdBothDirectoryInformation> listFilesAsList(String IP, String filePath, String user, String pass) throws Exception {
extractSharedPathFromPath(filePath.replace("\\", "/"));
return listFilesAsList(IP, sharedFolder, sFilePath, user, pass, null);
}

public ArrayList<FileIdBothDirectoryInformation> listFilesAsList(String IP, String sharedFolder, String path, String user, String pass, String domain) throws Exception {
ArrayList<FileIdBothDirectoryInformation> 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);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/marlonrcfranco/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -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║ ║" +
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/marlonrcfranco/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,8 @@ public static byte[] toByteArray(InputStream in) throws IOException {
}
return os.toByteArray();
}

public static String getVersion() {
return "1.0";
}
}
7 changes: 7 additions & 0 deletions src/main/java/tests/JconFileSystemTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -173,11 +175,16 @@ public void listFiles() {
System.out.println(response);
assert response.contains("teste10.xml");

ArrayList<File> 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;
}
}

Expand Down
7 changes: 7 additions & 0 deletions src/main/java/tests/JconSMB1Test.java
Original file line number Diff line number Diff line change
@@ -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 {

Expand Down Expand Up @@ -177,12 +179,17 @@ public void listFiles() {
System.out.println(response);
assert response.contains("fileTest123.xml");

ArrayList<SmbFile> 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;
}
}

Expand Down
8 changes: 8 additions & 0 deletions src/main/java/tests/JconSMB23Test.java
Original file line number Diff line number Diff line change
@@ -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 {

Expand Down Expand Up @@ -133,6 +136,9 @@ public void listFiles() {
response = jSMBJ.listFiles(IP,"Marlon",user,pass);
assert response.contains("fileTest123.xml");

ArrayList<FileIdBothDirectoryInformation> 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");
Expand All @@ -141,6 +147,8 @@ public void listFiles() {
assert !response.contains("Erro");
} catch (IOException e) {
assert false;
} catch (Exception e) {
e.printStackTrace();
}
}

Expand Down
Binary file modified target/classes/com/marlonrcfranco/IJcon$types.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/IJcon.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/Jcon.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/JconFileSystem.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/JconNFS.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/JconSMB1.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/JconSMB23.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/Main.class
Binary file not shown.
Binary file modified target/classes/com/marlonrcfranco/Util.class
Binary file not shown.
Binary file modified target/classes/tests/JconFileSystemTest.class
Binary file not shown.
Binary file modified target/classes/tests/JconSMB1Test.class
Binary file not shown.
Binary file modified target/classes/tests/JconSMB23Test.class
Binary file not shown.
Binary file modified target/jcon.jar
Binary file not shown.

0 comments on commit 0418f37

Please sign in to comment.