Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.services.ftpservices;

import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.email.ReadEmailService;
import pt.estgp.estgweb.services.email.IPopEmail;
import pt.estgp.estgweb.services.email.IAddress;
import pt.estgp.estgweb.services.email.impl.DefaultPopEmail;
import pt.estgp.estgweb.services.email.impl.DefaultAddress;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.estgp.estgweb.web.FtpServer;
import org.apache.log4j.Logger;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.fileupload.FileItem;

import java.util.List;
import java.util.Properties;
import java.util.Date;
import java.util.ArrayList;
import java.io.*;

import jomm.utils.DesUtils;
import jomm.utils.StringsUtils;

import javax.mail.*;
import javax.mail.internet.InternetAddress;

/**
 * @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);

    private 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
    {
        if(ftpRequestForm.isSavePassword() && ftpRequestForm.getPassword() != null && ftpRequestForm.getPassword().trim().length() > 0)
        {
            ((UserSessionImpl)userSession).put(FTP_PASSWORD,DesUtils.getInstance().encrypt(ftpRequestForm.getPassword()));
        }
        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);
        1.5.0/docs/api/java/lang/String.html">String password;
        if(passwordCode != null)
        {
            logger.info("using saved password");
            password = DesUtils.getInstance().decrypt(passwordCode);
        }
        else
        {
            logger.info("trying pop 3 password");
            password = DesUtils.getInstance().decrypt(userSession.getUser().getPop3password());
        }
        1.5.0/docs/api/java/lang/String.html">String 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();
        1.5.0/docs/api/java/lang/String.html">String result = "ftp.operation.success";
        client.setFileType(FTP.BINARY_FILE_TYPE);
        client.changeWorkingDirectory(ftpRequestForm.getStartPath());
        if(ftpRequestForm.getFilesToImport() != null)
        {    
            for(FileItem item: ftpRequestForm.getFilesToImport())
            {
                if(!client.storeFile(item.getName(),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;
    }
}