//package com.mortals.coops.base.login.web;
//
//import java.net.URLEncoder;
//import java.util.Date;
//import java.util.List;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import com.mortals.coops.base.system.user.model.UserEntity;
//import org.apache.commons.lang.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.BeanUtils;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.context.request.RequestAttributes;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//import com.alibaba.fastjson.JSONObject;
//import com.mortals.framework.model.Context;
//import com.mortals.iot.portal.sso.client.SsoClient;
//import com.mortals.iot.portal.sso.client.model.SsoCookie;
//import com.mortals.iot.portal.sso.client.model.SsoUser;
//import com.mortals.iot.portal.sso.client.model.SsoUserQueryReq;
//
////@RestController
//public class SsoController extends LoginController {
//
//    private static Logger log = LoggerFactory.getLogger(SsoController.class);
//
//    public SsoController() {
//        log.info("============SSO登录模式，启动业务平台============");
//    }
//
//    @Override
//    public String login(HttpServletRequest request, HttpServletResponse response, LoginForm loginForm)
//            throws Exception {
//        // 统一登录时进入>>>>>>>>>>>>>
////        log.info("request.getServerName()=====" + request.getServerName());
//       // SsoClient.getConfiguration().setCookieDomain(request.getServerName());
//        //SsoClient.getConfiguration().setCookieDomain("192.168.2.81");
//        String sign = request.getParameter("sign");
//        SsoCookie ssoCookie = null;
//        String originHeads = request.getHeader("Origin");
//        response.setHeader("Access-Control-Allow-Origin", originHeads);
//        response.setHeader("Access-Control-Allow-Credentials", "true");
//        if (sign != null && !sign.isEmpty()) {
//            ssoCookie = SsoClient.decryptSign(request, response);
//            if (ssoCookie == null || ssoCookie.getSsoUser() == null) {// 解密失败
//                log.error("解密失败,返回到登录:" + sign);
//                this.logout(request, response);
//            } else {
//                UserEntity localUser = saveUser(ssoCookie.getSsoUser());// 保存用户信息到本地
//                super.recordSysLog(request, localUser, "用户登录");
//                // 转换为业务平台用户信息,并种植cookie，以解决sso和业务平台用户ID不一至问题
//                BeanUtils.copyProperties(localUser, ssoCookie.getSsoUser());
//                SsoClient.setLoginCookie(ssoCookie, response);
//            }
//            return "";
//        }
//        // <<<<<<<<<<<<<
//        // 非统一登录时进入>>>>>>>>>>>>>
//        logout(request, response);
//        return null;
//    }
//
//    /*
//     * sso时，重写此方法，用于检查是否需要重定向到sso服务地址(未登录、已登录、修改密码重定向)
//     */
//    @Override
//    public void logout(HttpServletRequest request, HttpServletResponse response) throws Exception {
//        JSONObject ret = new JSONObject();
//        JSONObject data = new JSONObject();
//        String redirect = StringUtils.defaultString(request.getParameter("redirect"));
//        if (!redirect.isEmpty() && SsoClient.getConfiguration().getChangePwdUrl().endsWith(redirect)) {// 修改密码跳转
//            response.sendRedirect(SsoClient.getConfiguration().getChangePwdUrl());
//        } else if (!redirect.isEmpty()) {// 未登录和已登录跳转
//            SsoCookie info = SsoClient.getLoginCookie(request);
//            if (info == null || info.getSsoUser() == null) {// 未登录
////                log.error("从请求中获取cookie失败");
//                redirect = URLEncoder.encode(redirect, "UTF-8");
//                response.sendRedirect(SsoClient.getConfiguration().getLogoutUrl(redirect));
//            } else {// 已登录
//                response.sendRedirect("/");
//            }
//        } else {// 正常退出
//            this.doLogout(request, response);
//        }
//        ret.put(KEY_RESULT_DATA, data);
//        ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
//        this.writeResponse(response, ret.toJSONString());
//    }
//
//    public void doLogout(HttpServletRequest request, HttpServletResponse response) throws Exception {
//        recordSysLog(request, "退出登录");
//        super.removeCurrUser(request, response);
//        super.deleteBlackCookie(request, response);
//        SsoClient.deleteLoginCookie(response);
//    }
//
//    /**
//     * 同步用户信息 demo
//     * @param req
//     */
//    @RequestMapping(value = "syncSsoUsers")
//    public void syncSsoUsers(SsoUserQueryReq req) {
//        SsoUserQueryReq queryReq = new SsoUserQueryReq();
//        List<SsoUser> ssoUsers = SsoClient.querySsoUser(queryReq);
//        ssoUsers.stream().forEach(user -> {
//            saveUser(user); // 保存用户信息到本地
//        });
//    }
//
//    /**
//     * 保存登录用户信息到本地用户表
//     * @param ssoUser
//     */
//    private UserEntity saveUser(SsoUser ssoUser) {
//        RequestAttributes requstAttr = RequestContextHolder.getRequestAttributes();
//        HttpServletRequest request = ((ServletRequestAttributes) requstAttr).getRequest();
//        String ip = this.getRequestIP(request);
//        // 用户不存时，添加用户到本地用户表
//        UserEntity query = new UserEntity();
//        query.setId(ssoUser.getId());
//        List<UserEntity> userEntities = getService().find(query, null);
//        Date currDate = new Date();
//        if (userEntities.isEmpty()) {
//            try {
//                UserEntity entity = new UserEntity();
//                BeanUtils.copyProperties(ssoUser, entity);
//                entity.setCreateTime(currDate);
//                entity.setUpdateTime(currDate);
//                entity.setLastLoginTime(currDate);
//                entity.setLastLoginAddress(ip);
//                return getService().save(entity, getContext());
//            } catch (Exception e) {
//                if (e instanceof org.springframework.dao.DuplicateKeyException) {
//                    userEntities = getService().find(query, null);
//                } else {
//                    throw e;
//                }
//            }
//        }
//        if (userEntities.isEmpty()) {
//            throw new RuntimeException("未找到匹配的用户信息");
//        }
//        UserEntity entity = userEntities.stream().findFirst().get();
//        UserEntity uUserEntity = new UserEntity();
//        uUserEntity.setId(entity.getId());
//        uUserEntity.setUpdateTime(currDate);
//        uUserEntity.setLastLoginTime(currDate);
//        uUserEntity.setLastLoginAddress(ip);
//        uUserEntity.setRealName(ssoUser.getRealName());
//        uUserEntity.setMobile(ssoUser.getMobile());
//        uUserEntity.setUserType(ssoUser.getUserType());
//        uUserEntity.setStatus(ssoUser.getStatus());
//        uUserEntity.setCustomerId(ssoUser.getCustomerId());
//
//        Context context = getContext();
//        context.setUser(entity);
//        getService().update(uUserEntity, context);
//        return entity;
//    }
//}
