class DingtalkHelper
require ‘byebug’
Attributes
access_token[RW]
app_info[RW]
download_url[RW]
image_key[RW]
options[RW]
qrcode_path[RW]
title[RW]
Public Class Methods
new(app_info, options, qrcode_path, download_url)
click to toggle source
# File lib/fir/util/dingtalk_helper.rb, line 10 def initialize(app_info, options, qrcode_path, download_url) @app_info = app_info @options = options @access_token = @options[:dingtalk_access_token] @secret = @options[:dingtalk_secret] @qrcode_path = qrcode_path @download_url = download_url end
Public Instance Methods
build_dingtalk_at_info(payload)
click to toggle source
# File lib/fir/util/dingtalk_helper.rb, line 42 def build_dingtalk_at_info(payload) answer = {} answer[:isAtAll] = options[:dingtalk_at_all] unless options[:dingtalk_at_phones].blank? answer[:atMobiles] = options[:dingtalk_at_phones].split(',') payload[:markdown][:text] += options[:dingtalk_at_phones].split(',').map { |x| "@#{x}" }.join(',') end payload[:at] = answer end
secret_cal(secret)
click to toggle source
# File lib/fir/util/dingtalk_helper.rb, line 54 def secret_cal(secret) timestamp = Time.now.to_i * 1000 secret_enc = secret.encode('utf-8') str = "#{timestamp}\n#{secret}" string_to_sign_enc = str.encode('utf-8') hmac = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), secret_enc, string_to_sign_enc) { timestamp: timestamp, sign: CGI.escape(Base64.encode64(hmac).strip) } end
send_msg()
click to toggle source
# File lib/fir/util/dingtalk_helper.rb, line 19 def send_msg return if options[:dingtalk_access_token].blank? api_domain = @app_info[:api_url] title = "#{@app_info[:name]}-#{@app_info[:version]}(Build #{@app_info[:build]}) #{@app_info[:type]}" payload = { "msgtype": 'markdown', "markdown": { "title": "#{title} uploaded", "text": "#### #{title}\n\n>uploaded at #{Time.now}\n\nurl: #{download_url}\n\n#{options[:dingtalk_custom_message]}\n\n " } } build_dingtalk_at_info(payload) url = "https://oapi.dingtalk.com/robot/send?access_token=#{options[:dingtalk_access_token]}" if options[:dingtalk_secret] info = secret_cal(options[:dingtalk_secret]) url = "#{url}×tamp=#{info[:timestamp]}&sign=#{info[:sign]}" end x = DefaultRest.post(url, payload) rescue StandardError => e end