google_drive-persistent_session 0.1.1 → 0.1.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 +4 -4
- data/README.md +1 -1
- data/google_drive-persistent_session.gemspec +2 -1
- data/lib/google_drive/persistent_session.rb +4 -118
- data/lib/google_drive/persistent_session/credential_storage.rb +25 -0
- data/lib/google_drive/persistent_session/file_store_ext.rb +8 -0
- data/lib/google_drive/persistent_session/persistent_session.rb +85 -0
- data/lib/google_drive/persistent_session/version.rb +5 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4b4980bcca37db0193bc388f295a098e199eb95
|
4
|
+
data.tar.gz: 39056f78dc0d6475f2fce5697e587dffcb0f4011
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a1ca0fd1bf638640717c1a0ead36b4da31a719e0b449891d067955c40627dec41eb2b0ecf1570afafdf82face609013a7b5ad8e2e1b8c97d489d42cb94552e5
|
7
|
+
data.tar.gz: c2eab48f54a3b366fa0e7e30e6df605abfaf22a7dc12296076077947ed4c122e0ac9706129c42bd08ef8a01458780c47127cb29d44cb5ad085d9c8baa30976c5
|
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::
|
26
|
+
#GoogleDrive::CredentialStorage.store = Google::APIClient::FileStore.new('~/.google_drive-oauth2.json')
|
27
27
|
|
28
28
|
session = GoogleDrive::PersistentSession.login
|
29
29
|
|
@@ -1,10 +1,11 @@
|
|
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 =
|
8
|
+
spec.version = GoogleDrive::PersistentSession::VERSION
|
8
9
|
spec.authors = ['Genki Sugawara']
|
9
10
|
spec.email = ['sgwr_dts@yahoo.co.jp']
|
10
11
|
spec.summary = %q{Persist credential for google-drive-ruby.}
|
@@ -1,124 +1,10 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'forwardable'
|
3
3
|
require 'google/api_client'
|
4
|
-
require 'google/api_client/auth/file_storage'
|
5
4
|
require 'google_drive'
|
6
5
|
require 'highline'
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
def_delegator :@highline, :ask
|
13
|
-
|
14
|
-
THREAD_KEY = "#{self.to_s}::THREAD_KEY"
|
15
|
-
DEFAULE_CREDENTIAL_STORE_FILE = '~/.google_drive-oauth2.json'
|
16
|
-
|
17
|
-
class << self
|
18
|
-
def credential_store_file
|
19
|
-
@credential_store_file ||= ::File.expand_path(DEFAULE_CREDENTIAL_STORE_FILE)
|
20
|
-
end
|
21
|
-
|
22
|
-
def credential_store_file=(value)
|
23
|
-
@credential_store_file = value
|
24
|
-
end
|
25
|
-
|
26
|
-
def login
|
27
|
-
self.new
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def initialize
|
32
|
-
@highline = HighLine.new
|
33
|
-
ensure_login
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def ensure_login
|
39
|
-
unless is_credential_stored?
|
40
|
-
create_credential_store_file
|
41
|
-
end
|
42
|
-
|
43
|
-
credential = file_storage.load_credentials
|
44
|
-
|
45
|
-
if !credential.access_token
|
46
|
-
fetch_access_token(credential)
|
47
|
-
elsif expired?(credential)
|
48
|
-
refresh(credential)
|
49
|
-
end
|
50
|
-
|
51
|
-
unless session
|
52
|
-
login_with_oauth(credential.access_token)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def is_credential_stored?
|
57
|
-
::File.exist?(self.class.credential_store_file)
|
58
|
-
end
|
59
|
-
|
60
|
-
def expired?(credential)
|
61
|
-
credential.issued_at + credential.expires_in <= Time.new
|
62
|
-
end
|
63
|
-
|
64
|
-
def create_credential_store_file
|
65
|
-
client_id = ask('Enter CLIENT ID: ')
|
66
|
-
client_secret = ask('Enter CLIENT SECRET: ') {|q| q.echo = false }
|
67
|
-
puts # line break
|
68
|
-
|
69
|
-
credential = Signet::OAuth2::Client.new(
|
70
|
-
:client_id => client_id,
|
71
|
-
:client_secret => client_secret,
|
72
|
-
:refresh_token => ''
|
73
|
-
)
|
74
|
-
|
75
|
-
file_storage.write_credentials(credential)
|
76
|
-
FileUtils.chmod(0600, credential_store_file)
|
77
|
-
end
|
78
|
-
|
79
|
-
def fetch_access_token(credential)
|
80
|
-
credential.scope = %w(
|
81
|
-
https://www.googleapis.com/auth/drive
|
82
|
-
https://spreadsheets.google.com/feeds/
|
83
|
-
).join(' ')
|
84
|
-
|
85
|
-
credential.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
|
86
|
-
credential.grant_type = 'authorization_code'
|
87
|
-
|
88
|
-
message = "1. Open this page:\n%s\n\n" % credential.authorization_uri
|
89
|
-
message << "2. Enter the authorization code shown in the page: "
|
90
|
-
credential.code = ask(message)
|
91
|
-
|
92
|
-
credential.fetch_access_token!
|
93
|
-
file_storage.write_credentials(credential)
|
94
|
-
login_with_oauth(credential.access_token)
|
95
|
-
end
|
96
|
-
|
97
|
-
def refresh(credential)
|
98
|
-
credential.refresh!
|
99
|
-
file_storage.write_credentials(credential)
|
100
|
-
login_with_oauth(credential.access_token)
|
101
|
-
end
|
102
|
-
|
103
|
-
def session
|
104
|
-
Thread.current[THREAD_KEY]
|
105
|
-
end
|
106
|
-
|
107
|
-
def login_with_oauth(access_token)
|
108
|
-
Thread.current[THREAD_KEY] = GoogleDrive.login_with_oauth(access_token)
|
109
|
-
end
|
110
|
-
|
111
|
-
def file_storage
|
112
|
-
@file_storage ||= Google::APIClient::FileStorage.new(credential_store_file)
|
113
|
-
end
|
114
|
-
|
115
|
-
def credential_store_file
|
116
|
-
self.class.credential_store_file
|
117
|
-
end
|
118
|
-
|
119
|
-
def method_missing(method_name, *args , &block)
|
120
|
-
ensure_login
|
121
|
-
session.send(method_name, *args, &block)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
7
|
+
require 'google_drive/persistent_session/version'
|
8
|
+
require 'google_drive/persistent_session/file_store_ext'
|
9
|
+
require 'google_drive/persistent_session/credential_storage'
|
10
|
+
require 'google_drive/persistent_session/persistent_session'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module GoogleDrive::CredentialStorage
|
2
|
+
DEFAULE_FILE_STORE_PATH = '~/.google_drive-oauth2.json'
|
3
|
+
|
4
|
+
class << self
|
5
|
+
def store
|
6
|
+
@store ||= Google::APIClient::FileStore.new(::File.expand_path(DEFAULE_FILE_STORE_PATH))
|
7
|
+
end
|
8
|
+
|
9
|
+
def store=(value)
|
10
|
+
@store = value
|
11
|
+
end
|
12
|
+
end # of class methods
|
13
|
+
|
14
|
+
def store
|
15
|
+
GoogleDrive::CredentialStorage.store
|
16
|
+
end
|
17
|
+
|
18
|
+
def credential_stored?
|
19
|
+
not store.load_credentials.nil?
|
20
|
+
end
|
21
|
+
|
22
|
+
def storage
|
23
|
+
@storage ||= Google::APIClient::Storage.new(store)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,85 @@
|
|
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.access_token
|
25
|
+
fetch_access_token(credential)
|
26
|
+
elsif credential.expired?
|
27
|
+
refresh(credential)
|
28
|
+
end
|
29
|
+
|
30
|
+
unless session
|
31
|
+
login_with_oauth(credential.access_token)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def store_credential
|
36
|
+
client_id = ask('Enter CLIENT ID: ')
|
37
|
+
client_secret = ask('Enter CLIENT SECRET: ') {|q| q.echo = false }
|
38
|
+
puts # line break
|
39
|
+
|
40
|
+
credential = Signet::OAuth2::Client.new(
|
41
|
+
:client_id => client_id,
|
42
|
+
:client_secret => client_secret,
|
43
|
+
:refresh_token => ''
|
44
|
+
)
|
45
|
+
|
46
|
+
storage.write_credentials(credential)
|
47
|
+
end
|
48
|
+
|
49
|
+
def fetch_access_token(credential)
|
50
|
+
credential.scope = %w(
|
51
|
+
https://www.googleapis.com/auth/drive
|
52
|
+
https://spreadsheets.google.com/feeds/
|
53
|
+
).join(' ')
|
54
|
+
|
55
|
+
credential.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
|
56
|
+
credential.grant_type = 'authorization_code'
|
57
|
+
|
58
|
+
message = "1. Open this page:\n%s\n\n" % credential.authorization_uri
|
59
|
+
message << "2. Enter the authorization code shown in the page: "
|
60
|
+
credential.code = ask(message)
|
61
|
+
|
62
|
+
credential.fetch_access_token!
|
63
|
+
storage.write_credentials(credential)
|
64
|
+
login_with_oauth(credential.access_token)
|
65
|
+
end
|
66
|
+
|
67
|
+
def refresh(credential)
|
68
|
+
credential.refresh!
|
69
|
+
storage.write_credentials(credential)
|
70
|
+
login_with_oauth(credential.access_token)
|
71
|
+
end
|
72
|
+
|
73
|
+
def session
|
74
|
+
Thread.current[THREAD_KEY]
|
75
|
+
end
|
76
|
+
|
77
|
+
def login_with_oauth(access_token)
|
78
|
+
Thread.current[THREAD_KEY] = GoogleDrive.login_with_oauth(access_token)
|
79
|
+
end
|
80
|
+
|
81
|
+
def method_missing(method_name, *args , &block)
|
82
|
+
ensure_login
|
83
|
+
session.send(method_name, *args, &block)
|
84
|
+
end
|
85
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_drive-persistent_session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google_drive
|
@@ -80,6 +80,10 @@ files:
|
|
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
|