Module: Koa::Kik

Includes:
Measurement
Defined in:
lib/koa/kik.rb

Defined Under Namespace

Classes: PushResponse

Class Method Summary collapse

Methods included from Measurement

included

Class Method Details

.purchase(signedData, username, host) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/koa/kik.rb', line 10

def self.purchase(signedData, username, host)
  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"
    Koa::Logger.count("kikpurchase.fail", 1,
      {source: code, username: username, signed_data: signedData})
    return false
  end
  JSON.parse(response.body)
end

.push(token, message, data) ⇒ Object



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

def self.push(token, message, data)
  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?
      Koa::Logger.count("notification_sent", 1)
    else
      Koa::Logger.count("notification_fail", 1, {source: response_code})
    end
  end
end

.request(url, body) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/koa/kik.rb', line 60

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



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/koa/kik.rb', line 47

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
      Koa::Logger.count("kiktimeout", 1)
      nil
    end
  end
end

.verify(signedData, username, host) ⇒ Object



42
43
44
45
# File 'lib/koa/kik.rb', line 42

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