Search in sources :

Example 26 with RequestAction

use of org.ocpsoft.rewrite.annotation.RequestAction in project muikku by otavanopisto.

the class LoginBackingBean method init.

@RequestAction
@Deferred
public String init() {
    try {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExternalContext externalContext = facesContext.getExternalContext();
        Map<String, String[]> requestParameters = externalContext.getRequestParameterValuesMap();
        if (authSourceId == null) {
            authSourceId = loginSessionBean.getAuthSourceId();
        } else {
            loginSessionBean.setAuthSourceId(authSourceId);
        }
        if (StringUtils.isNotBlank(redirectUrl)) {
            loginSessionBean.setPostLoginRedirectUrl(redirectUrl);
        }
        if (authSourceId == null) {
            // authentication source id is not defined, which means that we need to ask the user which he or she is
            // going to use, unless only one source is defined and it's credentialess one, in which case we use that one.
            List<AuthSource> credentialAuthSources = authSourceController.listCredentialAuthSources();
            List<AuthSource> credentialessAuthSources = authSourceController.listCredentialessAuthSources();
            if (credentialAuthSources.isEmpty() && credentialessAuthSources.size() == 1) {
                authSourceId = credentialessAuthSources.get(0).getId();
            }
        }
        if (authSourceId != null) {
            AuthSource authSource = authSourceController.findAuthSourceById(authSourceId);
            if (authSource != null) {
                AuthenticationProvider authenticationProvider = authSourceController.findAuthenticationProvider(authSource);
                if (authenticationProvider != null) {
                    AuthenticationResult result = authenticationProvider.processLogin(authSource, requestParameters);
                    if (StringUtils.isNotBlank(result.getRedirectUrl())) {
                        externalContext.redirect(result.getRedirectUrl());
                    } else {
                        loginSessionBean.setAuthSourceId(null);
                        String postLoginRedirectUrl = loginSessionBean.getPostLoginRedirectUrl();
                        switch(result.getStatus()) {
                            case GRANT:
                                // User granted additional scopes in existing authentication source
                                break;
                            case LOGIN:
                                // User logged in
                                break;
                            case NEW_ACCOUNT:
                                // User created new account
                                break;
                            case CONFLICT:
                                switch(result.getConflictReason()) {
                                    case EMAIL_BELONGS_TO_ANOTHER_USER:
                                        // Could not login, one or more of the email addresses belong to another user
                                        break;
                                    case LOGGED_IN_AS_DIFFERENT_USER:
                                        // Could not login, user is already logged in as a another user
                                        break;
                                    case SEVERAL_USERS_BY_EMAILS:
                                        // Could not login, several users found by email addresses
                                        break;
                                }
                                logger.log(Level.SEVERE, String.format("Authentication failed on with following message: %s", result.getConflictReason().toString()));
                                return NavigationRules.INTERNAL_ERROR;
                            case INVALID_CREDENTIALS:
                                logger.log(Level.SEVERE, "Erroneous authentication provider status: INVALID_CREDENTIALS in external login page");
                                return NavigationRules.INTERNAL_ERROR;
                            case NO_EMAIL:
                                return NavigationRules.AUTH_NOEMAIL;
                            case PROCESSING:
                                logger.log(Level.SEVERE, "Erroneous authentication provider status: PROCESSING without redirectUrl");
                                return NavigationRules.INTERNAL_ERROR;
                            case ERROR:
                                return NavigationRules.INTERNAL_ERROR;
                        }
                        if (StringUtils.isBlank(postLoginRedirectUrl)) {
                            postLoginRedirectUrl = externalContext.getRequestContextPath() + "/";
                        }
                        externalContext.redirect(postLoginRedirectUrl);
                    }
                } else {
                    logger.log(Level.SEVERE, "Invalid authenticationProvider");
                    return NavigationRules.INTERNAL_ERROR;
                }
            } else {
                logger.log(Level.SEVERE, "Invalid authSourceId");
                return NavigationRules.INTERNAL_ERROR;
            }
        }
    } catch (IOException e) {
        logger.log(Level.SEVERE, "Login failed because of an internal error", e);
        return NavigationRules.INTERNAL_ERROR;
    }
    return null;
}
Also used : FacesContext(javax.faces.context.FacesContext) AuthSource(fi.otavanopisto.muikku.model.security.AuthSource) ExternalContext(javax.faces.context.ExternalContext) AuthenticationProvider(fi.otavanopisto.muikku.auth.AuthenticationProvider) IOException(java.io.IOException) AuthenticationResult(fi.otavanopisto.muikku.auth.AuthenticationResult) RequestAction(org.ocpsoft.rewrite.annotation.RequestAction) Deferred(org.ocpsoft.rewrite.faces.annotation.Deferred)

Example 27 with RequestAction

use of org.ocpsoft.rewrite.annotation.RequestAction in project muikku by otavanopisto.

the class SystemCacheFlushBackingBean method init.

@RequestAction
public String init() {
    if (sessionController.hasPermission(MuikkuPermissions.ADMIN, null)) {
        logger.warning("Flushing all caches");
        cacheFlushEvent.fire(new CacheFlushEvent());
    }
    return "/index.jsf?faces-redirect=true";
}
Also used : CacheFlushEvent(fi.otavanopisto.muikku.cache.CacheFlushEvent) RequestAction(org.ocpsoft.rewrite.annotation.RequestAction)

Aggregations

RequestAction (org.ocpsoft.rewrite.annotation.RequestAction)27 WorkspaceEntity (fi.otavanopisto.muikku.model.workspace.WorkspaceEntity)19 UserEntity (fi.otavanopisto.muikku.model.users.UserEntity)5 WorkspaceMaterial (fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterial)4 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 Permission (fi.otavanopisto.muikku.model.security.Permission)3 HashMap (java.util.HashMap)3 EnvironmentRoleEntity (fi.otavanopisto.muikku.model.users.EnvironmentRoleEntity)2 RoleEntity (fi.otavanopisto.muikku.model.users.RoleEntity)2 SystemRoleEntity (fi.otavanopisto.muikku.model.users.SystemRoleEntity)2 WorkspaceEntityFile (fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceEntityFile)2 User (fi.otavanopisto.muikku.schooldata.entity.User)2 Workspace (fi.otavanopisto.muikku.schooldata.entity.Workspace)2 OffsetDateTime (java.time.OffsetDateTime)2 Locale (java.util.Locale)2 AuthenticationProvider (fi.otavanopisto.muikku.auth.AuthenticationProvider)1 AuthenticationResult (fi.otavanopisto.muikku.auth.AuthenticationResult)1 CacheFlushEvent (fi.otavanopisto.muikku.cache.CacheFlushEvent)1 AuthSource (fi.otavanopisto.muikku.model.security.AuthSource)1