google_drive-persistent_session 0.1.0 → 0.2.0

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
- 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: []