From 88364b276d60db4c689f97388af949d6ff8c15c2 Mon Sep 17 00:00:00 2001 From: marsz Date: Sat, 6 Mar 2021 23:45:20 +0800 Subject: [PATCH 1/5] feat: get email --- lib/omniauth/strategies/line.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/omniauth/strategies/line.rb b/lib/omniauth/strategies/line.rb index e3fcbcc..160cb31 100644 --- a/lib/omniauth/strategies/line.rb +++ b/lib/omniauth/strategies/line.rb @@ -5,7 +5,7 @@ module OmniAuth module Strategies class Line < OmniAuth::Strategies::OAuth2 option :name, 'line' - option :scope, 'profile openid' + option :scope, 'profile openid email' option :client_options, { site: 'https://access.line.me', @@ -23,14 +23,15 @@ def callback_url # Fixes regression in omniauth-oauth2 v1.4.0 by https://github.com/intridea/omniauth-oauth2/commit/85fdbe117c2a4400d001a6368cc359d88f40abc7 options[:callback_url] || (full_host + script_name + callback_path) end - + uid { raw_info['userId'] } info do { name: raw_info['displayName'], image: raw_info['pictureUrl'], - description: raw_info['statusMessage'] + description: raw_info['statusMessage'], + email: JWT.decode(access_token.params['id_token'], options['client_secret']).first&.dig('email') } end From c1608e4e2ffe79fdfe85398cf493d79f25a956e3 Mon Sep 17 00:00:00 2001 From: MarsZ Date: Tue, 17 Sep 2024 18:12:46 +0800 Subject: [PATCH 2/5] rename gem to line-messenger --- .gitignore | 3 + Gemfile.lock | 95 +++++++++++++++++++ README.md | 5 +- lib/omniauth-line-messenger.rb | 2 + lib/omniauth-line-messenger/version.rb | 5 + lib/omniauth-line.rb | 2 - lib/omniauth-line/version.rb | 5 - .../strategies/{line.rb => line_messenger.rb} | 13 ++- ...gemspec => omniauth-line-messenger.gemspec | 12 +-- .../{line_spec.rb => line_messenger_spec.rb} | 8 +- spec/spec_helper.rb | 2 +- 11 files changed, 130 insertions(+), 22 deletions(-) create mode 100644 .gitignore create mode 100644 Gemfile.lock create mode 100644 lib/omniauth-line-messenger.rb create mode 100644 lib/omniauth-line-messenger/version.rb delete mode 100644 lib/omniauth-line.rb delete mode 100644 lib/omniauth-line/version.rb rename lib/omniauth/strategies/{line.rb => line_messenger.rb} (68%) rename omniauth-line.gemspec => omniauth-line-messenger.gemspec (66%) rename spec/omniauth/strategies/{line_spec.rb => line_messenger_spec.rb} (86%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c80cc37 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/coverage +/coverage/* +*.DS_Store diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..49ab61e --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,95 @@ +PATH + remote: . + specs: + omniauth-line-messenger (0.2.0) + json (>= 2.3.0) + omniauth-oauth2 (~> 1.3) + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + base64 (0.2.0) + bigdecimal (3.1.8) + crack (1.0.0) + bigdecimal + rexml + diff-lcs (1.5.1) + docile (1.4.1) + faraday (2.8.1) + base64 + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + hashdiff (1.1.1) + hashie (5.0.0) + json (2.7.2) + jwt (2.9.0) + base64 + multi_xml (0.6.0) + oauth2 (2.0.9) + faraday (>= 0.17.3, < 3.0) + jwt (>= 1.0, < 3.0) + multi_xml (~> 0.5) + rack (>= 1.2, < 4) + snaky_hash (~> 2.0) + version_gem (~> 1.1) + omniauth (2.1.2) + hashie (>= 3.4.6) + rack (>= 2.2.3) + rack-protection + omniauth-oauth2 (1.8.0) + oauth2 (>= 1.4, < 3) + omniauth (~> 2.0) + public_suffix (5.1.1) + rack (3.1.7) + rack-protection (3.0.6) + rack + rack-test (2.1.0) + rack (>= 1.3) + rake (13.2.1) + rexml (3.3.7) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.1) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.3) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + ruby2_keywords (0.0.5) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.13.1) + simplecov_json_formatter (0.1.4) + snaky_hash (2.0.1) + hashie + version_gem (~> 1.1, >= 1.1.1) + version_gem (1.1.4) + webmock (3.23.1) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + +PLATFORMS + arm64-darwin-22 + +DEPENDENCIES + bundler (~> 2.0) + omniauth-line-messenger! + rack-test + rake + rspec (~> 3.2) + simplecov + webmock + +BUNDLED WITH + 2.4.22 diff --git a/README.md b/README.md index c6370f5..7d2310e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Supports the OpenID Connect Web Login. Read the Line developers docs for more de First start by adding this gem to your Gemfile: ```ruby -gem 'omniauth-line' +gem 'omniauth-line-messenger' ``` Next, tell OmniAuth about this provider. For a Rails app, your `config/initializers/omniauth.rb` file should look like this: @@ -17,7 +17,7 @@ Next, tell OmniAuth about this provider. For a Rails app, your `config/initializ ```ruby # PROFILE permission required!! Rails.application.config.middleware.use OmniAuth::Builder do - provider :line, "Channel_ID", "Channel_Secret" + provider :line_messenger, "Channel_ID", "Channel_Secret" end ``` @@ -32,6 +32,7 @@ An example auth hash available in `request.env['omniauth.auth']`: :name => "yamada tarou", :image => "http://dl.profile.line.naver.jp/xxxxx", :description => "breakfast now.", + :email => "foo@bar.com" }, :credentials => { :token => "a1b2c3d4...", # The OAuth 2.0 access token diff --git a/lib/omniauth-line-messenger.rb b/lib/omniauth-line-messenger.rb new file mode 100644 index 0000000..cfe9a91 --- /dev/null +++ b/lib/omniauth-line-messenger.rb @@ -0,0 +1,2 @@ +require "omniauth-line-messenger/version" +require 'omniauth/strategies/line_messenger' diff --git a/lib/omniauth-line-messenger/version.rb b/lib/omniauth-line-messenger/version.rb new file mode 100644 index 0000000..18e402e --- /dev/null +++ b/lib/omniauth-line-messenger/version.rb @@ -0,0 +1,5 @@ +module OmniAuth + module LineMessenger + VERSION = "0.2.0" + end +end diff --git a/lib/omniauth-line.rb b/lib/omniauth-line.rb deleted file mode 100644 index dd46c84..0000000 --- a/lib/omniauth-line.rb +++ /dev/null @@ -1,2 +0,0 @@ -require "omniauth-line/version" -require 'omniauth/strategies/line' diff --git a/lib/omniauth-line/version.rb b/lib/omniauth-line/version.rb deleted file mode 100644 index 9ff47e0..0000000 --- a/lib/omniauth-line/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module OmniAuth - module Line - VERSION = "0.1.0" - end -end diff --git a/lib/omniauth/strategies/line.rb b/lib/omniauth/strategies/line_messenger.rb similarity index 68% rename from lib/omniauth/strategies/line.rb rename to lib/omniauth/strategies/line_messenger.rb index 160cb31..1024b3d 100644 --- a/lib/omniauth/strategies/line.rb +++ b/lib/omniauth/strategies/line_messenger.rb @@ -3,8 +3,8 @@ module OmniAuth module Strategies - class Line < OmniAuth::Strategies::OAuth2 - option :name, 'line' + class LineMessenger < OmniAuth::Strategies::OAuth2 + option :name, 'line_messenger' option :scope, 'profile openid email' option :client_options, { @@ -31,7 +31,8 @@ def callback_url name: raw_info['displayName'], image: raw_info['pictureUrl'], description: raw_info['statusMessage'], - email: JWT.decode(access_token.params['id_token'], options['client_secret']).first&.dig('email') + email: fetch_email + # email: JWT.decode(access_token.params['id_token'], options['client_secret']).first&.dig('email') } end @@ -42,6 +43,12 @@ def raw_info raise ::Timeout::Error end + def fetch_email + data = JSON.load(access_token.post('oauth2/v2.1/verify', params: { id_token: access_token.params['id_token'], client_id: options['client_id'] }).body) + data['email'] + rescue ::Errno::ETIMEDOUT + raise ::Timeout::Error + end end end end diff --git a/omniauth-line.gemspec b/omniauth-line-messenger.gemspec similarity index 66% rename from omniauth-line.gemspec rename to omniauth-line-messenger.gemspec index 8b5d63c..24ebdf3 100644 --- a/omniauth-line.gemspec +++ b/omniauth-line-messenger.gemspec @@ -1,13 +1,13 @@ # -*- encoding: utf-8 -*- $:.push File.expand_path("../lib", __FILE__) -require "omniauth-line/version" +require "omniauth-line-messenger/version" Gem::Specification.new do |s| - s.name = "omniauth-line" - s.version = OmniAuth::Line::VERSION - s.authors = ["kazasiki"] - s.email = ["kazasiki@gmail.com"] - s.homepage = "https://github.com/kazasiki/omniauth-line" + s.name = "omniauth-line-messenger" + s.version = OmniAuth::LineMessenger::VERSION + s.authors = ["kazasiki", "marsz"] + s.email = ["marsz330@gmail.com"] + s.homepage = "https://github.com/marsz/omniauth-line-messenger" s.description = %q{OmniAuth strategy for Line} s.summary = s.description s.license = "MIT" diff --git a/spec/omniauth/strategies/line_spec.rb b/spec/omniauth/strategies/line_messenger_spec.rb similarity index 86% rename from spec/omniauth/strategies/line_spec.rb rename to spec/omniauth/strategies/line_messenger_spec.rb index ee787d2..89f45ce 100644 --- a/spec/omniauth/strategies/line_spec.rb +++ b/spec/omniauth/strategies/line_messenger_spec.rb @@ -1,11 +1,11 @@ require 'spec_helper' -describe OmniAuth::Strategies::Line do +describe OmniAuth::Strategies::LineMessenger do let(:request) { double('Request', :params => {}, :cookies => {}, :env => {}) } subject do args = ['channel_id', 'secret', @options || {}].compact - OmniAuth::Strategies::Line.new(*args).tap do |strategy| + OmniAuth::Strategies::LineMessenger.new(*args).tap do |strategy| allow(strategy).to receive(:request) { request } @@ -14,7 +14,7 @@ describe 'client options' do it 'should have correct name' do - expect(subject.options.name).to eq('line') + expect(subject.options.name).to eq('line_messenger') end it 'should have correct site' do @@ -33,6 +33,7 @@ describe 'uid' do before do allow(subject).to receive(:raw_info).and_return(raw_info_hash) + allow(subject).to receive(:fetch_email).and_return('foo@bar.com') end it 'should returns the uid' do @@ -43,6 +44,7 @@ describe 'info' do before do allow(subject).to receive(:raw_info).and_return(raw_info_hash) + allow(subject).to receive(:fetch_email).and_return('foo@bar.com') end it 'should returns the name' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index bf2ffa6..44b74e9 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -8,7 +8,7 @@ require 'rack/test' require 'webmock/rspec' require 'omniauth' -require 'omniauth-line' +require 'omniauth-line-messenger' RSpec.configure do |config| config.include WebMock::API From 29705e7dd482519ebeafafcb5d48d4cd9b104952 Mon Sep 17 00:00:00 2001 From: MarsZ Date: Tue, 17 Sep 2024 18:17:03 +0800 Subject: [PATCH 3/5] fixup --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c80cc37..e43c4a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /coverage /coverage/* *.DS_Store +*.gem From 1ae76921ce488b9fbbcd84211d1f4422808aafca Mon Sep 17 00:00:00 2001 From: MarsZ Date: Tue, 17 Sep 2024 20:16:01 +0800 Subject: [PATCH 4/5] use line as provider name --- README.md | 2 +- lib/omniauth-line-messenger/version.rb | 2 +- lib/omniauth/strategies/line_messenger.rb | 2 +- spec/omniauth/strategies/line_messenger_spec.rb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7d2310e..6aa22b3 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Next, tell OmniAuth about this provider. For a Rails app, your `config/initializ ```ruby # PROFILE permission required!! Rails.application.config.middleware.use OmniAuth::Builder do - provider :line_messenger, "Channel_ID", "Channel_Secret" + provider :line, "Channel_ID", "Channel_Secret" end ``` diff --git a/lib/omniauth-line-messenger/version.rb b/lib/omniauth-line-messenger/version.rb index 18e402e..8271c2d 100644 --- a/lib/omniauth-line-messenger/version.rb +++ b/lib/omniauth-line-messenger/version.rb @@ -1,5 +1,5 @@ module OmniAuth module LineMessenger - VERSION = "0.2.0" + VERSION = "0.3.0" end end diff --git a/lib/omniauth/strategies/line_messenger.rb b/lib/omniauth/strategies/line_messenger.rb index 1024b3d..56faceb 100644 --- a/lib/omniauth/strategies/line_messenger.rb +++ b/lib/omniauth/strategies/line_messenger.rb @@ -4,7 +4,7 @@ module OmniAuth module Strategies class LineMessenger < OmniAuth::Strategies::OAuth2 - option :name, 'line_messenger' + option :name, 'line' option :scope, 'profile openid email' option :client_options, { diff --git a/spec/omniauth/strategies/line_messenger_spec.rb b/spec/omniauth/strategies/line_messenger_spec.rb index 89f45ce..f1d035d 100644 --- a/spec/omniauth/strategies/line_messenger_spec.rb +++ b/spec/omniauth/strategies/line_messenger_spec.rb @@ -14,7 +14,7 @@ describe 'client options' do it 'should have correct name' do - expect(subject.options.name).to eq('line_messenger') + expect(subject.options.name).to eq('line') end it 'should have correct site' do From ded9aa8444715b1493bb54986e68c82e0688a102 Mon Sep 17 00:00:00 2001 From: MarsZ Date: Wed, 18 Sep 2024 02:51:59 +0800 Subject: [PATCH 5/5] rollback to line provider --- Gemfile.lock | 2 +- lib/omniauth-line-messenger.rb | 4 ++-- lib/omniauth-line-messenger/version.rb | 5 ----- lib/omniauth-line/version.rb | 5 +++++ lib/omniauth/strategies/{line_messenger.rb => line.rb} | 2 +- omniauth-line-messenger.gemspec | 4 ++-- .../strategies/{line_messenger_spec.rb => line_spec.rb} | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) delete mode 100644 lib/omniauth-line-messenger/version.rb create mode 100644 lib/omniauth-line/version.rb rename lib/omniauth/strategies/{line_messenger.rb => line.rb} (96%) rename spec/omniauth/strategies/{line_messenger_spec.rb => line_spec.rb} (95%) diff --git a/Gemfile.lock b/Gemfile.lock index 49ab61e..3809383 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - omniauth-line-messenger (0.2.0) + omniauth-line-messenger (0.3.1) json (>= 2.3.0) omniauth-oauth2 (~> 1.3) diff --git a/lib/omniauth-line-messenger.rb b/lib/omniauth-line-messenger.rb index cfe9a91..dd46c84 100644 --- a/lib/omniauth-line-messenger.rb +++ b/lib/omniauth-line-messenger.rb @@ -1,2 +1,2 @@ -require "omniauth-line-messenger/version" -require 'omniauth/strategies/line_messenger' +require "omniauth-line/version" +require 'omniauth/strategies/line' diff --git a/lib/omniauth-line-messenger/version.rb b/lib/omniauth-line-messenger/version.rb deleted file mode 100644 index 8271c2d..0000000 --- a/lib/omniauth-line-messenger/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module OmniAuth - module LineMessenger - VERSION = "0.3.0" - end -end diff --git a/lib/omniauth-line/version.rb b/lib/omniauth-line/version.rb new file mode 100644 index 0000000..55ce2e4 --- /dev/null +++ b/lib/omniauth-line/version.rb @@ -0,0 +1,5 @@ +module OmniAuth + module Line + VERSION = "0.3.2" + end +end diff --git a/lib/omniauth/strategies/line_messenger.rb b/lib/omniauth/strategies/line.rb similarity index 96% rename from lib/omniauth/strategies/line_messenger.rb rename to lib/omniauth/strategies/line.rb index 56faceb..0335589 100644 --- a/lib/omniauth/strategies/line_messenger.rb +++ b/lib/omniauth/strategies/line.rb @@ -3,7 +3,7 @@ module OmniAuth module Strategies - class LineMessenger < OmniAuth::Strategies::OAuth2 + class Line < OmniAuth::Strategies::OAuth2 option :name, 'line' option :scope, 'profile openid email' diff --git a/omniauth-line-messenger.gemspec b/omniauth-line-messenger.gemspec index 24ebdf3..fa2d1ce 100644 --- a/omniauth-line-messenger.gemspec +++ b/omniauth-line-messenger.gemspec @@ -1,10 +1,10 @@ # -*- encoding: utf-8 -*- $:.push File.expand_path("../lib", __FILE__) -require "omniauth-line-messenger/version" +require "omniauth-line/version" Gem::Specification.new do |s| s.name = "omniauth-line-messenger" - s.version = OmniAuth::LineMessenger::VERSION + s.version = OmniAuth::Line::VERSION s.authors = ["kazasiki", "marsz"] s.email = ["marsz330@gmail.com"] s.homepage = "https://github.com/marsz/omniauth-line-messenger" diff --git a/spec/omniauth/strategies/line_messenger_spec.rb b/spec/omniauth/strategies/line_spec.rb similarity index 95% rename from spec/omniauth/strategies/line_messenger_spec.rb rename to spec/omniauth/strategies/line_spec.rb index f1d035d..d755a40 100644 --- a/spec/omniauth/strategies/line_messenger_spec.rb +++ b/spec/omniauth/strategies/line_spec.rb @@ -1,11 +1,11 @@ require 'spec_helper' -describe OmniAuth::Strategies::LineMessenger do +describe OmniAuth::Strategies::Line do let(:request) { double('Request', :params => {}, :cookies => {}, :env => {}) } subject do args = ['channel_id', 'secret', @options || {}].compact - OmniAuth::Strategies::LineMessenger.new(*args).tap do |strategy| + OmniAuth::Strategies::Line.new(*args).tap do |strategy| allow(strategy).to receive(:request) { request }