class OneID

Public Class Methods

new(api_id = nil, api_key = nil, server = "") click to toggle source
# File lib/oneid.rb, line 5
def initialize(api_id = nil, api_key = nil, server = "")
    @api_id = api_id
    @api_key = api_key
    @keychain_server = sprintf("https://keychain%s.oneid.com", server)
    @repo_server = sprintf("https://account%s.oneid.com/repo", server)
end

Public Instance Methods

confirm(uid, token, message) click to toggle source
# File lib/oneid.rb, line 43
def confirm(uid, token, message)
    result = post(@repo_server, "send_2fa", {
        "two_factor_token" => token,
        "message" => message
    })
    result["uid"] = uid
    self.validate(result)
end
make_nonce() click to toggle source
# File lib/oneid.rb, line 16
def make_nonce()
    post(@keychain_server, "make_nonce")
end
register() click to toggle source
# File lib/oneid.rb, line 12
def register()
    post(@keychain_server, "register")
end
success?(response) click to toggle source
# File lib/oneid.rb, line 39
def success?(response)
    response.has_key?("errorcode") ? response["errorcode"] == 0 : false
end
validate(payload) click to toggle source
# File lib/oneid.rb, line 20
def validate(payload)
    if payload.is_a? String
        payload = JSON.parse(payload)
    end

    data = {
        "nonces" => payload["nonces"],
        "uid" => payload["uid"]
    }

    if payload.has_key?("attr_claim_tokens")
        data["attr_claim_tokens"] = payload["attr_claim_tokens"]
    end

    response = post(@keychain_server, "validate", data)
    response["valid"] = self.success?(response)
    payload.merge!(response)
end

Private Instance Methods

post(server, method, data = {}) click to toggle source
# File lib/oneid.rb, line 53
def post(server, method, data = {})
    url = URI.parse(sprintf("%s/%s", server, method))
    req = Net::HTTP::Post.new(url.path)
    if @api_id && @api_key
        req.basic_auth @api_id, @api_key
    end
    req.body = JSON.generate(data)
    req.add_field("Content-Type", "application/json")

    sock = Net::HTTP.new(url.host, url.port)
    sock.use_ssl = true
    response = sock.start { |http| http.request(req) }
    JSON.parse(response.body)
end