class GitsController < ApplicationController

  #供git-workhorse反向调用认证
  def auth
    # HTTP_AUTHORIZATION: "Basic 这里base64编码的的密码(user:passwd)"
    logger.info("11111112222223333#{request.env["HTTP_AUTHORIZATION"]}")
    #logger.info("#########-----request_env: #{request.env}")
    # {"service"=>"git-receive-pack", "controller"=>"gits", "action"=>"auth",
    # "url"=>"forge01/cermyt39.git/info/refs"}
    #
    gituser = edu_setting('git_username')
    gitpassword = edu_setting('git_password')

    result = false
    if request.env["HTTP_AUTHORIZATION"] && request.env["HTTP_AUTHORIZATION"].split(" ").length == 2
      username_password = Base64.decode64(request.env["HTTP_AUTHORIZATION"].split(" ")[1])
      input_username = username_password.split(":")[0].strip()
      input_password = username_password.split(":")[1].strip()
      uid_logger("git start auth: input_username is #{input_username}")

      # Git 超级权限用户
      if input_username == gituser && input_password == gitpassword
        result = true
      else
        # 用户是否对对象拥有权限
        system_user = User.find_by_login(input_username) || User.find_by_mail(input_username) || User.find_by_phone(input_username)

        # 如果用户名密码错误
        if !system_user.check_password?(input_password)
          uid_logger_error("git start: password is wrong")
          result = false
        else
          git_url = params["url"]
          username = git_url.split("/")[0]
          shixunname = git_url.split("/")[1].split(".")[0]
          repo_name = username + "/" + shixunname
          uid_logger("git start: repo_name is #{repo_name}")
          shixun = Shixun.select([:id, :user_id, :repo_name, :identifier]).where(repo_name: repo_name).first
          uid_logger("git start auth: shixun identifier is #{shixun.try(:identifier)}")
          uid_logger("git start auth: systemuser is #{system_user.try(:login)}")

          if shixun.present?
            if system_user.present? && system_user.manager_of_shixun?(shixun)
              result = true
            else
              logger.info("git411 start")
              result = false
            end
          else
            render :json => { :status => 404 }
            result = false
          end
        end
      end
    end

    authenticate_or_request_with_http_basic do |username, password|
      result
    end
  end

end