Pop3State.java

/*
 * Copyright (c) 2014 Wael Chatila / Icegreen Technologies. All Rights Reserved.
 * This software is released under the Apache license 2.0
 * This file has been used and modified.
 * Original file can be found on http://foedus.sourceforge.net
 */
package com.icegreen.greenmail.pop3;

import com.icegreen.greenmail.imap.ImapHostManager;
import com.icegreen.greenmail.store.FolderException;
import com.icegreen.greenmail.store.MailFolder;
import com.icegreen.greenmail.user.GreenMailUser;
import com.icegreen.greenmail.user.NoSuchUserException;
import com.icegreen.greenmail.user.UserException;
import com.icegreen.greenmail.user.UserManager;


public class Pop3State {
    UserManager manager;
    GreenMailUser user;
    MailFolder inbox;
    private ImapHostManager imapHostManager;

    public Pop3State(UserManager manager) {
        this.manager = manager;
        this.imapHostManager = manager.getImapHostManager();
    }

    public GreenMailUser getUser() {
        return user;
    }

    public GreenMailUser getUser(String username) throws UserException {
        GreenMailUser user = manager.getUser(username);
        if (null == user) {
            throw new NoSuchUserException("User <" + username + "> doesn't exist");
        }
        return user;
    }

    public void setUser(GreenMailUser user) {
        this.user = user;
    }

    public boolean isAuthenticated() {
        return inbox != null;
    }

    public void authenticate(String pass)
            throws UserException, FolderException {
        if (user == null)
            throw new UserException("No user selected");

        if (manager.isAuthRequired()) {
            user.authenticate(pass);
        }
        inbox = imapHostManager.getInbox(user);
    }

    public MailFolder getFolder() {
        return inbox;
    }

    public GreenMailUser findOrCreateUser(String username) throws UserException {
        if (manager.hasUser(username)) {
            return manager.getUser(username);
        }
        if (!manager.isAuthRequired()) {
            return manager.createUser(username, username, username);
        }
        throw new UserException("Unable to find or create user '" + username +"'");
    }

}