glogin 0.4.0 → 0.4.1
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.
- checksums.yaml +4 -4
- data/README.md +11 -3
- data/glogin.gemspec +2 -1
- data/lib/glogin/auth.rb +0 -2
- data/lib/glogin/codec.rb +2 -0
- data/lib/glogin/cookie.rb +8 -3
- data/lib/glogin/version.rb +1 -1
- data/test/glogin/test_auth.rb +20 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b6d42a8a87bd2c5542bf6e7e3fb5e0e536fe600
|
4
|
+
data.tar.gz: 6fc0c7f81e4fe8775bf74801a4da4c39ecdd0432
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffba5fb8d96cfaf2bbf18a761d171a1036a4ad93e8ab30b480b5b6b85aafe16232f8bd333e94c2537d877be52a444a238d0003127f42e6d34f14616edda13fd2
|
7
|
+
data.tar.gz: 8f1ad4b624062362a95de0ebd6bd0debfa129720b6a6a3307ed9638ac9e438656dbead9b344485ec8f7cdc77a0ef37462ae03fd07513fb954ba30670114e2e40
|
data/README.md
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
[](https://www.0crat.com/p/C3RFVLU72)
|
2
2
|
[](http://www.rultor.com/p/yegor256/glogin)
|
3
3
|
[](https://www.jetbrains.com/ruby/)
|
4
4
|
|
5
5
|
[](https://travis-ci.org/yegor256/glogin)
|
6
6
|
[](http://www.0pdd.com/p?name=yegor256/glogin)
|
7
7
|
[](http://badge.fury.io/rb/glogin)
|
8
|
-
[](https://codeclimate.com/github/yegor256/glogin)
|
8
|
+
[](https://codeclimate.com/github/yegor256/glogin/maintainability)
|
10
9
|
[](https://codecov.io/github/yegor256/glogin?branch=master)
|
11
10
|
|
12
11
|
## GitHub Login for Ruby web app
|
@@ -123,6 +122,15 @@ I use this gem in [sixnines](https://github.com/yegor256/sixnines)
|
|
123
122
|
and [0pdd](https://github.com/yegor256/0pdd) web apps (both open source),
|
124
123
|
on top of Sinatra.
|
125
124
|
|
125
|
+
Also, you can use `GLogin::Codec` just to encrypt/decrypt a piece of text:
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
require 'glogin/codec'
|
129
|
+
codec = GLogin:Codec.new('the secret')
|
130
|
+
encrypted = codec.encrypt('Hello, world!')
|
131
|
+
decrypted = codec.decrypt(encrypted)
|
132
|
+
```
|
133
|
+
|
126
134
|
## How to contribute?
|
127
135
|
|
128
136
|
Just submit a pull request. Make sure `rake` passes.
|
data/glogin.gemspec
CHANGED
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
s.homepage = 'http://github.com/yegor256/glogin'
|
43
43
|
s.files = `git ls-files`.split($RS)
|
44
44
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
45
|
-
s.test_files = s.files.grep(%r{^(test
|
45
|
+
s.test_files = s.files.grep(%r{^(test)/})
|
46
46
|
s.rdoc_options = ['--charset=UTF-8']
|
47
47
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
48
48
|
s.add_development_dependency 'codecov', '~>0.1'
|
@@ -52,4 +52,5 @@ Gem::Specification.new do |s|
|
|
52
52
|
s.add_development_dependency 'rspec-rails', '~>3.1'
|
53
53
|
s.add_development_dependency 'rubocop', '~>0.57'
|
54
54
|
s.add_development_dependency 'rubocop-rspec', '~>1.5'
|
55
|
+
s.add_development_dependency 'webmock', '~>3.4'
|
55
56
|
end
|
data/lib/glogin/auth.rb
CHANGED
@@ -21,7 +21,6 @@
|
|
21
21
|
|
22
22
|
require 'net/http'
|
23
23
|
require 'uri'
|
24
|
-
require 'yaml'
|
25
24
|
require 'json'
|
26
25
|
require 'cgi'
|
27
26
|
|
@@ -81,7 +80,6 @@ module GLogin
|
|
81
80
|
req['Accept'] = 'application/json'
|
82
81
|
res = http.request(req)
|
83
82
|
raise "Error (#{res.code}): #{res.body}" unless res.code == '200'
|
84
|
-
puts res.body
|
85
83
|
JSON.parse(res.body)['access_token']
|
86
84
|
end
|
87
85
|
end
|
data/lib/glogin/codec.rb
CHANGED
@@ -39,6 +39,7 @@ module GLogin
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def decrypt(text)
|
42
|
+
raise 'Text can\'t be nil' if text.nil?
|
42
43
|
if @secret.empty?
|
43
44
|
text
|
44
45
|
else
|
@@ -56,6 +57,7 @@ module GLogin
|
|
56
57
|
end
|
57
58
|
|
58
59
|
def encrypt(text)
|
60
|
+
raise 'Text can\'t be nil' if text.nil?
|
59
61
|
cpr = cipher
|
60
62
|
cpr.encrypt
|
61
63
|
cpr.key = digest
|
data/lib/glogin/cookie.rb
CHANGED
@@ -22,12 +22,16 @@
|
|
22
22
|
require 'openssl'
|
23
23
|
require 'digest/sha1'
|
24
24
|
require 'base64'
|
25
|
+
require_relative 'codec'
|
25
26
|
|
26
27
|
# GLogin main module.
|
27
28
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
28
29
|
# Copyright:: Copyright (c) 2017-2018 Yegor Bugayenko
|
29
30
|
# License:: MIT
|
30
31
|
module GLogin
|
32
|
+
# Split symbol inside the cookie text
|
33
|
+
SPLIT = '|'.freeze
|
34
|
+
|
31
35
|
#
|
32
36
|
# Secure cookie
|
33
37
|
#
|
@@ -49,14 +53,14 @@ module GLogin
|
|
49
53
|
# to catch in your applicaiton and ignore the login attempt.
|
50
54
|
def to_user
|
51
55
|
plain = Codec.new(@secret).decrypt(@text)
|
52
|
-
login, avatar, ctx = plain.split(
|
56
|
+
login, avatar, bearer, ctx = plain.split(GLogin::SPLIT, 4)
|
53
57
|
if !@secret.empty? && ctx.to_s != @context
|
54
58
|
raise(
|
55
59
|
OpenSSL::Cipher::CipherError,
|
56
60
|
"Context '#{@context}' expected, but '#{ctx}' found"
|
57
61
|
)
|
58
62
|
end
|
59
|
-
{ login: login, avatar: avatar }
|
63
|
+
{ login: login, avatar: avatar, bearer: bearer }
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
@@ -77,8 +81,9 @@ module GLogin
|
|
77
81
|
[
|
78
82
|
@json['login'],
|
79
83
|
@json['avatar_url'],
|
84
|
+
@json['bearer'],
|
80
85
|
@context
|
81
|
-
].join(
|
86
|
+
].join(GLogin::SPLIT)
|
82
87
|
)
|
83
88
|
end
|
84
89
|
end
|
data/lib/glogin/version.rb
CHANGED
data/test/glogin/test_auth.rb
CHANGED
@@ -20,9 +20,29 @@
|
|
20
20
|
# SOFTWARE.
|
21
21
|
|
22
22
|
require 'minitest/autorun'
|
23
|
+
require 'webmock/minitest'
|
23
24
|
require_relative '../../lib/glogin/cookie'
|
24
25
|
|
25
26
|
class TestAuth < Minitest::Test
|
27
|
+
def test_authenticate_via_https
|
28
|
+
auth = GLogin::Auth.new('1234', '4433', 'https://example.org')
|
29
|
+
stub_request(:post, 'https://github.com/login/oauth/access_token').to_return(
|
30
|
+
status: 200,
|
31
|
+
body: {
|
32
|
+
access_token: 'some-token'
|
33
|
+
}.to_json
|
34
|
+
)
|
35
|
+
stub_request(:get, 'https://api.github.com/user').to_return(
|
36
|
+
status: 200,
|
37
|
+
body: {
|
38
|
+
auth_code: '437849732894732',
|
39
|
+
login: 'yegor256'
|
40
|
+
}.to_json
|
41
|
+
)
|
42
|
+
user = auth.user('437849732894732')
|
43
|
+
assert_equal('yegor256', user['login'])
|
44
|
+
end
|
45
|
+
|
26
46
|
def test_login_uri
|
27
47
|
auth = GLogin::Auth.new(
|
28
48
|
'client_id', 'client_secret', 'http://www.example.com/github-oauth'
|
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.4.
|
4
|
+
version: 0.4.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: 2018-06-
|
11
|
+
date: 2018-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codecov
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.5'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.4'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.4'
|
111
125
|
description: Enables login/logout functionality for a Ruby web app
|
112
126
|
email: yegor256@gmail.com
|
113
127
|
executables: []
|