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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 02d1e3ec096c8f506a575c50c72c0804c5c52748
4
- data.tar.gz: d89b4046840c2fa7acdc5e726a7a9b588d63771d
3
+ metadata.gz: c4b4980bcca37db0193bc388f295a098e199eb95
4
+ data.tar.gz: 39056f78dc0d6475f2fce5697e587dffcb0f4011
5
5
  SHA512:
6
- metadata.gz: bb84c133b11ffcea6f00068593765360fb24c777c87e77626a77ef18b352d16236c6dec4e42777d33c9e7ee37430dd144aea32fcc8e6a203781827eb96511240
7
- data.tar.gz: 2f327b5ea9ba619e2abeeb8fa61b5291981bd8318da8e50804436fdd3e2204443f3b4eb6796156419cf1c0a6065c2159853c28106f8fe0118e08d63a7ed9d53a
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::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,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 = '0.1.1'
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
- module GoogleDrive
9
- class PersistentSession
10
- extend Forwardable
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,8 @@
1
+ class Google::APIClient::FileStore
2
+ alias write_credentials_orig write_credentials
3
+
4
+ def write_credentials(credentials_hash)
5
+ write_credentials_orig(credentials_hash)
6
+ FileUtils.chmod(0600, path)
7
+ end
8
+ 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
@@ -0,0 +1,5 @@
1
+ module GoogleDrive
2
+ class PersistentSession
3
+ VERSION = '0.1.2'
4
+ end
5
+ 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.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-17 00:00:00.000000000 Z
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