package pt.estgp.estgweb.services.ftpservices;
import jomm.utils.DesUtils;
import jomm.utils.DiacriticFilter;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.web.FtpServer;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import java.io.File;
import java.io.IOException;
/**
* @author Jorge Machado
* @date 20/Mar/2008
* @time 18:31:00
* @see pt.estgp.estgweb.services.email
*/
public class FtpService
implements IService
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(FtpService.
class);
public static final 1.5.0/docs/api/java/lang/String.html">String FTP_PASSWORD =
"pt.estgp.estgweb.services.ftpservices.FtpService.FTP_PASSWORD";
public 1.5.0/docs/api/java/lang/String.html">String run
(FtpRequestForm ftpRequestForm, UserSession userSession
) throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
//userSession.getUser().get
boolean isStaticAccess = ConfigProperties.
getBooleanProperty(ftpRequestForm.
getServerConfName()+
".use.default.credentials.to.updates.and.deletes");
1.5.0/docs/api/java/lang/String.html">String password = ftpRequestForm.
getPassword();
1.5.0/docs/api/java/lang/String.html">String username = ftpRequestForm.
getUsername();
//This only works for Contents of CourseUnits, if user uses SavePassword than the password saved will be used
if(!ftpRequestForm.
isSavePassword() && isStaticAccess
)
{
if(ftpRequestForm.
getCourseUnitView() !=
null)
{
CourseUnitImpl courseUnit =
(CourseUnitImpl
) DaoFactory.
getCourseUnitDaoImpl().
load(ftpRequestForm.
getCourseUnitView().
getId());
if(!courseUnit.
isOwnedBy(userSession.
getUser(),
true))
{
logger.
warn("Trying to admin FTP Folder, no permission for username:" + userSession.
getUsername());
return "errors.ftp.no.permission";
}
username = ConfigProperties.
getProperty(ftpRequestForm.
getServerConfName() +
".user");
password = ConfigProperties.
getProperty(ftpRequestForm.
getServerConfName() +
".pass");
}
else
return "errors.ftp.no.permission";
}
else
{
if(ftpRequestForm.
isSavePassword() && ftpRequestForm.
getPassword() !=
null && ftpRequestForm.
getPassword().
trim().
length() > 0
)
{
((UserSessionImpl
)userSession
).
put(FTP_PASSWORD,DesUtils.
getInstance().
encrypt(ftpRequestForm.
getPassword()));
}
//ESTE CAMPO É COLOCADO EM MEMORIA LOGO NA AUTENTICACAO POR ISSO A POP3 PASS NAO CHEGA A SER USADA
//E A POP3PASS DAVA PROBLEMAS SE O USER ALGUMA VEZ A TINHA INICIADO
1.5.0/docs/api/java/lang/String.html">String passwordCode =
(1.5.0/docs/api/java/lang/String.html">String) ((UserSessionImpl
)userSession
).
get(FTP_PASSWORD
);
//System.out.println("SAVEDCODE"+passwordCode);
if(password
!=
null && password.
trim().
length() > 0
)
{
}
else
{
logger.
info("using saved password");
password = DesUtils.
getInstance().
decrypt(passwordCode
);
//System.out.println("SAVEDPASS:" + password);
}
/*else if(userSession.getUser().getPop3password() != null && userSession.getUser().getPop3password().length() > 0)
{
logger.info("trying pop 3 password");
password = DesUtils.getInstance().decrypt(userSession.getUser().getPop3password());
}
else
{
logger.info("trying last used login password");
password = DesUtils.getInstance().decrypt(userSession.getUser().getPassword());
}*/
username = ftpRequestForm.
getUsername();
if(username ==
null || username.
trim().
length() == 0
)
username = userSession.
getUsername();
}
FtpServer server = FtpServer.
getNewServer(ftpRequestForm.
getServerUrl(),username,password
);
FTPClient client = server.
getClient();
if(client ==
null)
{
logger.
warn("###################");
logger.
warn("################### > CANT CONNECT FTP");
return server.
getErrorMsg();
}
1.5.0/docs/api/java/lang/String.html">String result =
"ftp.operation.success";
client.
setFileType(FTP.
BINARY_FILE_TYPE);
logger.
info("changing working path to " + ftpRequestForm.
getStartPath());
client.
changeWorkingDirectory(ftpRequestForm.
getStartPath());
if(ftpRequestForm.
getFilesToImport() !=
null)
{
for(FileItem item: ftpRequestForm.
getFilesToImport())
{
1.5.0/docs/api/java/lang/String.html">String name = item.
getName();
if(name
!=
null)
{
if(name.
length() > 2 && name.
charAt(1)==
':')
{
1.5.0/docs/api/java/lang/String.html">String[] names = name.
split("\\\\");
name = names
[names.
length - 1
];
}
else
{
name =
new 1.5.0/docs/api/java/io/File.html">File(item.
getName()).
getName();
}
}
logger.
info("trying to import file: " + name
);
//client.setControlEncoding("ISO-8859-1");
if(!client.
storeFile(DiacriticFilter.
stripAccents(name
),item.
getInputStream()))
result =
"errors.ftp.no.permission";
}
}
if(ftpRequestForm.
getNewFolderName() !=
null && ftpRequestForm.
getNewFolderName().
trim().
length() > 0
)
{
if(!client.
makeDirectory(ftpRequestForm.
getNewFolderName()))
result =
"errors.ftp.no.permission";
}
if(ftpRequestForm.
getFileToDelete() !=
null && ftpRequestForm.
getFileToDelete().
trim().
length() > 0
)
{
if(!client.
deleteFile(ftpRequestForm.
getFileToDelete()))
result =
"errors.ftp.no.permission";
}
if(ftpRequestForm.
getFolderToDelete() !=
null && ftpRequestForm.
getFolderToDelete().
trim().
length() > 0
)
{
int code = client.
rmd(ftpRequestForm.
getFolderToDelete());
if(code
!= 250
)
{
if(code == 550
)
return "error.ftp.dir.not.empty";
else if(code == 530
)
return "errors.ftp.no.permission";
}
}
client.
quit();
client.
disconnect();
return result
;
}
}