firebase_token_generator 1.0.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +5 -13
  2. data/lib/firebase_token_generator.rb +25 -4
  3. metadata +7 -6
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDg2MDlmNjU1MjY1NGZhNzJhYWJmYjE5YzEzMDljNjU1ZTFiNmRmNg==
5
- data.tar.gz: !binary |-
6
- ZDUzZTc0ZmMxMmNkODUxMjg3ODdkNWMzYWUzYzQ0MzY5OTlkZTYyNg==
2
+ SHA1:
3
+ metadata.gz: db673d7e0ac2d841a97401e6f16c82d02b21534c
4
+ data.tar.gz: 90d07595be2e4942590343fc7f3f3eee4ac98bbf
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YmU5ZDFiOGZiZjU5ZDMwNDNkNDEzOGY1N2Y3NjNmYzRmNjIyYmJiMjU5ODkw
10
- NmJiYWUwMTUxMjI4YjkxODk1NDMwYzNiMGQ4ODEwY2Q3MDZmNjFiMzY1ZGU3
11
- ZDllNmY5ZTgwYWM5NWZlZGYwY2UzMWE4NWRjOTk0OWMxNWI2MTY=
12
- data.tar.gz: !binary |-
13
- YTMzMjlkNTU2MzVlY2Q2OTU3ZjUwMjVjNDRhY2QyZWMxNTEwNzdkZmMyY2U1
14
- OWFhMjhlMjgwYjJlN2RmYmM3MjJlMGQ0MDJkNzUwNmFlOGE1YjU0ZmIwODM3
15
- MDEzZmMzYmYwNDYyN2Y1YzVkZGM1MzY5YTJhYzY2MTM4ZTNmOWY=
6
+ metadata.gz: b532c83af441885c41d925be9d86d5a90b1b139f04d2e83b4daefc5efeba7188a182818574ea335d122e291b41a75414ad85ed3bbd879cc350af4285690bbed1
7
+ data.tar.gz: eec88f1f016a247293b7c8e450cf7edfe405d0ba51a929799a435de995d848947d368b5970c1693094f3561bf6c027fcd66d818fecf8e998a8152c27a25acd16
@@ -11,6 +11,9 @@ module Firebase
11
11
 
12
12
  # When creating an instance of the generator, you must provide your Firebase Application Secret
13
13
  def initialize(secret)
14
+ if (!secret.is_a?(String))
15
+ raise ArgumentError, "FirebaseTokenGenerator: secret must be a string."
16
+ end
14
17
  @secret = secret
15
18
  end
16
19
 
@@ -24,16 +27,22 @@ module Firebase
24
27
  # [debug] If set to true, this client will receive debug information about the security rules
25
28
  # [simulate] (internal-only for now) Runs security rules but makes no data changes
26
29
  #
27
- # Throws ArgumentError if given an invalid option
30
+ # Throws ArgumentError if given invalid data or an invalid option
31
+ # Throws RuntimeError if generated token is too long
28
32
  def create_token(auth_data, options = {})
29
- if auth_data.empty? and options.empty?
33
+ if (auth_data.nil? or auth_data.empty?) and (options.nil? or options.empty?)
30
34
  raise ArgumentError, "FirebaseTokenGenerator.create_token: data is empty and no options are set. This token will have no effect on Firebase."
31
35
  end
36
+ validate_auth_data(auth_data, (!options.nil? and options[:admin] == true))
32
37
  claims = create_options_claims(options)
33
38
  claims[:v] = TOKEN_VERSION
34
39
  claims[:iat] = Time.now.to_i
35
40
  claims[:d] = auth_data
36
- encode_token(claims)
41
+ token = encode_token(claims)
42
+ if (token.length > 1024)
43
+ raise RuntimeError, "FirebaseTokenGenerator.create_token: generated token is too long."
44
+ end
45
+ token
37
46
  end
38
47
 
39
48
  private
@@ -50,6 +59,18 @@ module Firebase
50
59
  :simulate => :simulate
51
60
  }
52
61
 
62
+ def validate_auth_data(auth_data, is_admin_token)
63
+ if (!auth_data.nil? && !auth_data.is_a?(Hash))
64
+ raise ArgumentError, "FirebaseTokenGenerator.create_token: auth data must be a hash"
65
+ end
66
+ contains_uid = (!auth_data.nil? and auth_data.has_key?(:uid))
67
+ if ((!contains_uid and !is_admin_token) or (contains_uid and !auth_data[:uid].is_a?(String)))
68
+ raise ArgumentError, "FirebaseTokenGenerator.create_token: auth data must contain a :uid key that must be a string."
69
+ elsif (contains_uid and (auth_data[:uid].length > 256))
70
+ raise ArgumentError, "FirebaseTokenGenerator.create_token: auth data must contain a :uid key that must not be longer than 256 bytes."
71
+ end
72
+ end
73
+
53
74
  def create_options_claims(options)
54
75
  opts = {}
55
76
  options.each do |key, value|
@@ -59,7 +80,7 @@ module Firebase
59
80
  if CLAIMS_MAP.include?(key.to_sym) then
60
81
  opts[CLAIMS_MAP[key.to_sym]] = value
61
82
  else
62
- raise ArgumentError, "#{key.to_s} is not a valid option"
83
+ raise ArgumentError, "FirebaseTokenGenerator.create_token: #{key.to_s} is not a valid option"
63
84
  end
64
85
  end
65
86
  opts
metadata CHANGED
@@ -1,18 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firebase_token_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Soltis
8
+ - Chris Raynor
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-02 00:00:00.000000000 Z
12
+ date: 2014-09-04 00:00:00.000000000 Z
12
13
  dependencies: []
13
14
  description: A library for generating signed authentication tokens for use with Firebase.
14
15
  Uses your app secret.
15
- email: greg@firebase.com
16
+ email: support@firebase.com
16
17
  executables: []
17
18
  extensions: []
18
19
  extra_rdoc_files: []
@@ -28,17 +29,17 @@ require_paths:
28
29
  - lib
29
30
  required_ruby_version: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - ! '>='
32
+ - - ">="
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
35
  required_rubygems_version: !ruby/object:Gem::Requirement
35
36
  requirements:
36
- - - ! '>='
37
+ - - ">="
37
38
  - !ruby/object:Gem::Version
38
39
  version: '0'
39
40
  requirements: []
40
41
  rubyforge_project:
41
- rubygems_version: 2.1.4
42
+ rubygems_version: 2.4.1
42
43
  signing_key:
43
44
  specification_version: 4
44
45
  summary: Generate Firebase Authentication Tokens