sf-gdrive 0.1.5 → 0.1.12
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 +5 -5
- data/app/controllers/gdrive/drive_controller.rb +72 -34
- data/app/views/gdrive/drive/index.html.erb +1 -1
- data/lib/gdrive/version.rb +1 -1
- metadata +8 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bea772569dca67a5b5866ac45b026b36ba311db4ed71ef32f0e9c9c9eb5bf70c
|
4
|
+
data.tar.gz: cf7375758c11b092499ccc115702540f5e3cdcb6b77c94c839fba3c763d5f731
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1046fdcfbdeb38aed95321e534b1db655cd58b39e21d164f0448f6381c56faefd12daf93ba2eb5c6418f3c3f207f13ec25af481244f34c6a3584617e47de3588
|
7
|
+
data.tar.gz: 8228caf3e1213690f96c9b93370e6f5284d0d1edce830c180551664de054c50ea72bf6b67f362586f4b4331e6792e6a5b54a5fbaea648adc6a895308cb8fd35d
|
@@ -14,19 +14,22 @@ module Gdrive
|
|
14
14
|
)
|
15
15
|
|
16
16
|
if request["code"] == nil
|
17
|
+
session["redirect_url"] = params[:redirect_url]
|
17
18
|
@auth_uri = auth_client.authorization_uri.to_s
|
19
|
+
redirect_to @auth_uri
|
18
20
|
else
|
19
21
|
auth_code = params[:code]
|
20
22
|
auth_client.code = auth_code
|
21
23
|
begin
|
22
24
|
auth_client.fetch_access_token!
|
23
25
|
secret_hash = auth_client.as_json.slice("expiry", "refresh_token", "access_token")
|
24
|
-
if secret_hash[
|
25
|
-
@error = 'You have already authorized this application. In order to re-configure, go to https://myaccount.google.com/permissions and revoke access to "Standard File".'
|
26
|
+
if secret_hash["refresh_token"] == nil
|
27
|
+
@error = 'You have already authorized this application. In order to re-configure, go to <a href="https://myaccount.google.com/permissions">https://myaccount.google.com/permissions</a> and revoke access to "Standard File".'
|
26
28
|
else
|
27
29
|
secret_hash[:expires_at] = auth_client.expires_at
|
28
30
|
secret = Base64.encode64(secret_hash.to_json)
|
29
|
-
@secret_url = "#{Gdrive.mount_url}/sync?key=#{secret}"
|
31
|
+
@secret_url = CGI.escape("#{Gdrive.mount_url}/sync?key=#{secret}")
|
32
|
+
redirect_to "#{session["redirect_url"]}&gdrive_secret_url=#{@secret_url}"
|
30
33
|
end
|
31
34
|
rescue
|
32
35
|
redirect_to(Gdrive.mount_url)
|
@@ -58,22 +61,17 @@ module Gdrive
|
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
61
|
-
def
|
62
|
-
client_secrets = Google::APIClient::ClientSecrets.load
|
63
|
-
client_params = client_secrets.to_authorization.as_json
|
64
|
-
secret_hash = JSON.parse(Base64.decode64(params[:key]))
|
65
|
-
client_params.merge!(secret_hash)
|
66
|
-
auth_client = Signet::OAuth2::Client.new(client_params)
|
67
|
-
drive = Google::Apis::DriveV3::DriveService.new
|
68
|
-
drive.authorization = auth_client
|
69
|
-
|
70
|
-
folder_name = "Standard Notes"
|
64
|
+
def find_or_create_folder(drive, folder_name, parent_folder)
|
71
65
|
folder_mime = "application/vnd.google-apps.folder"
|
72
|
-
|
73
66
|
folder_search = nil
|
74
67
|
begin
|
75
|
-
|
76
|
-
|
68
|
+
if parent_folder
|
69
|
+
folder_search = drive.list_files(q: "mimeType='#{folder_mime}' and name='#{folder_name}' and parents in '#{parent_folder.id}'")
|
70
|
+
else
|
71
|
+
folder_search = drive.list_files(q: "mimeType='#{folder_mime}' and name='#{folder_name}'")
|
72
|
+
end
|
73
|
+
rescue Exception => e
|
74
|
+
puts "\n\n find_or_create_folder exception: #{e}\n\n"
|
77
75
|
return
|
78
76
|
end
|
79
77
|
|
@@ -84,33 +82,73 @@ module Gdrive
|
|
84
82
|
name: folder_name,
|
85
83
|
mime_type: folder_mime
|
86
84
|
}
|
85
|
+
if parent_folder
|
86
|
+
folder_data[:parents] = [parent_folder.id]
|
87
|
+
end
|
87
88
|
folder = drive.create_file(folder_data, fields: 'id')
|
88
89
|
end
|
89
90
|
|
90
|
-
|
91
|
+
return folder
|
92
|
+
end
|
93
|
+
|
94
|
+
def sync
|
95
|
+
client_secrets = Google::APIClient::ClientSecrets.load
|
96
|
+
client_params = client_secrets.to_authorization.as_json
|
97
|
+
secret_hash = JSON.parse(Base64.decode64(params[:key]))
|
98
|
+
client_params.merge!(secret_hash)
|
99
|
+
auth_client = Signet::OAuth2::Client.new(client_params)
|
100
|
+
drive = Google::Apis::DriveV3::DriveService.new
|
101
|
+
drive.authorization = auth_client
|
102
|
+
|
103
|
+
parent = nil
|
104
|
+
folders = ["Standard Notes", "#{Time.current.year}", "#{DateTime.now.strftime("%B")}"]
|
105
|
+
resolved_folders = []
|
106
|
+
folders.each do |current_folder_name|
|
107
|
+
result = find_or_create_folder(drive, current_folder_name, parent)
|
108
|
+
resolved_folders.push(result)
|
109
|
+
parent = result
|
110
|
+
end
|
111
|
+
|
112
|
+
folder = resolved_folders.last
|
91
113
|
|
92
|
-
self.sync_decrypt_file(drive,
|
114
|
+
self.sync_decrypt_file(drive, resolved_folders.first)
|
93
115
|
|
116
|
+
auth_params = params[:auth_params]
|
94
117
|
items = params[:items]
|
95
118
|
if items && items.length > 0
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
end
|
119
|
+
tmp = Tempfile.new(SecureRandom.hex)
|
120
|
+
payload = { "items" => items}
|
121
|
+
payload["auth_params"] = auth_params if auth_params != nil
|
122
|
+
tmp.write("#{JSON.pretty_generate(payload.as_json)}")
|
123
|
+
tmp.rewind
|
124
|
+
|
125
|
+
file_name = "#{DateTime.now.strftime("%B %-d, %Y").sub(',', '')}.txt"
|
126
|
+
existing = drive.list_files(q: "name = '#{file_name}'")
|
127
|
+
if existing.files.length > 0
|
128
|
+
file = existing.files[0]
|
129
|
+
drive.update_file(file.id, upload_source: tmp.path)
|
130
|
+
else
|
131
|
+
file = drive.create_file({:name => file_name, :parents => [folder.id]}, upload_source: tmp.path, content_type: "text/plain")
|
110
132
|
end
|
111
133
|
end
|
112
|
-
|
134
|
+
rescue Signet::AuthorizationError => _e
|
135
|
+
render(
|
136
|
+
json: {
|
137
|
+
error: {
|
138
|
+
message: 'Could not authorize with Google Drive. Please verify your integration.'
|
139
|
+
}
|
140
|
+
},
|
141
|
+
status: :bad_request
|
142
|
+
)
|
143
|
+
rescue Google::Apis::Error => _e
|
144
|
+
render(
|
145
|
+
json: {
|
146
|
+
error: {
|
147
|
+
message: 'Could not sync with Google Drive. Please verify your integration.'
|
148
|
+
}
|
149
|
+
},
|
150
|
+
status: :bad_request
|
151
|
+
)
|
113
152
|
end
|
114
|
-
|
115
153
|
end
|
116
154
|
end
|
@@ -19,7 +19,7 @@
|
|
19
19
|
<p>That's it! Now, whenever you make changes to a note or tag, it will automatically be synced to your Drive.<p>
|
20
20
|
|
21
21
|
<% elsif @error %>
|
22
|
-
<strong style="color: red;">Error:</strong> <%= @error %>
|
22
|
+
<strong style="color: red;">Error:</strong> <%= @error.html_safe %>
|
23
23
|
<% else %>
|
24
24
|
<a href="<%= @auth_uri %>">Link Google Drive</a>
|
25
25
|
<% end %>
|
data/lib/gdrive/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sf-gdrive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "@StandardNotes"
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: google-api-client
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.25.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
|
-
version:
|
40
|
+
version: 0.25.0
|
41
41
|
description: Google Drive Extension for Standard File/Standard Notes.
|
42
42
|
email:
|
43
43
|
- mo@standardnotes.org
|
@@ -69,7 +69,7 @@ files:
|
|
69
69
|
- lib/tasks/gdrive_tasks.rake
|
70
70
|
homepage: https://standardnotes.org
|
71
71
|
licenses:
|
72
|
-
-
|
72
|
+
- GPL-3.0
|
73
73
|
metadata: {}
|
74
74
|
post_install_message:
|
75
75
|
rdoc_options: []
|
@@ -86,8 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
|
-
|
90
|
-
rubygems_version: 2.4.8
|
89
|
+
rubygems_version: 3.0.3
|
91
90
|
signing_key:
|
92
91
|
specification_version: 4
|
93
92
|
summary: Google Drive Extension for Standard File/Standard Notes.
|