Class: SimpleWebToken::SimpleWebTokenBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_web_token_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ SimpleWebTokenBuilder

Returns a new instance of SimpleWebTokenBuilder.

Raises:

  • (InvalidOption)


9
10
11
12
13
14
15
# File 'lib/simple_web_token_builder.rb', line 9

def initialize(opts = {})
  raise InvalidOption, :shared_secret unless opts[:shared_secret]
  self.shared_secret = opts[:shared_secret]
  self.issuer = opts[:issuer]
  self.audience = opts[:audience]
  self.expiration = (opts[:expiration] or 3600)
end

Instance Attribute Details

#audienceObject

Returns the value of attribute audience.



7
8
9
# File 'lib/simple_web_token_builder.rb', line 7

def audience
  @audience
end

#expirationObject

Returns the value of attribute expiration.



7
8
9
# File 'lib/simple_web_token_builder.rb', line 7

def expiration
  @expiration
end

#issuerObject

Returns the value of attribute issuer.



7
8
9
# File 'lib/simple_web_token_builder.rb', line 7

def issuer
  @issuer
end

#shared_secretObject

Returns the value of attribute shared_secret.



7
8
9
# File 'lib/simple_web_token_builder.rb', line 7

def shared_secret
  @shared_secret
end

Instance Method Details

#build(claims) ⇒ Object



17
18
19
20
# File 'lib/simple_web_token_builder.rb', line 17

def build(claims)
  token = (convert(claims) + default_claim_set).join("&")
  return token += "&HMACSHA256=#{CGI.escape(sign(token))}"
end

#claim_pair(key, value) ⇒ Object



38
39
40
41
42
# File 'lib/simple_web_token_builder.rb', line 38

def claim_pair(key, value)
  new_key = key.to_s.downcase.split("_").map{|l| l.capitalize.strip}.join("")
  value = [value].flatten.uniq.join(",")
  [new_key, value.to_s].map{|s| CGI.escape(s)}.join("=")
end

#convert(claims) ⇒ Object



26
27
28
# File 'lib/simple_web_token_builder.rb', line 26

def convert(claims)
  claims.map{|k, v| claim_pair(k, v)}
end

#default_claim_setObject



30
31
32
33
34
35
36
# File 'lib/simple_web_token_builder.rb', line 30

def default_claim_set
  default_claims = []
  default_claims << claim_pair(:issuer, self.issuer) if(self.issuer)
  default_claims << claim_pair(:audience, self.audience) if(self.audience)
  default_claims << claim_pair(:expires_on, Time.now.to_i + self.expiration) 
  return default_claims
end

#sign(bare_token) ⇒ Object



22
23
24
# File 'lib/simple_web_token_builder.rb', line 22

def sign(bare_token)
  signature = Base64.encode64(HMAC::SHA256.new(Base64.decode64(self.shared_secret)).update(bare_token.toutf8).digest).strip
end