Module: KOAUtils::Kik

Defined in:
lib/koa-utils/kik.rb

Defined Under Namespace

Classes: PushResponse

Class Method Summary collapse

Class Method Details

.purchase(signedData, username, host) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/koa-utils/kik.rb', line 6

def self.purchase(signedData, username, host)
  KOAUtils::Logger.measure_block("kikpurchase") do
    url = "https://purchase.kik.com/verification/v1/check?u=#{username}&d=#{host}"
    response = request_with_retry(url, signedData, 5)
    if response.nil? or response.code.to_i != 200
      code = (response and response.code)
      code ||= "nil"
      KOAUtils::Logger.count("kikpurchase.fail", 1,
        {source: code, username: username, signed_data: signedData})
      return false
    end
    JSON.parse(response.body)
  end
end

.push(token, message, data) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/koa-utils/kik.rb', line 21

def self.push(token, message, data)
  KOAUtils::Logger.measure_block("kikpush") do
    url = "https://api.kik.com/push/v1/send"
    body = {
      token: token,
      ticker: message,
      data: data
    }
    response = request_with_retry(url, body.to_json, 1, 1)
    response_code = (response && response.code)
    response_code ||= "nil"
    PushResponse.new(response).tap do |pr|
      if pr.success?
        KOAUtils::Logger.count("notification_sent", 1)
      else
        KOAUtils::Logger.count("notification_fail", 1, {source: response_code})
      end
    end
  end
end

.request(url, body) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/koa-utils/kik.rb', line 62

def self.request(url, body)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  request = Net::HTTP::Post.new(uri.request_uri)
  request.add_field('Content-Type', 'application/json')
  request.add_field('Content-Length', body.size)
  
  request.body = body
  http.request(request)
end

.request_with_retry(url, body, tries, seconds = 2) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/koa-utils/kik.rb', line 49

def self.request_with_retry(url, body, tries, seconds = 2)
  tries.times do
    begin
      Timeout::timeout(seconds) do 
        return request(url, body)
      end
    rescue Timeout::Error
      KOAUtils::Logger.count("kiktimeout", 1)
      nil
    end
  end
end

.verify(signedData, username, host) ⇒ Object



42
43
44
45
46
47
# File 'lib/koa-utils/kik.rb', line 42

def self.verify(signedData, username, host)
  KOAUtils::Logger.measure_block("kikverify") do
    url = "https://auth.kik.com/verification/v1/check?u=#{username}&d=#{host}"
    request_with_retry(url, signedData, 5).body
  end
end