omniauth-line 0.0.2
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 +7 -0
- data/Gemfile +12 -0
- data/README.md +48 -0
- data/Rakefile +8 -0
- data/lib/omniauth-line.rb +2 -0
- data/lib/omniauth-line/version.rb +5 -0
- data/lib/omniauth/strategies/line.rb +39 -0
- data/omniauth-line.gemspec +24 -0
- data/spec/omniauth/strategies/line_spec.rb +87 -0
- data/spec/spec_helper.rb +20 -0
- metadata +97 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6cfd8f7cfafbe33031713ab2c19625e5af28826d
|
4
|
+
data.tar.gz: 93e0c11310aaa3f088cdf70ff924cf9503093693
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e1f4b1d486370e9cad55433f8bb6410768fbede976db16cf07bd2f9c9e1e12f8a07b12fbf35abc939c8285d4ff5ae9c312bceb1a8eac833e512aa032a0c78ed1
|
7
|
+
data.tar.gz: 0e083965d16cf0067c372158f2d4a5147303f3d8f9059856eafb0204cc94b38edb32dba90b71df54411a217d12c87b2364f22904ce0f2aa236c16fde254d84af
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# OmniAuth Line
|
2
|
+
|
3
|
+
This gem contains the Line OAuth2 Strategy for OmniAuth.
|
4
|
+
|
5
|
+
Supports the OAuth 2.0 Web Login. Read the Line developers docs for more details: https://developers.line.me/web-login/integrating-web-login
|
6
|
+
|
7
|
+
## Using This Strategy
|
8
|
+
|
9
|
+
First start by adding this gem to your Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'omniauth-line'
|
13
|
+
```
|
14
|
+
|
15
|
+
Next, tell OmniAuth about this provider. For a Rails app, your `config/initializers/omniauth.rb` file should look like this:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
# PROFILE permission required!!
|
19
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
20
|
+
provider :line, "Channel_ID", "Channel_Secret"
|
21
|
+
end
|
22
|
+
```
|
23
|
+
|
24
|
+
## Authentication Hash
|
25
|
+
An example auth hash available in `request.env['omniauth.auth']`:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
{
|
29
|
+
:provider => "line",
|
30
|
+
:uid => "a123b4....",
|
31
|
+
:info => {
|
32
|
+
:name => "yamada tarou",
|
33
|
+
:image => "http://dl.profile.line.naver.jp/xxxxx",
|
34
|
+
:description => "breakfast now.",
|
35
|
+
},
|
36
|
+
:credentials => {
|
37
|
+
:token => "a1b2c3d4...", # The OAuth 2.0 access token
|
38
|
+
:secret => "abcdef1234"
|
39
|
+
},
|
40
|
+
:extra => {
|
41
|
+
# nil
|
42
|
+
}
|
43
|
+
}
|
44
|
+
```
|
45
|
+
|
46
|
+
## Supported Rubies
|
47
|
+
|
48
|
+
OmniAuth Line is tested under 2.1.x, 2.2.x.
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'omniauth-oauth2'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module OmniAuth
|
5
|
+
module Strategies
|
6
|
+
class Line < OmniAuth::Strategies::OAuth2
|
7
|
+
option :name, 'line'
|
8
|
+
|
9
|
+
option :client_options, {:site => 'https://access.line.me',
|
10
|
+
:authorize_url => '/dialog/oauth/weblogin',
|
11
|
+
:token_url => '/v1/oauth/accessToken',
|
12
|
+
:proxy => ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil}
|
13
|
+
|
14
|
+
# host changed
|
15
|
+
def callback_phase
|
16
|
+
options[:client_options][:site] = 'https://api.line.me'
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
uid { raw_info['mid'] }
|
21
|
+
|
22
|
+
info do
|
23
|
+
{
|
24
|
+
name: raw_info['displayName'],
|
25
|
+
image: raw_info['pictureUrl'],
|
26
|
+
description: raw_info['statusMessage']
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
# Require: Access token with PROFILE permission issued.
|
31
|
+
def raw_info
|
32
|
+
@raw_info ||= JSON.load(access_token.get('v1/profile').body)
|
33
|
+
rescue ::Errno::ETIMEDOUT
|
34
|
+
raise ::Timeout::Error
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "omniauth-line/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "omniauth-line"
|
7
|
+
s.version = OmniAuth::Line::VERSION
|
8
|
+
s.authors = ["kazasiki"]
|
9
|
+
s.email = ["kazasiki@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/kazasiki/omniauth-line"
|
11
|
+
s.description = %q{OmniAuth strategy for Line}
|
12
|
+
s.summary = s.description
|
13
|
+
s.license = "MIT"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_dependency 'json', '~> 1.3'
|
21
|
+
s.add_dependency 'omniauth-oauth2', '~>1.3.1'
|
22
|
+
s.add_development_dependency 'bundler', '~> 1.0'
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OmniAuth::Strategies::Line do
|
4
|
+
let(:request) { double('Request', :params => {}, :cookies => {}, :env => {}) }
|
5
|
+
|
6
|
+
subject do
|
7
|
+
args = ['channel_id', 'secret', @options || {}].compact
|
8
|
+
OmniAuth::Strategies::Line.new(*args).tap do |strategy|
|
9
|
+
allow(strategy).to receive(:request) {
|
10
|
+
request
|
11
|
+
}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'client options' do
|
16
|
+
it 'should have correct name' do
|
17
|
+
expect(subject.options.name).to eq('line')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should have correct site' do
|
21
|
+
expect(subject.options.client_options.site).to eq('https://access.line.me')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should have correct authorize url' do
|
25
|
+
expect(subject.options.client_options.authorize_url).to eq('/dialog/oauth/weblogin')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should have correct token url' do
|
29
|
+
expect(subject.options.client_options.token_url).to eq('/v1/oauth/accessToken')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'uid' do
|
34
|
+
before do
|
35
|
+
allow(subject).to receive(:raw_info).and_return(raw_info_hash)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should returns the uid' do
|
39
|
+
expect(subject.uid).to eq(raw_info_hash['mid'])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'info' do
|
44
|
+
before do
|
45
|
+
allow(subject).to receive(:raw_info).and_return(raw_info_hash)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should returns the name' do
|
49
|
+
expect(subject.info[:name]).to eq(raw_info_hash['displayName'])
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should returns the image' do
|
53
|
+
expect(subject.info[:image]).to eq(raw_info_hash['pictureUrl'])
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should returns the description' do
|
57
|
+
expect(subject.info[:description]).to eq(raw_info_hash['statusMessage'])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'request_phase' do
|
62
|
+
context 'with no request params set' do
|
63
|
+
before do
|
64
|
+
allow(subject).to receive(:request).and_return(
|
65
|
+
double('Request', {:params => {}})
|
66
|
+
)
|
67
|
+
allow(subject).to receive(:request_phase).and_return(:whatever)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should not break' do
|
71
|
+
expect { subject.request_phase }.not_to raise_error
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def raw_info_hash
|
81
|
+
{
|
82
|
+
'mid' => 'hoge',
|
83
|
+
'displayName' => 'Foo Bar',
|
84
|
+
'pictureUrl' => 'http://xxx.com/aaa.jpg',
|
85
|
+
'statusMessage' => 'Developer'
|
86
|
+
}
|
87
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
$:.unshift File.expand_path('..', __FILE__)
|
2
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start do
|
5
|
+
minimum_coverage(75.00)
|
6
|
+
end
|
7
|
+
require 'rspec'
|
8
|
+
require 'rack/test'
|
9
|
+
require 'webmock/rspec'
|
10
|
+
require 'omniauth'
|
11
|
+
require 'omniauth-line'
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
config.include WebMock::API
|
15
|
+
config.include Rack::Test::Methods
|
16
|
+
config.extend OmniAuth::Test::StrategyMacros, :type => :strategy
|
17
|
+
config.expect_with :rspec do |c|
|
18
|
+
c.syntax = :expect
|
19
|
+
end
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: omniauth-line
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- kazasiki
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: omniauth-oauth2
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
description: OmniAuth strategy for Line
|
56
|
+
email:
|
57
|
+
- kazasiki@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- Gemfile
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- lib/omniauth-line.rb
|
66
|
+
- lib/omniauth-line/version.rb
|
67
|
+
- lib/omniauth/strategies/line.rb
|
68
|
+
- omniauth-line.gemspec
|
69
|
+
- spec/omniauth/strategies/line_spec.rb
|
70
|
+
- spec/spec_helper.rb
|
71
|
+
homepage: https://github.com/kazasiki/omniauth-line
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 2.2.2
|
92
|
+
signing_key:
|
93
|
+
specification_version: 4
|
94
|
+
summary: OmniAuth strategy for Line
|
95
|
+
test_files:
|
96
|
+
- spec/omniauth/strategies/line_spec.rb
|
97
|
+
- spec/spec_helper.rb
|