package org.pac4j.vertx;
import org.pac4j.core.profile.CommonProfile;
import org.pac4j.core.profile.ExtendedProfileManager;
import org.pac4j.vertx.auth.Pac4jUser;
import org.pac4j.vertx.context.session.Session;
import java.util.LinkedHashMap;
import java.util.Optional;
/**
* @author Jeremy Prime
* @since 2.0.0
*/
public class VertxProfileManager extends ExtendedProfileManager<CommonProfile> {
private static final String SESSION_USER_HOLDER_KEY = "__vertx.userHolder";
private final VertxWebContext vertxWebContext;
public VertxProfileManager(final VertxWebContext context) {
super(context);
this.vertxWebContext = context;
}
@Override
protected LinkedHashMap<String, CommonProfile> retrieveAll(final boolean readFromSession) {
final LinkedHashMap<String, CommonProfile> profiles = new LinkedHashMap<>();
final Pac4jUser user = vertxWebContext.getVertxUser();
Optional.ofNullable(user).map(Pac4jUser::pac4jUserProfiles).ifPresent(profiles::putAll);
return profiles;
}
@Override
public void remove(boolean removeFromSession) {
vertxWebContext.removeVertxUser();
}
@Override
public void save(boolean saveInSession, CommonProfile profile, boolean multiProfile) {
final String clientName = retrieveClientName(profile);
final Pac4jUser vertxUser = Optional.ofNullable(vertxWebContext.getVertxUser()).orElse(new Pac4jUser());
vertxUser.setUserProfile(clientName, profile, multiProfile);
vertxWebContext.setVertxUser(vertxUser);
}
@Override
public void removeFromSession(final Session session) {
// Find the user profile in the session, if pac4j user profile
session.remove(SESSION_USER_HOLDER_KEY);
}
}