All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mastfrog.acteur.cookie.auth.CookieAuthenticatorImpl Maven / Gradle / Ivy

There is a newer version: 2.9.7
Show newest version
package com.mastfrog.acteur.cookie.auth;

import com.google.inject.Inject;
import com.mastfrog.acteur.HttpEvent;
import com.mastfrog.acteur.Response;
import com.mastfrog.acteur.cookie.auth.UserFinder.UserAndCookieValue;
import com.mastfrog.util.preconditions.Checks;
import io.netty.handler.codec.http.cookie.Cookie;
import javax.inject.Singleton;

/**
 *
 * @author Tim Boudreau
 */
@Singleton
final class CookieAuthenticatorImpl implements CookieAuthenticator {

    private final AuthCookieWriter writer;

    private final UserFinder userFinder;

    @Inject
     CookieAuthenticatorImpl(AuthCookieWriter writer, UserFinder userFinder) {
        this.writer = writer;
        this.userFinder = userFinder;
    }

    @Override
    public Object[] authenticateRequest(HttpEvent evt) throws Exception {
        Checks.notNull("evt", evt);
        Object[] result = null;
        Cookie ck = writer.findCookie(evt);
        if (ck != null) {
            String cookieValue = ck.value();
            if (cookieValue != null && !cookieValue.isEmpty()) {
                Object user = userFinder.findUser(evt, cookieValue);
                if (user != null) {
                    result = new Object[]{user};
                }
            }
        }
        return result;
    }

    @Override
    public Object[] login(HttpEvent evt, LoginInfo info, Response response) throws Exception {
        Checks.notNull("evt", evt);
        Checks.notNull("info", info);
        Checks.notNull("response", response);
        UserAndCookieValue userAndCookie = userFinder.login(info, evt, response);
        if (userAndCookie != null) {
            writer.setCookie(evt, userAndCookie.cookie, response);
        }
        Object[] result = userAndCookie == null ? null : new Object[]{userAndCookie.user};
        return result;
    }

    @Override
    public void logout(HttpEvent evt, Response response) {
        Checks.notNull("evt", evt);
        Checks.notNull("response", response);
        writer.discardCookie(evt, response);
    }

    @Override
    public boolean login(Object user, HttpEvent evt, Response response) {
        Checks.notNull("user", user);
        Checks.notNull("evt", evt);
        Checks.notNull("response", response);
        Checks.isInstance("user", userFinder.type(), user);
        return login(user, userFinder, evt, response);
    }

    private  boolean login(Object user, UserFinder finder, HttpEvent evt, Response response) {
        String cookie = finder.login(finder.type().cast(user), evt);
        if (cookie != null) {
            writer.setCookie(evt, cookie, response);
            return true;
        }
        return false;
    }

    @Override
    public String cookieName() {
        return writer.cookieName();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy