Sha256: bf6e4f866f5315abbb0933a115f38240bd1a3815e72eacaeb39237e78d10a672

Contents?: true

Size: 814 Bytes

Versions: 9

Compression:

Stored size: 814 Bytes

Contents

require 'base64'
require 'openssl'
require 'json'

module Apnotic
  class ProviderToken
    def initialize(key, team_id, key_id)
      @key     = OpenSSL::PKey::EC.new(key)
      @team_id = team_id
      @key_id  = key_id
    end

    def token
      [encode(header), encode(payload), encode(signature)].join(".")
    end

    private

    def header
      JSON.generate({
        alg: "ES256",
        kid: @key_id
      })
    end

    def payload
      JSON.generate({
        iss: @team_id,
        iat: Time.now.to_i
      })
    end

    def signature
      data = [encode(header), encode(payload)].join(".")
      digest = OpenSSL::Digest::SHA256.new().digest(data)
      @key.dsa_sign_asn1(digest)
    end

    def encode(data)
      Base64.encode64(data).tr('+/', '-_').gsub(/[\n=]/, '')
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
apnotic-1.7.0 lib/apnotic/provider_token.rb
apnotic-1.6.1 lib/apnotic/provider_token.rb
apnotic-1.6.0 lib/apnotic/provider_token.rb
apnotic-1.5.0 lib/apnotic/provider_token.rb
apnotic-1.4.1 lib/apnotic/provider_token.rb
apnotic-1.4.0 lib/apnotic/provider_token.rb
apnotic-1.3.1 lib/apnotic/provider_token.rb
apnotic-1.3.0 lib/apnotic/provider_token.rb
apnotic-1.2.0 lib/apnotic/provider_token.rb