Class: Dingtalktool::AuthService
- Inherits:
-
Object
- Object
- Dingtalktool::AuthService
- Defined in:
- lib/dingtalktool/auth_service.rb
Class Method Summary collapse
- .check(res) ⇒ Object
- .configuration ⇒ Object
- .getAccessToken ⇒ Object
- .getConfig(href) ⇒ Object
- .getTicket(accessToken) ⇒ Object
- .sign(ticket, nonceStr, timeStamp, url) ⇒ Object
Class Method Details
.check(res) ⇒ Object
53 54 55 56 57 |
# File 'lib/dingtalktool/auth_service.rb', line 53 def self.check(res) if res["errcode"] != 0 LogService.e("FAIL: #{res.to_json}") end end |
.configuration ⇒ Object
3 4 5 |
# File 'lib/dingtalktool/auth_service.rb', line 3 def self.configuration Dingtalktool::configuration end |
.getAccessToken ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/dingtalktool/auth_service.rb', line 7 def self.getAccessToken # 缓存accessToken。accessToken有效期为两小时,需要在失效前请求新的accessToken(注意:以下代码没有在失效前刷新缓存的accessToken)。 accessToken = CacheService::getCorpAccessToken() #nil, false, "token" if accessToken.nil? || !accessToken response = HttpService.get('/gettoken?', {corpid: configuration.corpid, corpsecret: configuration.secret}) check(response) accessToken = response['access_token'] CacheService::setCorpAccessToken(accessToken) end return accessToken end |
.getConfig(href) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/dingtalktool/auth_service.rb', line 31 def self.getConfig(href) corpId = configuration.corpid agentId = configuration.agentid nonceStr = 'abcdefg' timeStamp = Time.now.to_i url = href corpAccessToken = getAccessToken() if corpAccessToken.nil? || !corpAccessToken LogService.e("[getConfig] ERR: no corp access token") end ticket = getTicket(corpAccessToken) signature = sign(ticket, nonceStr, timeStamp, url) config = {'url' => url,'nonceStr' => nonceStr,'agentId' => agentId, 'timeStamp' => timeStamp, 'corpId' => corpId, 'signature' => signature} return config end |
.getTicket(accessToken) ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/dingtalktool/auth_service.rb', line 20 def self.getTicket(accessToken) jsticket = CacheService::getJsTicket() if jsticket.nil? || !jsticket response = HttpService.get('/get_jsapi_ticket?', {type: 'jsapi', access_token: accessToken}) check(response) jsticket = response['ticket'] CacheService::setJsTicket(jsticket) end return jsticket end |
.sign(ticket, nonceStr, timeStamp, url) ⇒ Object
48 49 50 51 |
# File 'lib/dingtalktool/auth_service.rb', line 48 def self.sign(ticket, nonceStr, timeStamp, url) plain = "jsapi_ticket=#{ticket}&noncestr=#{nonceStr}×tamp=#{timeStamp}&url=#{url}" return Digest::SHA1.hexdigest(plain); end |