omniauth-feishu 0.1.5 → 0.1.8

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: 843abb9c674bd1cf0899fc1b27dbded35cc719bf8eb8f2b5bef0dc1924c0c33d
4
- data.tar.gz: 7f84f3053d7079d5769a6b37a445787d6d8dba6d234fba9f8a64909dc7ca2804
3
+ metadata.gz: ac97f7c1d2639fdb1b2812ec5d6cb66cc636be214d17b69a89c00e32e3981551
4
+ data.tar.gz: 02ddf74e3a7255059390cc9dbf268572050f52ad00a9fc9ede60fdc1e60998ea
5
5
  SHA512:
6
- metadata.gz: 6d5f23d921674ad9bac38c5ace9a1f034c1c6fa77d0cc7cecedd7f4dedc0425620d68dfd7303280e5a89735f16d28354abfebd4f9d2b1c1889520434ef09a0fb
7
- data.tar.gz: c4be60d376e3249c8ba94a4243948859ee555c089161112c180f5c3fdb855892633f30b8cd3468cb836cbbfa0ee6430cb84c8e42501790f40323eb1a61545dfd
6
+ metadata.gz: fa62ebaa035fa8c04b2e27ab8064340fb2d5209a20dfc85de806ddcf6413608a68e6378647c5ce92e090295392b9e6fb1783217cd247ffb0ae6f16136394db08
7
+ data.tar.gz: 1ba97b40558d0c54f4cba6bbfaa155082620a090dc6420f3dcc9103c2fd18b44c59956336a05526ea19f2ffdef6f5077ada17563a0232fe9efd491449e18c981
data/.gitignore CHANGED
@@ -6,3 +6,5 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+
10
+ Gemfile.lock
@@ -1,5 +1,5 @@
1
1
  module Omniauth
2
2
  module Feishu
3
- VERSION = "0.1.5"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
@@ -2,21 +2,26 @@ require 'omniauth-oauth2'
2
2
 
3
3
  module OmniAuth
4
4
  module Strategies
5
+
6
+ # 飞书登录
7
+ #
8
+ # 飞书要求请求采用 json 格式主体,很多都需要自定义
9
+ # 官方文档: https://open.feishu.cn/document/ukTMukTMukTM/uETOwYjLxkDM24SM5AjN
5
10
  class Feishu < OmniAuth::Strategies::OAuth2
6
11
  class NoAppAccessTokenError < StandardError; end
7
12
 
8
- attr_reader :app_access_token
9
-
10
13
  option :name, 'feishu'
11
14
 
12
15
  option :client_options, {
13
- site: 'https://open.feishu.cn',
14
- authorize_url: "/open-apis/authen/v1/user_auth_page_beta",
15
- token_url: "https://open.feishu.cn/open-apis/authen/v1/access_token",
16
- app_access_token_url: "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal",
17
- user_info_url: "https://open.feishu.cn/open-apis/authen/v1/user_info"
16
+ site: 'https://open.feishu.cn/open-apis/authen/v1/',
17
+ authorize_url: 'user_auth_page_beta',
18
+ token_url: 'access_token',
19
+ app_access_token_url: 'https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal',
20
+ user_info_url: 'user_info'
18
21
  }
19
22
 
23
+ uid { raw_info['user_id'] }
24
+
20
25
  info do
21
26
  {
22
27
  name: raw_info['name'],
@@ -26,24 +31,21 @@ module OmniAuth
26
31
  avatar_thumb: raw_info['avatar_thumb'],
27
32
  avatar_middle: raw_info['avatar_middle'],
28
33
  avatar_big: raw_info['avatar_big'],
29
- user_id: raw_info['user_id'],
30
- union_id: raw_info['union_id'],
31
- open_id: raw_info['open_id'],
32
- en_name: raw_info['en_name'],
33
- app_access_token: @app_access_token
34
+ user_id: raw_info['user_id'],
35
+ union_id: raw_info['union_id'],
36
+ open_id: raw_info['open_id'],
37
+ en_name: raw_info['en_name']
34
38
  }
35
39
  end
36
40
 
37
41
  def raw_info
38
- @raw_info ||= begin
39
- response = Faraday.get(
40
- options.client_options.user_info_url,
41
- nil,
42
- content_type: 'application/json', authorization: "Bearer #{access_token.token}"
43
- )
44
- response_body = JSON.parse(response.body)
45
- response_body['data']
46
- end
42
+ @raw_info ||= client.request(:get, options.client_options.user_info_url,
43
+ { headers: {
44
+ 'Content-Type' => 'application/json; charset=utf-8',
45
+ 'Authorization' => "Bearer #{access_token.token}"
46
+ }
47
+ })
48
+ .parsed['data']
47
49
  end
48
50
 
49
51
  def authorize_params
@@ -52,35 +54,43 @@ module OmniAuth
52
54
  end
53
55
  end
54
56
 
57
+ # 飞书采用非标准 OAuth 2 请求体和返回结构体,需要自定义
55
58
  def build_access_token
56
- resp = Faraday.post(
57
- options.client_options.token_url,
58
- { code: request.params["code"], app_access_token: app_access_token, grant_type: "authorization_code" }.to_json,
59
- content_type: "application/json"
60
- )
61
- data = JSON.parse(resp.body)['data']
62
- ::OAuth2::AccessToken.from_hash(client, data)
63
- end
59
+ code = request.params['code']
60
+ data = client.request(:post, options.client_options.token_url,
61
+ { body: {
62
+ code: code,
63
+ grant_type: 'authorization_code'
64
+ }.to_json,
65
+ headers: {
66
+ 'Content-Type' => 'application/json; charset=utf-8',
67
+ 'Authorization' => "Bearer #{app_access_token}"
68
+ }
69
+ })
70
+ .parsed['data']
64
71
 
65
- def callback_phase
66
- get_app_access_token
67
- super
72
+ ::OAuth2::AccessToken.from_hash(client, data)
68
73
  end
69
74
 
70
75
  private
71
76
 
72
- def get_app_access_token
73
- resp = Faraday.post(
74
- options.client_options.app_access_token_url,
75
- { app_id: options.client_id, app_secret: options.client_secret }.to_json,
76
- content_type: "application/json"
77
- )
78
- response_body = JSON.parse(resp.body)
79
- if response_body.key?('app_access_token')
80
- @app_access_token = response_body['app_access_token']
81
- else
82
- raise NoAppAccessTokenError, "cannot get app_access_token."
83
- end
77
+ def app_access_token
78
+ return @app_access_token if @app_access_token
79
+
80
+ @app_access_token ||= client.request(:post, options.client_options.app_access_token_url,
81
+ { body: {
82
+ app_id: options.client_id,
83
+ app_secret: options.client_secret
84
+ }.to_json,
85
+ headers: {
86
+ 'Content-Type' => 'application/json; charset=utf-8'
87
+ }
88
+ })
89
+ .parsed['app_access_token']
90
+
91
+ raise NoAppAccessTokenError, 'No app access token' unless @app_access_token
92
+
93
+ @app_access_token
84
94
  end
85
95
  end
86
96
  end
@@ -11,10 +11,10 @@ Gem::Specification.new do |spec|
11
11
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
12
12
  spec.license = "MIT"
13
13
 
14
- spec.add_dependency "omniauth-oauth2", "~> 1.6.0"
14
+ spec.add_dependency "omniauth-oauth2", ">= 1.6.0", "< 2"
15
15
 
16
- spec.add_development_dependency "rake"
17
- spec.add_development_dependency "rspec"
16
+ # spec.add_development_dependency "rake"
17
+ # spec.add_development_dependency "rspec"
18
18
 
19
19
  spec.files = `git ls-files`.split("\n")
20
20
  spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,76 +1,48 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-feishu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Renny
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-10 00:00:00.000000000 Z
11
+ date: 2022-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth-oauth2
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 1.6.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
17
+ - - ">="
25
18
  - !ruby/object:Gem::Version
26
19
  version: 1.6.0
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
20
+ - - "<"
32
21
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
22
+ version: '2'
23
+ type: :runtime
35
24
  prerelease: false
36
25
  version_requirements: !ruby/object:Gem::Requirement
37
26
  requirements:
38
27
  - - ">="
39
28
  - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
29
+ version: 1.6.0
30
+ - - "<"
53
31
  - !ruby/object:Gem::Version
54
- version: '0'
32
+ version: '2'
55
33
  description:
56
34
  email:
57
35
  - rennyallen@hotmail.com
58
- executables:
59
- - console
60
- - setup
36
+ executables: []
61
37
  extensions: []
62
38
  extra_rdoc_files: []
63
39
  files:
64
40
  - ".gitignore"
65
41
  - ".travis.yml"
66
42
  - Gemfile
67
- - Gemfile.lock
68
43
  - LICENSE
69
44
  - README.md
70
45
  - Rakefile
71
- - _config.yml
72
- - bin/console
73
- - bin/setup
74
46
  - lib/omniauth/feishu.rb
75
47
  - lib/omniauth/feishu/version.rb
76
48
  - lib/omniauth/strategies/feishu.rb
@@ -94,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
66
  - !ruby/object:Gem::Version
95
67
  version: '0'
96
68
  requirements: []
97
- rubygems_version: 3.0.9
69
+ rubygems_version: 3.1.4
98
70
  signing_key:
99
71
  specification_version: 4
100
72
  summary: Lark(Feishu) OAuth2 Strategy for OmniAuth
data/Gemfile.lock DELETED
@@ -1,59 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- omniauth-feishu (0.1.5)
5
- omniauth-oauth2 (~> 1.6.0)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- diff-lcs (1.4.4)
11
- faraday (1.3.0)
12
- faraday-net_http (~> 1.0)
13
- multipart-post (>= 1.2, < 3)
14
- ruby2_keywords
15
- faraday-net_http (1.0.0)
16
- hashie (4.1.0)
17
- jwt (2.2.2)
18
- multi_json (1.15.0)
19
- multi_xml (0.6.0)
20
- multipart-post (2.1.1)
21
- oauth2 (1.4.4)
22
- faraday (>= 0.8, < 2.0)
23
- jwt (>= 1.0, < 3.0)
24
- multi_json (~> 1.3)
25
- multi_xml (~> 0.5)
26
- rack (>= 1.2, < 3)
27
- omniauth (1.9.1)
28
- hashie (>= 3.4.6)
29
- rack (>= 1.6.2, < 3)
30
- omniauth-oauth2 (1.6.0)
31
- oauth2 (~> 1.1)
32
- omniauth (~> 1.9)
33
- rack (2.2.3)
34
- rake (12.3.2)
35
- rspec (3.10.0)
36
- rspec-core (~> 3.10.0)
37
- rspec-expectations (~> 3.10.0)
38
- rspec-mocks (~> 3.10.0)
39
- rspec-core (3.10.1)
40
- rspec-support (~> 3.10.0)
41
- rspec-expectations (3.10.1)
42
- diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.10.0)
44
- rspec-mocks (3.10.1)
45
- diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.10.0)
47
- rspec-support (3.10.1)
48
- ruby2_keywords (0.0.2)
49
-
50
- PLATFORMS
51
- ruby
52
-
53
- DEPENDENCIES
54
- omniauth-feishu!
55
- rake (~> 12.0)
56
- rspec
57
-
58
- BUNDLED WITH
59
- 2.1.4
data/_config.yml DELETED
@@ -1,2 +0,0 @@
1
- theme: jekyll-theme-cayman
2
- show_downloads: true
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "omniauth/feishu"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here