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

pl.fhframework.Session Maven / Gradle / Ivy

package pl.fhframework;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import pl.fhframework.core.IApplicationInformation;
import pl.fhframework.core.security.AuthorizationManager;
import pl.fhframework.core.session.scope.SessionScopeBeanContainer;
import pl.fhframework.configuration.FHConfiguration;
import pl.fhframework.model.security.SystemUser;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

@Getter
@Setter
public abstract class Session {

    private static final DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH_mm_ss");
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    private static final int ERROR_INFORMATION_LIMIT = 10;

    protected SystemUser systemUser;

    private SessionScopeBeanContainer scopeBeanContainer = new SessionScopeBeanContainer();

    @Setter(AccessLevel.NONE)
    @Autowired
    private FHConfiguration fhConfiguration;

    private SessionDescription description;
    private Instant creationTimestamp;

    // frequently used, expensive generation
    private String creationTimestampString;
    private String creationDateString;

    @Autowired
    private IApplicationInformation applicationInformation;

    // I18n
    private Locale language;

    @Autowired(required = false)
    private AuthorizationManager authorizationManager;

    public Session(SessionDescription description) {
        this.description = description;
        creationTimestamp = Instant.now();
        creationTimestampString = TIMESTAMP_FORMATTER.format(LocalDateTime.ofInstant(creationTimestamp, ZoneId.systemDefault()));
        creationDateString = DATE_FORMATTER.format(LocalDateTime.ofInstant(creationTimestamp, ZoneId.systemDefault()));
    }

    public boolean isDevModeActive() {
        return fhConfiguration.isDevModeActive();
    }

    public boolean isProdModeActive() {
        return fhConfiguration.isProdModeActive();
    }

    public void setLanguage(Locale language) {
        this.language = language;
    }

    public boolean hasAccessTo(String functionName, String moduleUUID) {
        return getAuthorizationManager() != null && getSystemUser() != null && getAuthorizationManager().hasFunction(getSystemUser().getBusinessRoles(), functionName, moduleUUID);
    }

    public abstract boolean isUserContext();

    @Getter
    @Setter
    public static class TimeoutData {
        private Instant now;
        private Instant lastEventTimestamp;
        private String counterElementId;
        private int maxInactivityMinutes;

        public TimeoutData(Instant lastEventTimestamp, String counterElementId, int maxInactivityMinutes) {
            this.now = Instant.now();
            this.lastEventTimestamp = lastEventTimestamp;
            this.counterElementId = counterElementId;
            this.maxInactivityMinutes = maxInactivityMinutes;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy