glogin 0.14.0 → 0.14.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 276e84fbfff7c015118724369f25d3d5da61fae762762cf96c5bd53fc1bbf7b0
4
- data.tar.gz: 445af8bffcb5359e4e8170b7b9abe0596d28b538b0f07bde510245a0e03b4196
3
+ metadata.gz: 43ce4ccebe57a06bb860c407b9e96dc939932f952aa2a6c4951a64f79a5f34c7
4
+ data.tar.gz: 65854ae4920a4ff27bd67bcf7cf34d8222be36398639bd82b013fa73b94700a5
5
5
  SHA512:
6
- metadata.gz: 466d1bdf480926b5b25d088560df94937adfa0c16a4156aaed125a5c37283d0ae3c2f4bcef8c0a3fc56d55802a198f43885557d528c941c1b257dec7ce7df02b
7
- data.tar.gz: f9ffc87fc989b4969e4dcc96d10398ff7702f947f910048d56545bb6db0fb69b15f0752ad08549036e4ad8933c0fdd2c4ae6a835383d0f60edd052ba45c27cbe
6
+ metadata.gz: c36870984ff3f36eb946b5bbb5273bc4f3633332651bd180196d1b172c7782248583285a0e3c9ae499205d45b6a45bb6e19910b7fb6ca8a455b0b2af8934c457
7
+ data.tar.gz: 456ef6a6e5329d490d2195c58d3c8c007e23f6326f4535d362b04898451009926a5226baa384342b8dd889f6e00c17b8ef595d85e7a0e0fd5fa4a06c69324642
data/Gemfile CHANGED
@@ -24,7 +24,7 @@
24
24
  source 'https://rubygems.org'
25
25
  gemspec
26
26
 
27
- gem 'minitest', '5.20.0', require: false
27
+ gem 'minitest', '5.21.2', require: false
28
28
  gem 'rake', '13.1.0', require: false
29
29
  gem 'rdoc', '6.6.1', require: false
30
30
  gem 'rspec-rails', '6.1.0', require: false
data/lib/glogin/auth.rb CHANGED
@@ -56,9 +56,9 @@ module GLogin
56
56
  if @secret.empty?
57
57
  return {
58
58
  'id' => 526_301,
59
- 'type' => 'User',
60
59
  'login' => 'yegor256',
61
- 'avatar_url' => 'https://github.com/yegor256.png'
60
+ 'avatar_url' => 'https://github.com/yegor256.png',
61
+ 'bearer' => ''
62
62
  }
63
63
  end
64
64
  raise 'Code can\'t be nil' if code.nil?
data/lib/glogin/cookie.rb CHANGED
@@ -39,19 +39,29 @@ module GLogin
39
39
  #
40
40
  class Cookie
41
41
  # Closed cookie.
42
+ #
43
+ # An instance of this class is created when a cookie arrives
44
+ # to the application. The cookie text is provided to the class
45
+ # as the first parameter. Then, when an instance of the class
46
+ # is created, the value encypted inside the cookie text may
47
+ # be retrieved through the +to_user+ method.
42
48
  class Closed
43
49
  def initialize(text, secret, context = '')
44
50
  raise 'Text can\'t be nil' if text.nil?
45
51
  @text = text
46
52
  raise 'Secret can\'t be nil' if secret.nil?
47
53
  @secret = secret
54
+ raise 'Context can\'t be nil' if context.nil?
48
55
  @context = context.to_s
49
56
  end
50
57
 
51
- # Returns a hash with two elements: login and avatar.
52
- # If the secret is empty, the text will be returned, without
53
- # any decryption. If the data is not valid, an exception
54
- # GLogin::Codec::DecodingError will be raised, which you have
58
+ # Returns a hash with four elements: `id`, `login`, `avatar`, and `bearer`.
59
+ #
60
+ # If the `secret` is empty, the text will not be decrypted, but used
61
+ # "as is". This may be helpful during testing.
62
+ #
63
+ # If the data is not valid, an exception
64
+ # `GLogin::Codec::DecodingError` will be raised, which you have
55
65
  # to catch in your applicaiton and ignore the login attempt.
56
66
  def to_user
57
67
  plain = Codec.new(@secret).decrypt(@text)
@@ -68,12 +78,24 @@ module GLogin
68
78
 
69
79
  # Open
70
80
  class Open
71
- # Here comes the JSON you receive from Auth.user()
81
+ # Here comes the JSON you receive from Auth.user().
82
+ #
83
+ # The JSON is a Hash where every key is a string. When the class is instantiated,
84
+ # its methods +id+, +login+, and +avatar_url+ may be used to retrieve
85
+ # the data inside the JSON, but this is not what this class is mainly about.
86
+ #
87
+ # The method +to_s+ returns an encrypted cookie string, that may be
88
+ # sent to the user as a +Set-Cookie+ HTTP header.
72
89
  def initialize(json, secret, context = '')
73
90
  raise 'JSON can\'t be nil' if json.nil?
91
+ raise 'JSON must contain "id" key' if json['id'].nil?
92
+ raise 'JSON must contain "login" key' if json['login'].nil?
93
+ raise 'JSON must contain "avatar_url" key' if json['avatar_url'].nil?
94
+ raise 'JSON must contain "bearer" key' if json['bearer'].nil?
74
95
  @json = json
75
96
  raise 'Secret can\'t be nil' if secret.nil?
76
97
  @secret = secret
98
+ raise 'Context can\'t be nil' if context.nil?
77
99
  @context = context.to_s
78
100
  end
79
101
 
@@ -26,5 +26,5 @@
26
26
  # Copyright:: Copyright (c) 2017-2024 Yegor Bugayenko
27
27
  # License:: MIT
28
28
  module GLogin
29
- VERSION = '0.14.0'
29
+ VERSION = '0.14.1'
30
30
  end
@@ -31,7 +31,7 @@ class TestCookie < Minitest::Test
31
31
  GLogin::Cookie::Open.new(
32
32
  JSON.parse(
33
33
  "{\"id\":\"123\",
34
- \"login\":\"yegor256\",
34
+ \"login\":\"yegor256\",\"bearer\":\"\",
35
35
  \"avatar_url\":\"https://avatars1.githubusercontent.com/u/526301\"}"
36
36
  ),
37
37
  secret
@@ -47,7 +47,7 @@ class TestCookie < Minitest::Test
47
47
  context = '127.0.0.1'
48
48
  user = GLogin::Cookie::Closed.new(
49
49
  GLogin::Cookie::Open.new(
50
- JSON.parse('{"id":"123","login":"jeffrey","avatar_url":"#"}'),
50
+ JSON.parse('{"id":"123","login":"jeffrey","avatar_url":"#","bearer":""}'),
51
51
  secret,
52
52
  context
53
53
  ).to_s,
@@ -81,7 +81,7 @@ class TestCookie < Minitest::Test
81
81
  assert_raises GLogin::Codec::DecodingError do
82
82
  GLogin::Cookie::Closed.new(
83
83
  GLogin::Cookie::Open.new(
84
- JSON.parse('{"login":"x","avatar_url":"x"}'),
84
+ JSON.parse('{"login":"x","avatar_url":"x","id":"1","bearer":""}'),
85
85
  'secret-1'
86
86
  ).to_s,
87
87
  'secret-2'
@@ -94,7 +94,7 @@ class TestCookie < Minitest::Test
94
94
  assert_raises GLogin::Codec::DecodingError do
95
95
  GLogin::Cookie::Closed.new(
96
96
  GLogin::Cookie::Open.new(
97
- JSON.parse('{"login":"x","avatar_url":"x"}'),
97
+ JSON.parse('{"login":"x","avatar_url":"x","id":"999","bearer":""}'),
98
98
  secret,
99
99
  'context-1'
100
100
  ).to_s,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glogin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-19 00:00:00.000000000 Z
11
+ date: 2024-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base58