suite.rb 2.22 KB
module Dingtalk
  module Api
    class Suite < Base
      SUITE_TICKET = "suite_ticket"
      SUITE_ACCESS_TOKEN = "suite_access_token"
      EXPIRATION = 7200

      def initialize
        @suite_key = Dingtalk.suite_key
        @suite_secret = Dingtalk.suite_secret
      end

      def get_permanent_code(tmp_auth_code)
        params = {
          suite_access_token: suite_access_token,
          tmp_auth_code: tmp_auth_code
        }
        http_post('get_permanent_code', params)
      end

      def suite_access_token
        redis.get(SUITE_ACCESS_TOKEN) || set_suite_access_token
      end

      def set_suite_access_token
        params = {
          suite_key: @suite_key,
          suite_secret: @suite_secret,
          suite_ticket: suite_ticket
        }
        res = http_post('get_suite_token', params)
        # TODO globally check response values
        redis.set(SUITE_ACCESS_TOKEN, res['suite_access_token'])
        redis.expire(SUITE_ACCESS_TOKEN, EXPIRATION)
        redis.get(SUITE_ACCESS_TOKEN)
      end

      def set_corp_access_token(corp_id, permanent_code)
        params = {
          suite_access_token: suite_access_token,
          permanent_code: permanent_code,
          auth_corpid: corp_id
        }
        res = http_post('get_corp_token', params)
        redis.set("#{corp_id}_#{ACCESS_TOKEN}", res['access_token'])
        redis.expire("#{corp_id}_#{ACCESS_TOKEN}", EXPIRATION)
        redis.get("#{corp_id}_#{ACCESS_TOKEN}")
      end

      def activate_suite(corp_id, permanent_code)
        params = {
          suite_key: @suite_key,
          suite_access_token: suite_access_token,
          permanent_code: permanent_code,
          auth_corpid: corp_id
        }
        http_post('activate_suite', params)
      end

      def get_auth_info(corp_id, permanent_code)
        params = {
          suite_key: @suite_key,
          suite_access_token: suite_access_token,
          permanent_code: permanent_code,
          auth_corpid: corp_id
        }
        http_post('get_auth_info', params)
      end

      def suite_ticket
        redis.get(SUITE_TICKET)
      end

      private
        def default_params
          {}
        end

        def base_url
          'service'
        end
    end
  end
end