google_drive-persistent_session 0.1.1 → 0.1.2

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
  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