package com.flyfish.account.config;

import com.flyfish.oauth.client.DefaultOAuth2SsoClient;
import com.flyfish.oauth.client.OAuth2SsoClient;
import com.flyfish.oauth.configuration.OAuth2SsoProperties;
import com.flyfish.oauth.configuration.OAuth2SsoUserService;
import com.flyfish.oauth.configuration.SSOSessionConverter;
import com.flyfish.oauth.domain.SSOUserInfo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.http.HttpSession;

@Configuration
public class BeanConfiguration {

    /**
     * 构建Bean
     * @return 结果
     * 可选附带的参数不需要附带，默认值能够满足业务场景
     * 所有参数都可以以http://附带域名来重置默认url行为（serverUrl和localUrl）
     */
    @Bean
    public OAuth2SsoClient ssoClient() {
        // 构造默认客户端
        DefaultOAuth2SsoClient client = new DefaultOAuth2SsoClient();

        // 构造配置
        OAuth2SsoProperties properties = new OAuth2SsoProperties();
        // 你的clientId
        properties.setClientId("test");
        // 你的clientSecret
        properties.setClientSecret("123456");
        // 你的地址
        properties.setLocalUrl("http://demo.flyfish.group");
        // 认证服务地址
        properties.setServerUrl("http://accounts.flyfish.group");
        // 可选附带，登录回调地址，如果此处配置了回调地址，将替换默认的地址
        properties.setRedirectUri("/oauth/callback");
        // 可选附带，传入的获取token的地址
        properties.setAccessTokenUri("/api/login/oauth/token");
        // 可选附带，传入的授权页（登录页URI）
        properties.setUserAuthorizationUri("/login");
        // 可选附带，检查token有效性的URI
        properties.setCheckAccessTokenUri("/login/oauth/check_token");
        // 可选附带，传入获取用户信息的URI
        properties.setUserInfoUri("/accounts/current");
        // 可选附带，默认client，认证作用域
        properties.setScope("client");
        // 赋值
        client.setProperties(properties);

        // 配置会话转换器
        client.setSessionConverter(new MySessionConverter());
        // 配置用户信息转换器
        client.setUserInfoService(new MyUserService());
        // 初始化，必须执行
        client.init();
        // 返回
        return client;
    }
}