google_drive-persistent_session 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0b67e3482df9ee92791d942800255769a7f94218
4
- data.tar.gz: c5d45932dbcd371b20dabd8ba57a7ec1e40072e6
2
+ SHA256:
3
+ metadata.gz: 9a1a8c546ac3cd9ba880dc7068a27e955eab85b790edbbfbde8b40e1a1cd9c4d
4
+ data.tar.gz: 321e034033e5c35b3c7bb47e1ecdc31731fb5c5b8ed6e5a8594abe9d6da7598e
5
5
  SHA512:
6
- metadata.gz: ec7b5e0d73864b5f05b3e147dc303f81596c1d32f241b9e3ef3f53cde3ce181c0abbf6e356ce390ff1741ad546cafcbef311da6b4cd06cb0ce61003045643cb0
7
- data.tar.gz: e512231aaf892076cc1f449ffd5191b096c192c394a22d367719d326f94679ccbfc044e193ec5ff366c8afad03362ff3247014aae0c5e688c84d9e993afbabaf
6
+ metadata.gz: 9b7f6a6dfa29a22a5617e29093e5131e27cf85fe4b6c44f3df3458bbd194e1d05c3a23fe69b9e2f54f3dbfb5f48d22b80902fd5211f8d91ef56d8da6e6375194
7
+ data.tar.gz: a3c9cdcfdc3b5bb177c7c94e75e37ddad43ef9decb592c301f5ee2774205fd839874c4edfb8da37ac143956184ce5b6041322f05b64380fc3b6f371be5236ee8
data/README.md CHANGED
@@ -23,7 +23,7 @@ Or install it yourself as:
23
23
  ```ruby
24
24
  require 'google_drive/persistent_session'
25
25
 
26
- #GoogleDrive::PersistentSession.credential_store_file = '~/.google_drive-oauth2.json'
26
+ #GoogleDrive::CredentialStorage.store = Google::APIClient::FileStore.new('~/.google_drive-oauth2.json')
27
27
 
28
28
  session = GoogleDrive::PersistentSession.login
29
29
 
@@ -1,12 +1,13 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'google_drive/persistent_session/version'
4
5
 
5
6
  Gem::Specification.new do |spec|
6
7
  spec.name = 'google_drive-persistent_session'
7
- spec.version = '0.1.0'
8
+ spec.version = GoogleDrive::PersistentSession::VERSION
8
9
  spec.authors = ['Genki Sugawara']
9
- spec.email = ['sgwr_dts@yahoo.co.jp']
10
+ spec.email = ['sugawara@winebarrel.jp']
10
11
  spec.summary = %q{Persist credential for google-drive-ruby.}
11
12
  spec.description = %q{Persist credential for google-drive-ruby.}
12
13
  spec.homepage = 'https://github.com/winebarrel/google_drive-persistent_session'
@@ -17,7 +18,7 @@ Gem::Specification.new do |spec|
17
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
19
  spec.require_paths = ['lib']
19
20
 
20
- spec.add_dependency 'google_drive', '>= 1.0.0'
21
+ spec.add_dependency 'google_drive', '>= 3.0.7'
21
22
  spec.add_dependency 'highline'
22
23
  spec.add_development_dependency 'bundler'
23
24
  spec.add_development_dependency 'rake'
@@ -1,120 +1,9 @@
1
1
  require 'fileutils'
2
2
  require 'forwardable'
3
- require 'google/api_client'
4
- require 'google/api_client/auth/file_storage'
5
3
  require 'google_drive'
6
4
  require 'highline'
7
5
 
8
- module GoogleDrive
9
- class PersistentSession
10
- extend Forwardable
11
-
12
- def_delegator :@highline, :ask
13
-
14
- THREAD_KEY = "#{self.to_s}::THREAD_KEY"
15
-
16
- DEFAULE_CREDENTIAL_STORE_FILE = '~/.google_drive-oauth2.json'
17
- @credential_store_file = ::File.expand_path(DEFAULE_CREDENTIAL_STORE_FILE)
18
-
19
- class << self
20
- attr_accessor :credential_store_file
21
-
22
- def login
23
- self.new
24
- end
25
- end
26
-
27
- def initialize
28
- @highline = HighLine.new
29
- ensure_login
30
- end
31
-
32
- private
33
-
34
- def ensure_login
35
- unless is_credential_stored?
36
- create_credential_store_file
37
- end
38
-
39
- credential = file_storage.load_credentials
40
-
41
- if !credential.access_token
42
- fetch_access_token(credential)
43
- elsif expired?(credential)
44
- refresh(credential)
45
- end
46
-
47
- unless session
48
- login_with_oauth(credential.access_token)
49
- end
50
- end
51
-
52
- def is_credential_stored?
53
- ::File.exist?(self.class.credential_store_file)
54
- end
55
-
56
- def expired?(credential)
57
- credential.issued_at + credential.expires_in <= Time.new
58
- end
59
-
60
- def create_credential_store_file
61
- client_id = ask('Enter CLIENT ID: ')
62
- client_secret = ask('Enter CLIENT SECRET: ') {|q| q.echo = false }
63
- puts # line break
64
-
65
- credential = Signet::OAuth2::Client.new(
66
- :client_id => client_id,
67
- :client_secret => client_secret,
68
- :refresh_token => ''
69
- )
70
-
71
- file_storage.write_credentials(credential)
72
- FileUtils.chmod(0600, credential_store_file)
73
- end
74
-
75
- def fetch_access_token(credential)
76
- credential.scope = %w(
77
- https://www.googleapis.com/auth/drive
78
- https://spreadsheets.google.com/feeds/
79
- ).join(' ')
80
-
81
- credential.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
82
- credential.grant_type = 'authorization_code'
83
-
84
- message = "1. Open this page:\n%s\n\n" % credential.authorization_uri
85
- message << "2. Enter the authorization code shown in the page: "
86
- credential.code = ask(message)
87
-
88
- credential.fetch_access_token!
89
- file_storage.write_credentials(credential)
90
- login_with_oauth(credential.access_token)
91
- end
92
-
93
- def refresh(credential)
94
- credential.refresh!
95
- file_storage.write_credentials(credential)
96
- login_with_oauth(credential.access_token)
97
- end
98
-
99
- def session
100
- Thread.current[THREAD_KEY]
101
- end
102
-
103
- def login_with_oauth(access_token)
104
- Thread.current[THREAD_KEY] = GoogleDrive.login_with_oauth(access_token)
105
- end
106
-
107
- def file_storage
108
- @file_storage ||= Google::APIClient::FileStorage.new(credential_store_file)
109
- end
110
-
111
- def credential_store_file
112
- self.class.credential_store_file
113
- end
114
-
115
- def method_missing(method_name, *args , &block)
116
- ensure_login
117
- session.send(method_name, *args, &block)
118
- end
119
- end
120
- end
6
+ require 'google_drive/persistent_session/version'
7
+ require 'google_drive/persistent_session/file_store_ext'
8
+ require 'google_drive/persistent_session/credential_storage'
9
+ require 'google_drive/persistent_session/persistent_session'
@@ -0,0 +1,27 @@
1
+ require 'google/api_client/auth/storage'
2
+
3
+ module GoogleDrive::CredentialStorage
4
+ DEFAULE_FILE_STORE_PATH = '~/.google_drive-oauth2.json'
5
+
6
+ class << self
7
+ def store
8
+ @store ||= Google::APIClient::FileStore.new(::File.expand_path(DEFAULE_FILE_STORE_PATH))
9
+ end
10
+
11
+ def store=(value)
12
+ @store = value
13
+ end
14
+ end # of class methods
15
+
16
+ def store
17
+ GoogleDrive::CredentialStorage.store
18
+ end
19
+
20
+ def credential_stored?
21
+ not store.load_credentials.nil?
22
+ end
23
+
24
+ def storage
25
+ @storage ||= Google::APIClient::Storage.new(store)
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ require 'google/api_client/auth/storages/file_store'
2
+
3
+ class Google::APIClient::FileStore
4
+ alias write_credentials_orig write_credentials
5
+
6
+ def write_credentials(credentials_hash)
7
+ write_credentials_orig(credentials_hash)
8
+ FileUtils.chmod(0600, path)
9
+ end
10
+ end
@@ -0,0 +1,81 @@
1
+ class GoogleDrive::PersistentSession
2
+ extend Forwardable
3
+ include GoogleDrive::CredentialStorage
4
+
5
+ def_delegator :@highline, :ask
6
+
7
+ THREAD_KEY = "#{self.to_s}::THREAD_KEY"
8
+
9
+ def self.login
10
+ self.new
11
+ end
12
+
13
+ def initialize
14
+ @highline = HighLine.new
15
+ ensure_login
16
+ end
17
+
18
+ private
19
+
20
+ def ensure_login
21
+ store_credential unless credential_stored?
22
+ credential = storage.authorize
23
+
24
+ if credential.expired?
25
+ refresh(credential)
26
+ end
27
+
28
+ unless session
29
+ login_with_oauth(credential.access_token)
30
+ end
31
+ end
32
+
33
+ def store_credential
34
+ client_id = ask('Enter CLIENT ID: ')
35
+ client_secret = ask('Enter CLIENT SECRET: ') {|q| q.echo = false }
36
+ puts # line break
37
+
38
+ credential = Google::Auth::UserRefreshCredentials.new(
39
+ :client_id => client_id,
40
+ :client_secret => client_secret,
41
+ :scope => [
42
+ 'https://www.googleapis.com/auth/drive',
43
+ 'https://spreadsheets.google.com/feeds/'
44
+ ],
45
+ :redirect_uri => 'urn:ietf:wg:oauth:2.0:oob',
46
+ :grant_type => 'authorization_code'
47
+ )
48
+
49
+ fetch_access_token(credential)
50
+ storage.write_credentials(credential)
51
+ end
52
+
53
+ def fetch_access_token(credential)
54
+ message = "1. Open this page:\n%s\n\n" % credential.authorization_uri
55
+ message << "2. Enter the authorization code shown in the page: "
56
+ credential.code = ask(message)
57
+
58
+ credential.fetch_access_token!
59
+ storage.write_credentials(credential)
60
+ login_with_oauth(credential.access_token)
61
+ end
62
+
63
+ def refresh(credential)
64
+ credential.refresh!
65
+ storage.write_credentials(credential)
66
+ login_with_oauth(credential.access_token)
67
+ end
68
+
69
+ def session
70
+ Thread.current[THREAD_KEY]
71
+ end
72
+
73
+ def login_with_oauth(access_token)
74
+ Thread.current[THREAD_KEY] = GoogleDrive.login_with_oauth(access_token)
75
+ end
76
+
77
+ def method_missing(method_name, *args , &block)
78
+ ensure_login
79
+ session.send(method_name, *args, &block)
80
+ end
81
+ end
@@ -0,0 +1,5 @@
1
+ module GoogleDrive
2
+ class PersistentSession
3
+ VERSION = '0.2.0'
4
+ end
5
+ end
metadata CHANGED
@@ -1,107 +1,110 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_drive-persistent_session
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-17 00:00:00.000000000 Z
11
+ date: 2021-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google_drive
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0
19
+ version: 3.0.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0
26
+ version: 3.0.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: highline
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Persist credential for google-drive-ruby.
70
70
  email:
71
- - sgwr_dts@yahoo.co.jp
71
+ - sugawara@winebarrel.jp
72
72
  executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - .gitignore
76
+ - ".gitignore"
77
77
  - Gemfile
78
78
  - LICENSE.txt
79
79
  - README.md
80
80
  - Rakefile
81
81
  - google_drive-persistent_session.gemspec
82
82
  - lib/google_drive/persistent_session.rb
83
+ - lib/google_drive/persistent_session/credential_storage.rb
84
+ - lib/google_drive/persistent_session/file_store_ext.rb
85
+ - lib/google_drive/persistent_session/persistent_session.rb
86
+ - lib/google_drive/persistent_session/version.rb
83
87
  homepage: https://github.com/winebarrel/google_drive-persistent_session
84
88
  licenses:
85
89
  - MIT
86
90
  metadata: {}
87
- post_install_message:
91
+ post_install_message:
88
92
  rdoc_options: []
89
93
  require_paths:
90
94
  - lib
91
95
  required_ruby_version: !ruby/object:Gem::Requirement
92
96
  requirements:
93
- - - '>='
97
+ - - ">="
94
98
  - !ruby/object:Gem::Version
95
99
  version: '0'
96
100
  required_rubygems_version: !ruby/object:Gem::Requirement
97
101
  requirements:
98
- - - '>='
102
+ - - ">="
99
103
  - !ruby/object:Gem::Version
100
104
  version: '0'
101
105
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.0.14
104
- signing_key:
106
+ rubygems_version: 3.1.4
107
+ signing_key:
105
108
  specification_version: 4
106
109
  summary: Persist credential for google-drive-ruby.
107
110
  test_files: []