Subversion Repositories bacoAlunos

Rev

Rev 1070 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.ftpservices;

import jomm.utils.DesUtils;
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);
                if(!client.storeFile(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;
    }
}