Package org.codehaus.groovy.grails.plugins.springsecurity.facebook

Source Code of org.codehaus.groovy.grails.plugins.springsecurity.facebook.FacebookAuthenticationProvider

/* Copyright 2006-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.groovy.grails.plugins.springsecurity.facebook;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.security.Authentication;
import org.springframework.security.AuthenticationException;
import org.springframework.security.AuthenticationServiceException;
import org.springframework.security.BadCredentialsException;
import org.springframework.security.providers.AuthenticationProvider;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.util.Assert;

/**
* Finalizes the authentication process by populating the local authorities for the authenticated user.
*
* @author <a href='mailto:beckwithb@studentsonly.com'>Burt Beckwith</a>
*/
public class FacebookAuthenticationProvider implements AuthenticationProvider, InitializingBean {

    private UserDetailsService _userDetailsService;

    /**
     * {@inheritDoc}
     *
     * @see org.springframework.security.providers.AuthenticationProvider#authenticate(
     *org.springframework.security.Authentication)
     */
    public Authentication authenticate(final Authentication authentication) throws AuthenticationException {

        if (!supports(authentication.getClass()) ||
                !(authentication instanceof FacebookAuthenticationToken)) {
            return null;
        }

        FacebookAuthenticationToken token = (FacebookAuthenticationToken) authentication;
        FacebookAuthenticationToken.Status status = token.getStatus();

        switch (status) {
            case success:
                UserDetails userDetails = _userDetailsService.loadUserByUsername(String.valueOf(token.getUserId()));
                return new FacebookAuthenticationToken(userDetails.getAuthorities(),
                        token.getUserId(), token.getSessionKey());
            case failure:
                throw new BadCredentialsException("Log in failed - identity could not be verified");
            case error:
                throw new AuthenticationServiceException("Error message from server: " + token.getErrorMessage());
        }

        // unreachable
        return null;
    }

    /**
     * Dependency injection for the user detail service.
     *
     * @param userDetailsService the service
     */
    public void setUserDetailsService(final UserDetailsService userDetailsService) {
        _userDetailsService = userDetailsService;
    }

    /**
     * {@inheritDoc}
     *
     * @see org.springframework.security.providers.AuthenticationProvider#supports(java.lang.Class)
     */
    @SuppressWarnings("unchecked")
    public boolean supports(final Class authentication) {
        return FacebookAuthenticationToken.class.isAssignableFrom(authentication);
    }

    /**
     * {@inheritDoc}
     *
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     */
    public void afterPropertiesSet() {
        Assert.notNull(_userDetailsService, "The userDetailsService must be set");
  }
}
TOP

Related Classes of org.codehaus.groovy.grails.plugins.springsecurity.facebook.FacebookAuthenticationProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.