const passport = require("passport");
const urlencode = require("urlencode");
const async = require("async");
const crypto = require("crypto");
const fs =require('fs')
const path = require("path");

exports = module.exports = function (logger, rest, settings) {
  function index(req, res, next) {
    logger.info(req);
    // res.redirect("https://www.baidu.com");
  }

  function getImg(req, res, next) {
    logger.info(req.url, "1231231231");
    const parentdir = path.resolve(__dirname, "..")
    const paths = parentdir+'/build/public'+urlencode.decode(req.url, 'utf8')
    fs.readFile(paths,function(err,data){
      console.log(err,data)
      if (err) {
        res.send('读取错误')
      } else {
        res.send(data)
      }
    })
  }

  function indexPrefix(req, res) {
    // logger.info(req.csrfToken(),'req.cssadasdas');
    res.send({data:req.csrfToken()})
    // if (req.csrfToken) {
    //   if (settings.prefix && settings.prefix.length > 1) {
    //     res.redirect(settings.prefix.substring(0, settings.prefix.length - 1));
    //   } else {
    //     res.render("index", { csrfToken: req.csrfToken() });
    //   }
    // } else res.render("index", { csrfToken: "" });
  }

  function productDes(req, res, next) {
    if (req.csrfToken)
      res.render("chat/new-chat", { csrfToken: req.csrfToken() });
    else res.render("chat/new-chat", { csrfToken: "" });
  }

  function recharge(req, res) {
    var params = JSON.parse(urlencode.decode(req.query.params));
    console.log(params);
    if (req.csrfToken)
      res.render("recharge", { recharge: params, csrfToken: req.csrfToken() });
    else res.render("recharge", { recharge: params, csrfToken: "" });
  }

  function register(req, res, next) {
    if (req.csrfToken)
      res.render("newRegister", { csrfToken: req.csrfToken() });
    else res.render("newRegister", { csrfToken: "" });
  }

  function mobileRegister(req, res) {
    if (req.csrfToken)
      res.render("registerMobile", { csrfToken: req.csrfToken() });
    else res.render("registerMobile", { csrfToken: "" });
  }

  function mobileRegisterSuccess(req, res) {
    if (req.csrfToken)
      res.render("registerMobileSuccess", { csrfToken: req.csrfToken() });
    else res.render("registerMobileSuccess", { csrfToken: "" });
  }

  function signIn(req, res, next) {
    //	console.log(req);
    if (req.csrfToken) res.render("newLogin", { csrfToken: req.csrfToken() });
    else res.render("newLogin", { csrfToken: "" });
  }

  function doLogin(req, res, next) {
    passport.authenticate("local", function (err, user, info) {
      console.log("doLogin:", err, user, info);
      if (err) {
        return next(err);
      }
      if (!user) {
        return res.send(info);
      }
      req.logIn(user, function (err) {
        if (err) {
          return next(err);
        }
        return res.send({
          ok: "登录成功",
          user_info: req.session.passport.user.user_info,
        });
      });
    })(req, res, next);
  }

  function signOut(req, res, next) {
    if (
      req.session.passport &&
      req.session.passport.user &&
      req.session.passport.user.user_info &&
      req.session.passport.user.user_info.user
    )
      logger.info(
        req.session.passport.user.user_info.user,
        "You have successfully logged out"
      );
    req.logout();
    req.flash("success", "You have successfully logged out");
    res.redirect("/");
  }

  function smsCodes(req, res, next) {
    rest.postJson({
      baseUrl: "url",
      url: "auth/smscodes",
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      if (response.statusCode < 300) {
        res.send({ code: 200, message: "发送成功" });
      } else {
        res.send(data);
      }
    }
  }

  function tenants(req, res, next) {
    rest.register({
      baseUrl: "url",
      url: "tenants",
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function resetPass(req, res) {
    rest.putJson({
      baseUrl: "url",
      url: "auth/user",
      params: {
        user: req.body.user,
        password: req.body.password,
        again_password: req.body.again_password,
      },
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function updatePassword(req, res) {
    rest.patchJson({
      baseUrl: "url",
      url: "users/" + req.body.userId,
      params: {
        password: req.body.password,
      },
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function loadUserInfo(req, res) {
    settings;
    if (req.session.passport.user && req.session.passport.user.user_info) {
      res.send({
        user_info: req.session.passport.user.user_info,
        prefix: settings.prefix,
      });
    } else {
      res.send({ user_info: null, prefix: settings.prefix });
    }
  }

  function getUploaderToken(req, res) {
    rest.postJson({
      baseUrl: "ossUrl",
      url: "inits",
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function getObjectTokenByID(req, res) {
    rest.get({
      baseUrl: "ossUrl",
      url: "objects/" + req.body.file_id,
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function delOSSObject(req, res) {
    rest.del({
      baseUrl: "ossUrl",
      url:
        "s3objects/" +
        req.body.request_id +
        "?bucket=" +
        req.body.bucket +
        "&file=" +
        req.body.name,
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      console.log(response.statusCode);
      if (response.statusCode < 300) {
        res.send({ delete: "ok" });
      }
    }
  }

  function smsVerification(req, res) {
    rest.postJson({
      baseUrl: "url",
      url: "auth/sms_verification",
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      if (response.statusCode < 300) {
        res.send({ code: 200, message: "发送成功" });
      } else {
        res.send({
          code: response.statusCode,
          message: data.message,
          errors: data.errors,
        });
      }
    }
  }

  function healthMonitor(res) {
    res.statusCode = 200;
    return res.send("status ok");
  }

  function updateUserRoles(req, res) {
    rest.putJson({
      baseUrl: "url",
      url: "user_roles/" + req.body.user_id,
      params: req.body.roles,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      if (response.statusCode < 300) {
        res.send({ back: "ok" });
      } else {
        res.send(data);
      }
    }
  }

  function getRoles(req, res) {
    rest.get({
      baseUrl: "url",
      url: "roles",
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function getUserRoles(req, res) {
    rest.get({
      baseUrl: "url",
      url:
        "user_roles?user=" +
        urlencode(req.body.user) +
        "&limit=" +
        req.body.limit +
        "&offset=" +
        req.body.offset,
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function getTenant(req, res) {
    rest.get({
      baseUrl: "url",
      url: "tenants/" + req.body.tenant_id,
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function updateTenant(req, res) {
    rest.putJson({
      baseUrl: "url",
      url: "tenants/" + req.body.tenant_id,
      params: req.body.tenant,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function offer(req, res) {
    rest.get({
      baseUrl: "hrUrl",
      url:
        "offers/" + req.params.requestId + "?tenant_id=" + req.query.tenant_id,
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      //res.send(data);
      console.log(data);
      data["offerId"] = req.params.requestId;
      data["tenantId"] = req.query.tenant_id;
      res.render("offer", data);
    }
  }

  function onboardStatus(req, res) {
    rest.get({
      baseUrl: "hrUrl",
      url: "onboard-status",
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
      useUrl: true,
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function dowloadApp(req, res) {
    var mobileAgent = req.headers["user-agent"].toLowerCase();
    var agent = {
      android:
        mobileAgent.indexOf("android") > -1 || mobileAgent.indexOf("Adr") > -1,
      iPhone: mobileAgent.indexOf("iphone") > -1,
      iPad: mobileAgent.indexOf("ipad") > -1,
    };
    if (agent.iPhone || agent.iPad) {
      res.redirect(
        301,
        "https://itunes.apple.com/cn/app/%E8%96%AA%E5%91%97/id1140779439?l=en&mt=8"
      );
    } else if (agent.android) {
      res.redirect(
        301,
        "http://krhrimg.oss-cn-beijing.aliyuncs.com/appdownload/production/android/krhr-android.apk"
      );
    } else {
      res.redirect(
        301,
        "http://krhrimg.oss-cn-beijing.aliyuncs.com/appdownload/production/android/krhr-android.apk"
      );
    }
  }

  function softwareLicense(res) {
    res.render("softwareLicense");
  }

  function changePassForRegister(req, res) {
    var options = {
      baseUrl: "url",
      url: "users/" + req.body.user_id,
      params: {
        password: req.body.password,
      },
      callback: _cb,
      req: req,
      res: res,
      options: {},
    };
    if (req.body.access_token) {
      console.log("@@@!!!!!!!!!!!!!!!!");
      options.options = {
        accessToken: req.body.access_token,
      };
      options["excludeToken"] = true;
    }
    rest.patchJson(options);
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function changeTenant(req, res) {
    var params = {
      grant_type: "refresh_token",
      scope: "global_access:tenant_admin,tenant:" + req.body.id,
      refresh_token: req.session.passport.user.refreshToken,
    };
    req.session.passport.user.token = "";
    rest.postJson({
      baseUrl: "url",
      url:
        settings.restful.url +
        "uaa" +
        settings.restful.version +
        "/auth/tokens",
      useUrl: true,
      params: params,
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
    });
    function _cb(data, response) {
      console.log(data);
      logger.info("back data:", data);
      if (response.statusCode < 300) {
        req.session.passport.user.token = data.access_token;
        req.session.passport.user.refreshToken = data.refresh_token;
        req.session.passport.user.user_info = {
          user: data.user,
          perms: [],
          tenant: data.tenant,
          scope: data.scope,
          oss: req.session.passport.user.user_info.oss,
        };
        req.session.save(function () {
          rest.get({
            baseUrl: "url",
            url:
              settings.restful.url +
              "uaa" +
              settings.restful.version +
              "/perms/detail",
            useUrl: true,
            params: {},
            callback: _scb,
            req: req,
            res: res,
            options: {},
          });
        });
      } else {
        res.send({
          code: response.statusCode,
          message: data.message,
          initialize_done: "n",
        });
      }
    }
    function _scb(data1, response) {
      if (response.statusCode < 300 && data1.items) {
        req.session.passport.user.user_info.perms = data1.items;
        req.session.save(function () {
          // res.send({"code":200,"message":"切换租户成功"});
          rest.get({
            baseUrl: "url",
            url:
              settings.restful.url +
              "filemeta" +
              settings.restful.version +
              "/config",
            useUrl: true,
            params: {},
            callback: _scb1,
            req: req,
            res: res,
            options: {},
          });
        });
      } else {
        res.send({ code: response.statusCode, message: data1.message });
      }
    }
    function _scb1(data2, response) {
      if (response.statusCode < 300 && data2 && data2.bucket) {
        req.session.passport.user.user_info.oss = data2;
        req.session.save(function () {
          res.send({ code: 200, message: "切换租户成功" });
        });
      } else {
        res.send({ code: 200, message: "切换租户失败" });
      }
    }
  }

  function sendRejectOffer(req, res) {
    rest.get({
      baseUrl: "hrUrl",
      url: req.body.url, //传一个参数
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
      useUrl: true,
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      if (response.statusCode < 300) {
        res.send({ action: "ok" });
      } else {
        res.send(data);
      }
    }
  }

  function acceptOffer(req, res) {
    rest.get({
      baseUrl: "hrUrl",
      url: req.body.url, //传一个参数
      params: {},
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
      useUrl: true,
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      if (response.statusCode < 300) {
        res.send({ action: "ok" });
      } else {
        res.send(data);
      }
    }
  }

  function imTokens(req, res) {
    rest.post({
      url: "auth/im_tokens",
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function listChannels(req, res) {
    rest.get({
      baseUrl: "chatUrl",
      url: "channels?page_size=10&page=0&status=active",
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    });
    function _cb(data, response) {
      logger.info("back data:", data);
      res.send(data);
    }
  }

  function filemeta(req, res) {
    var fullPath =
      settings.restful.url +
      "filemeta" +
      settings.restful.version +
      "/object-redirect";
    fullPath =
      fullPath +
      "?" +
      "bucket=" +
      req.query.bucket +
      "&object=" +
      encodeURIComponent(req.query.object);
    console.info("fullPath::::::", fullPath);
    var options = {
      service_catalog: "",
      url: fullPath,
      useUrl: true,
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    };
    rest.get(options);
    function _cb(data, response) {
      if (data && data.download_url) {
        if (req.query.type && "json" == req.query.type) {
          res.send(data);
        } else {
          var url = data.download_url;
          let path = url.split("?")[0];
          let pathArray = path.split("/");
          let result = [];
          for (var i = 0; i < pathArray.length; i++) {
            if (i == pathArray.length - 1) {
              result.push(encodeURIComponent(pathArray[i]));
            } else {
              result.push(pathArray[i]);
            }
          }
          let result1 = result.join("/");
          if (url.indexOf("?") !== -1) {
            result1 += "?" + url.split("?")[1];
          }
          if (req.query.result_callback) {
            res.send(data);
          } else {
            res.redirect(301, result1);
          }
        }
      } else {
        res.send(data);
      }
    }
  }

  function getCustomerQrcode(req, res) {
    var fullPath =
      settings.restful.url +
      "crm" +
      settings.restful.version +
      "/customers/" +
      req.query.id +
      "/qrcode";
    var options = {
      service_catalog: "",
      url: fullPath,
      useUrl: true,
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    };
    rest.get(options);
    function _cb(data, response) {
      if (data && data.url_path) {
        res.redirect(301, data.url_path);
      } else {
        res.send(data);
      }
    }
  }

  function getPositionQrcode(req, res) {
    var fullPath =
      settings.restful.url +
      "recruit" +
      settings.restful.version +
      "/positions/" +
      req.query.id +
      "/qrcode";
    var options = {
      service_catalog: "",
      url: fullPath,
      useUrl: true,
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    };
    rest.get(options);
    function _cb(data, response) {
      if (data && data.url_path) {
        res.redirect(301, data.url_path);
      } else {
        res.send(data);
      }
    }
  }

  function getOSSConfig(req, res) {
    var fullPath =
      settings.restful.url + "filemeta" + settings.restful.version + "/config";
    var options = {
      service_catalog: "",
      url: fullPath,
      useUrl: true,
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
    };
    rest.get(options);
    function _cb(data, response) {
      if (data && data.bucket) {
        req.session.passport.user.user_info.oss = data;
        req.session.save(function () {
          res.send({ code: 200, message: "oss配置加载成功" });
        });
      } else {
        res.send({ code: 200, message: "oss配置加载失败" });
      }
    }
  }

  function weidianTempLate(req, res) {
    const { params } = req;
    var fullPath =
      settings.restful.url + "socialwork/internal/minishop/" + params.id;
    var options = {
      service_catalog: "",
      url: fullPath,
      useUrl: true,
      params: req.body,
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
    };
    rest.get(options);
    function _cb(data, response) {
      logger.info("back data:", data);
      if (response.statusCode < 300) {
        const { shop_logo = [], shop_name = "", shop_comment = "" } = data;
        let imgUrl = "";
        if (shop_logo.length > 0) {
          imgUrl = "http://oss.workai.com.cn/public/" + shop_logo[0].object;
        }
        res.render("template/weiDian", {
          imgUrl: imgUrl,
          shop_name: shop_name,
          shop_comment: shop_comment,
        });
      } else {
        res.render("template/weiDian");
      }
    }
  }

  function workaiSecurityOAuth(req, res) {
    var params = req.query;
    if (params.authorization_code) {
      var passport = {
        user: {
          refreshToken: "",
          token: "",
          service_catalog: {},
          user_info: {},
          err: null,
        },
      };
      async.waterfall(
        [
          function (callback) {
            //第三方登录
            var tempParams = {
              grant_type: "authorization_code_v1",
              code: params.authorization_code,
            };
            // var tempParams={
            // 	"grant_type":"password",
            // 	"username":"18510929499",
            // 	"scope":"global_access:tenant_admin",
            // 	"password":"a123456"
            // };
            logger.info(
              "Third login",
              settings.restful.url + "uaa/v1/auth/tokens",
              tempParams
            );
            rest.restful
              .postJson(
                settings.restful.url + "uaa/v1/auth/tokens",
                tempParams,
                {
                  headers: {
                    "Content-Type": "application/json",
                    Accept: "application/json",
                  },
                }
              )
              .on("success", function (data) {
                logger.info("Third login json data:", data);
                if (data.access_token) {
                  var scopes = data.scope.split(",");
                  passport.user.token = data.access_token;
                  passport.user.refreshToken = data.refresh_token;
                  passport.user.user_info = data.user || {};
                  passport.user.tenant_info = data.tenant;
                  passport.user.customer_info = data.customer;
                  passport.user.user_info.perms = data.perms;
                  passport.user.type = data.user.type;
                  passport.user.real_auth_status = data.user.real_auth_status;
                  passport.user.credential_status = data.user.credential_status;
                  passport.user.user_info.scope = scopes[0];
                  callback(null, data);
                } else {
                  var err = new Error("Third login err");
                  passport.user.err = data.message;
                  callback(err, data);
                }
              })
              .on("error", function (err, response) {
                logger.error("Third login error", err);
                var err = new Error("Third login err");
                callback(err, response);
              })
              .on("fail", function (data, response) {
                logger.error("Third login fail", data);
                callback(data, response);
              });
          },
          function (data, callback) {
            //获取机构列表
            var tempHead = {};
            var ip = req.ip.match(/\d+\.\d+\.\d+\.\d+/)[0];
            var user_agent = req.headers["user-agent"] || "";
            tempHead["SXClientIP"] = ip;
            tempHead["User-Agent"] = user_agent;
            logger.info(
              "Third login tenants",
              settings.restful.url + "uaa/v1/tenants?all=true",
              { accessToken: data.access_token, headers: tempHead }
            );
            rest.restful
              .get(settings.restful.url + "uaa/v1/tenants?all=true", {
                accessToken: data.access_token,
                headers: tempHead,
              })
              .on("success", function (data1) {
                logger.info("Third login tenants list:", data1);
                if (data1 && data1.items && data1.items.length > 0) {
                  callback(null, data1.items);
                } else {
                  var err = new Error("Third login tenants list err");
                  passport.user.err = data.message;
                  callback(err, data);
                }
              })
              .on("error", function (err, response) {
                var err = new Error("Third login tenants list err");
                callback(err, response);
              })
              .on("fail", function (data, response) {
                callback(data, response);
              });
          },
          function (data, callback) {
            //刷新token
            if (data && data.length == 1) {
              var params = {
                grant_type: "refresh_token",
                scope: "global_access:tenant_admin,tenant:" + data[0].id,
                refresh_token: passport.user.refreshToken,
              };
              passport.user.token = "";
              logger.info(
                "Third login tokens",
                settings.restful.url + "uaa/v1/auth/tokens",
                params
              );
              rest.restful
                .postJson(settings.restful.url + "uaa/v1/auth/tokens", params, {
                  headers: {
                    "Content-Type": "application/json",
                    Accept: "application/json",
                  },
                })
                .on("success", function (data2) {
                  logger.info("Third login json data2:", data2);
                  if (data2.access_token) {
                    var scopes = data2.scope.split(",");
                    passport.user.token = data2.access_token;
                    passport.user.refreshToken = data2.refresh_token;
                    passport.user.user_info = data2.user || {};
                    passport.user.tenant_info = data2.tenant;
                    passport.user.customer_info = data2.customer;
                    passport.user.user_info.perms = data2.perms;
                    passport.user.type = data2.user.type;
                    passport.user.real_auth_status =
                      data2.user.real_auth_status;
                    passport.user.credential_status =
                      data2.user.credential_status;
                    passport.user.user_info.scope = scopes[0];
                    passport.user.user_info.tenant = data2.tenant;
                    passport.user.user_info.user = {
                      credential_status: data2.credential_status,
                      id: data2.id,
                      is_root: data2.is_root,
                      mobile: data2.mobile,
                      name: data2.name,
                      real_auth_status: data2.real_auth_status,
                      status: data2.status,
                      type: data2.type,
                      wx_open_id: data2.wx_open_id,
                    };
                    callback(null, data2);
                  } else {
                    var err = new Error("Third login err");
                    passport.user.err = data2.message;
                    callback(err, data2);
                  }
                })
                .on("error", function (err, response) {
                  logger.error("Third login error", err);
                  var err = new Error("Third login err");
                  callback(err, response);
                })
                .on("fail", function (data2, response) {
                  logger.error("Third login fail", data2);
                  callback(data2, response);
                });
            } else if (data && data.length > 1) {
              //   #/login/choose-tenant
              callback(null, data);
            } else {
              var err = new Error("Third login tenants list item error");
              callback(err, data);
            }
          },
        ],
        function (err, result) {
          if (err) {
            //登陆失败跳转失败页
            res.render("loginerr", { err: err });
          } else if (result instanceof Array && result.length > 1) {
            //登陆成功跳转选择机构页
            req.session.passport = passport;
            req.session.save(function () {
              res.redirect(301, settings.prefix + "#login/choose-tenant");
            });
          } else {
            req.session.passport = passport;
            req.session.save(function () {
              rest.get({
                baseUrl: "url",
                url:
                  settings.restful.url +
                  "uaa" +
                  settings.restful.version +
                  "/perms/detail",
                useUrl: true,
                params: {},
                callback: _scb,
                req: req,
                res: res,
                options: {},
              });
            });
            function _scb(data1, response) {
              if (response.statusCode < 300 && data1.items) {
                req.session.passport.user.user_info.perms = data1.items;
                req.session.save(function () {
                  if (params.redirect_page) {
                    res.redirect(
                      301,
                      settings.prefix + "#" + params.redirect_page
                    ); //登陆成功跳转首页
                  } else {
                    res.redirect(301, settings.prefix + "#container/home"); //登陆成功跳转首页
                  }
                });
              } else {
                if (params.redirect_page) {
                  res.redirect(
                    301,
                    settings.prefix + "#" + params.redirect_page
                  ); //登陆成功跳转首页
                } else {
                  res.redirect(301, settings.prefix + "#container/home"); //登陆成功跳转首页
                }
              }
            }
          }
        }
      );
    }
  }

  function getTastLink(req, res) {
    var url = crypto.createHash("md5").update(req.body.id).digest("hex");
    if (settings.prefix && settings.prefix.length > 1) {
      res.send(
        req.protocol +
          "://" +
          req.get("host") +
          settings.prefix.substring(0, settings.prefix.length - 1) +
          "/socialwork/freedom-jobs/emps/" +
          req.body.id +
          "/" +
          url
      );
    } else {
      res.send({
        url:
          req.protocol +
          "://" +
          req.get("host") +
          "/socialwork/freedom-jobs/emps/" +
          req.body.id +
          "/" +
          url,
      });
    }
  }

  function freedomJobsEmp(req, res) {
    var id = req.params.id;
    // var url = crypto.createHash('md5').update(id).digest('hex');
    if (false) {
      //验证未通过verification != url
      if (settings.prefix && settings.prefix.length > 1) {
        res.redirect(settings.prefix.substring(0, settings.prefix.length - 1));
      } else {
        res.redirect("/");
      }
    } else {
      //验证通过跳转,获取token存到session里
      var passport = {
        user: {
          refreshToken: "",
          token: "",
          service_catalog: {},
          user_info: {},
          err: null,
        },
      };
      var tempParams = {
        grant_type: "client_credential",
        client_id: "340161778618994688", //多宝鱼环境
        client_secret: "0f8c30aa3d15332652f62c3eaf22fdea",
      };
      rest.restful
        .postJson(settings.restful.url + "uaa/v1/auth/tokens", tempParams, {
          headers: {
            "Content-Type": "application/json",
            Accept: "application/json",
          },
        })
        .on("success", function (data) {
          if (data.access_token) {
            var scopes = data.scope.split(",");
            passport.user.token = data.access_token;
            passport.user.refreshToken = data.refresh_token;
            passport.user.user_info = data.user;
            passport.user.tenant_info = data.tenant;
            passport.user.customer_info = data.customer;
            passport.user.user_info.perms = data.perms;
            passport.user.type = data.user.type;
            passport.user.real_auth_status = data.user.real_auth_status;
            passport.user.credential_status = data.user.credential_status;
            passport.user.user_info.scope = scopes[0];
            req.session.passport = passport;
            req.session.save(function () {
              if (settings.prefix && settings.prefix.length > 1) {
                res.redirect(
                  301,
                  settings.prefix.substring(0, settings.prefix.length - 1) +
                    "/#task_assign/" +
                    id
                );
              } else {
                res.redirect(301, "/#task_assign/" + id);
              }
            });
          } else {
            passport.user.err = data.message;
          }
        })
        .on("error", function (err, response) {
          logger.error("Third login error", err);
          var err = new Error("Third login err");
          callback(err, response);
        })
        .on("fail", function (data) {
          logger.error("Third login fail", data);
        });
    }
  }

  function getShortToken(req, res) {
    var params = {
      grant_type: "refresh_token",
      scope: req.session.passport.user.scope,
      refresh_token: req.session.passport.user.refreshToken,
    };
    logger.info("getShortToken:", params);
    rest.postJson({
      baseUrl: "url",
      url:
        settings.restful.url +
        "uaa" +
        settings.restful.version +
        "/auth/tokens",
      useUrl: true,
      params: params,
      callback: _cb,
      req: req,
      res: res,
      options: {},
      excludeToken: true,
    });
    function _cb(data, response) {
      console.log(data);
      logger.info("back data:", data);
      res.send({ code: response.statusCode, access_token: data.access_token });
    }
  }

  return {
    index: index,
    indexPrefix,
    register: register,
    signIn: signIn,
    doLogin: doLogin,
    signOut: signOut,
    smsCodes: smsCodes,
    tenants: tenants,
    productDes: productDes,
    resetPass: resetPass,
    updatePassword: updatePassword,
    loadUserInfo: loadUserInfo,
    getUploaderToken: getUploaderToken,
    getObjectTokenByID,
    delOSSObject: delOSSObject,
    healthMonitor,
    smsVerification,
    updateUserRoles,
    getRoles,
    getUserRoles,
    getTenant,
    updateTenant,
    offer,
    onboardStatus,
    dowloadApp,
    mobileRegister,
    mobileRegisterSuccess,
    softwareLicense,
    recharge,
    changePassForRegister,
    changeTenant,
    sendRejectOffer,
    acceptOffer,
    imTokens,
    listChannels,
    filemeta,
    getCustomerQrcode,
    getPositionQrcode,
    getOSSConfig,
    weidianTempLate,
    workaiSecurityOAuth,
    getTastLink,
    freedomJobsEmp,
    getShortToken,
    getImg
  };
};

exports["@singleton"] = true;
exports["@require"] = ["igloo/logger", "utils/rest", "igloo/settings"];