imap-backup 3.3.1 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +103 -16
- data/README.md +11 -3
- data/docs/{setting-up-gmail.md → setting-up-gmail-with-oauth2.md} +0 -0
- data/lib/imap/backup/account/connection.rb +5 -3
- data/lib/imap/backup/configuration/account.rb +6 -1
- data/lib/imap/backup/configuration/gmail_oauth2.rb +1 -1
- data/lib/imap/backup/version.rb +2 -2
- data/spec/fixtures/connection.yml +1 -1
- data/spec/unit/imap/backup/account/connection_spec.rb +9 -1
- data/spec/unit/imap/backup/configuration/account_spec.rb +37 -8
- data/spec/unit/imap/backup/configuration/setup_spec.rb +1 -1
- data/spec/unit/imap/backup/utils_spec.rb +0 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44a7f8e8754461ed51afdbd5711ba809ad6b0ed68c0f40ff95a42688d85881b9
|
4
|
+
data.tar.gz: a70019109a179506f520b969bb03de78fa67fca66001b182af99427b7a02ecdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5055eea6a69b674f02f2b50c0423df197a4c312171aa04a19b183ce784047699815ac603d8550d28f78ada6f2aa4a904d74d5b7bef8f6ea10633de68752f7a65
|
7
|
+
data.tar.gz: 7849285c5b94136b7d5f620eac770630ea4e7cf988b42cc7079021dac95163c271f5fd68d5b620ac9d36326be142557c617459ba890755920c181110cf99531a
|
data/.rubocop_todo.yml
CHANGED
@@ -1,42 +1,129 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2021-
|
3
|
+
# on 2021-09-21 15:30:34 UTC using RuboCop version 1.21.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count:
|
10
|
-
#
|
11
|
-
|
12
|
-
|
9
|
+
# Offense count: 1
|
10
|
+
# Cop supports --auto-correct.
|
11
|
+
Layout/ElseAlignment:
|
12
|
+
Exclude:
|
13
|
+
- 'lib/imap/backup/configuration/gmail_oauth2.rb'
|
13
14
|
|
14
15
|
# Offense count: 2
|
15
|
-
#
|
16
|
-
#
|
17
|
-
|
18
|
-
|
16
|
+
# Cop supports --auto-correct.
|
17
|
+
# Configuration parameters: EmptyLineBetweenMethodDefs, EmptyLineBetweenClassDefs, EmptyLineBetweenModuleDefs, AllowAdjacentOneLineDefs, NumberOfEmptyLines.
|
18
|
+
Layout/EmptyLineBetweenDefs:
|
19
|
+
Exclude:
|
20
|
+
- 'lib/google/auth/stores/in_memory_token_store.rb'
|
21
|
+
|
22
|
+
# Offense count: 1
|
23
|
+
# Cop supports --auto-correct.
|
24
|
+
# Configuration parameters: EnforcedStyleAlignWith, Severity.
|
25
|
+
# SupportedStylesAlignWith: keyword, variable, start_of_line
|
26
|
+
Layout/EndAlignment:
|
27
|
+
Exclude:
|
28
|
+
- 'lib/imap/backup/configuration/gmail_oauth2.rb'
|
29
|
+
|
30
|
+
# Offense count: 1
|
31
|
+
# Cop supports --auto-correct.
|
32
|
+
# Configuration parameters: Width, IgnoredPatterns.
|
33
|
+
Layout/IndentationWidth:
|
34
|
+
Exclude:
|
35
|
+
- 'lib/imap/backup/configuration/gmail_oauth2.rb'
|
36
|
+
|
37
|
+
# Offense count: 34
|
38
|
+
# Configuration parameters: AllowedMethods.
|
39
|
+
# AllowedMethods: enums
|
40
|
+
Lint/ConstantDefinitionInBlock:
|
41
|
+
Exclude:
|
42
|
+
- 'lib/imap/backup/configuration/asker.rb'
|
43
|
+
- 'spec/unit/gmail/authenticator_spec.rb'
|
44
|
+
- 'spec/unit/google/auth/stores/in_memory_token_store_spec.rb'
|
45
|
+
- 'spec/unit/imap/backup/account/connection_spec.rb'
|
46
|
+
- 'spec/unit/imap/backup/account/folder_spec.rb'
|
47
|
+
- 'spec/unit/imap/backup/configuration/account_spec.rb'
|
48
|
+
- 'spec/unit/imap/backup/configuration/gmail_oauth2_spec.rb'
|
19
49
|
|
20
50
|
# Offense count: 2
|
51
|
+
# Cop supports --auto-correct.
|
52
|
+
# Configuration parameters: AllowComments.
|
53
|
+
Lint/UselessMethodDefinition:
|
54
|
+
Exclude:
|
55
|
+
- 'lib/imap/backup/configuration/account.rb'
|
56
|
+
- 'lib/imap/backup/configuration/asker.rb'
|
57
|
+
|
58
|
+
# Offense count: 11
|
59
|
+
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
|
60
|
+
Metrics/AbcSize:
|
61
|
+
Max: 33
|
62
|
+
|
63
|
+
# Offense count: 3
|
21
64
|
# Configuration parameters: CountComments, CountAsOne.
|
22
65
|
Metrics/ClassLength:
|
23
|
-
Max:
|
66
|
+
Max: 171
|
24
67
|
|
25
|
-
# Offense count:
|
26
|
-
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
|
68
|
+
# Offense count: 19
|
69
|
+
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
|
27
70
|
Metrics/MethodLength:
|
28
|
-
Max:
|
71
|
+
Max: 26
|
29
72
|
|
30
73
|
# Offense count: 2
|
31
74
|
# Configuration parameters: CountComments, CountAsOne.
|
32
75
|
Metrics/ModuleLength:
|
33
|
-
Max:
|
76
|
+
Max: 145
|
77
|
+
|
78
|
+
# Offense count: 2
|
79
|
+
# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers.
|
80
|
+
# SupportedStyles: snake_case, normalcase, non_integer
|
81
|
+
# AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339
|
82
|
+
Naming/VariableNumber:
|
83
|
+
Exclude:
|
84
|
+
- 'lib/email/provider.rb'
|
85
|
+
- 'spec/unit/email/provider_spec.rb'
|
34
86
|
|
35
|
-
# Offense count:
|
87
|
+
# Offense count: 209
|
36
88
|
# Configuration parameters: AllowSubject.
|
37
89
|
RSpec/MultipleMemoizedHelpers:
|
38
90
|
Max: 16
|
39
91
|
|
40
|
-
# Offense count:
|
92
|
+
# Offense count: 49
|
41
93
|
RSpec/NestedGroups:
|
42
94
|
Max: 6
|
95
|
+
|
96
|
+
# Offense count: 8
|
97
|
+
# Cop supports --auto-correct.
|
98
|
+
# Configuration parameters: EnforcedStyle.
|
99
|
+
# SupportedStyles: nested, compact
|
100
|
+
Style/ClassAndModuleChildren:
|
101
|
+
Exclude:
|
102
|
+
- 'lib/email/mboxrd/message.rb'
|
103
|
+
- 'lib/imap/backup/downloader.rb'
|
104
|
+
- 'lib/imap/backup/serializer.rb'
|
105
|
+
- 'lib/imap/backup/serializer/mbox.rb'
|
106
|
+
- 'lib/imap/backup/serializer/mbox_enumerator.rb'
|
107
|
+
- 'lib/imap/backup/serializer/mbox_store.rb'
|
108
|
+
- 'lib/imap/backup/uploader.rb'
|
109
|
+
- 'lib/imap/backup/utils.rb'
|
110
|
+
|
111
|
+
# Offense count: 1
|
112
|
+
# Cop supports --auto-correct.
|
113
|
+
Style/RedundantBegin:
|
114
|
+
Exclude:
|
115
|
+
- 'lib/imap/backup/account/connection.rb'
|
116
|
+
|
117
|
+
# Offense count: 1
|
118
|
+
# Cop supports --auto-correct.
|
119
|
+
# Configuration parameters: MinSize, WordRegex.
|
120
|
+
# SupportedStyles: percent, brackets
|
121
|
+
Style/WordArray:
|
122
|
+
EnforcedStyle: percent
|
123
|
+
|
124
|
+
# Offense count: 1
|
125
|
+
# Cop supports --auto-correct.
|
126
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
127
|
+
# URISchemes: http, https
|
128
|
+
Layout/LineLength:
|
129
|
+
Max: 133
|
data/README.md
CHANGED
@@ -16,11 +16,19 @@
|
|
16
16
|
[Rubygem]: http://rubygems.org/gems/imap-backup "Ruby gem at rubygems.org"
|
17
17
|
[Continuous Integration]: https://circleci.com/gh/joeyates/imap-backup "Build status by CirceCI"
|
18
18
|
|
19
|
-
|
19
|
+
# GMail
|
20
20
|
|
21
|
-
GMail
|
21
|
+
To use imap-backup with GMail, you will need to enable 'App passwords' on your account.
|
22
22
|
|
23
|
-
|
23
|
+
## GMail OAuth2
|
24
|
+
|
25
|
+
GMail OAuth2 authentication is supported, but as GMail's policy requires
|
26
|
+
users to set up an application specific to their account, the feature
|
27
|
+
is disabled by default.
|
28
|
+
|
29
|
+
You will need to set the environment variable IMAP_BACKUP_ENABLE_GMAIL_OAUTH2.
|
30
|
+
|
31
|
+
To set it up, [follow the HOWTO](docs/setting-up-gmail-with-oauth2.md).
|
24
32
|
|
25
33
|
# Installation
|
26
34
|
|
File without changes
|
@@ -96,7 +96,7 @@ module Imap::Backup
|
|
96
96
|
"Creating IMAP instance: #{server}, options: #{options.inspect}"
|
97
97
|
)
|
98
98
|
imap = Net::IMAP.new(server, options)
|
99
|
-
if
|
99
|
+
if use_gmail_oauth2? && Gmail::Authenticator.refresh_token?(password)
|
100
100
|
authenticator = Gmail::Authenticator.new(email: username, token: password)
|
101
101
|
credentials = authenticator.credentials
|
102
102
|
raise InvalidGmailOauth2RefreshToken if !credentials
|
@@ -168,8 +168,10 @@ module Imap::Backup
|
|
168
168
|
password.gsub(/./, "x")
|
169
169
|
end
|
170
170
|
|
171
|
-
def
|
172
|
-
|
171
|
+
def use_gmail_oauth2?
|
172
|
+
# TODO: test use of ENV
|
173
|
+
server == Email::Provider::GMAIL_IMAP_SERVER &&
|
174
|
+
ENV["IMAP_BACKUP_ENABLE_GMAIL_OAUTH2"]
|
173
175
|
end
|
174
176
|
|
175
177
|
def local_folders
|
@@ -69,7 +69,7 @@ module Imap::Backup
|
|
69
69
|
def modify_password(menu)
|
70
70
|
menu.choice("modify password") do
|
71
71
|
password =
|
72
|
-
if account
|
72
|
+
if use_gmail_oauth2?(account)
|
73
73
|
Configuration::GmailOauth2.new(account).run
|
74
74
|
else
|
75
75
|
Configuration::Asker.password
|
@@ -82,6 +82,11 @@ module Imap::Backup
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
def use_gmail_oauth2?(account)
|
86
|
+
account[:server] == Email::Provider::GMAIL_IMAP_SERVER &&
|
87
|
+
ENV["IMAP_BACKUP_ENABLE_GMAIL_OAUTH2"]
|
88
|
+
end
|
89
|
+
|
85
90
|
def modify_server(menu)
|
86
91
|
menu.choice("modify server") do
|
87
92
|
server = highline.ask("server: ")
|
@@ -8,7 +8,7 @@ module Imap::Backup
|
|
8
8
|
You need to authorize imap_backup to get access to your email.
|
9
9
|
To do so, please follow the instructions here:
|
10
10
|
|
11
|
-
https://github.com/joeyates/imap-backup/blob/main/docs/setting-up-gmail.md
|
11
|
+
https://github.com/joeyates/imap-backup/blob/main/docs/setting-up-gmail-with-oauth2.md
|
12
12
|
|
13
13
|
BANNER
|
14
14
|
|
data/lib/imap/backup/version.rb
CHANGED
@@ -111,7 +111,15 @@ describe Imap::Backup::Account::Connection do
|
|
111
111
|
with(email: USERNAME, token: PASSWORD) { authenticator }
|
112
112
|
end
|
113
113
|
|
114
|
-
context "when the password is our copy of a GMail refresh token" do
|
114
|
+
context "when the password is our copy of a GMail refresh token and the environment IMAP_BACKUP_ENABLE_GMAIL_OAUTH2 is set" do
|
115
|
+
before do
|
116
|
+
ENV["IMAP_BACKUP_ENABLE_GMAIL_OAUTH2"] = "1"
|
117
|
+
end
|
118
|
+
|
119
|
+
after do
|
120
|
+
ENV.delete("IMAP_BACKUP_ENABLE_GMAIL_OAUTH2")
|
121
|
+
end
|
122
|
+
|
115
123
|
it "uses the OAuth2 access_token to authenticate" do
|
116
124
|
subject.imap
|
117
125
|
|
@@ -214,16 +214,10 @@ describe Imap::Backup::Configuration::Account do
|
|
214
214
|
|
215
215
|
describe "choosing 'modify password'" do
|
216
216
|
let(:new_password) { "new_password" }
|
217
|
-
let(:gmail_oauth2) do
|
218
|
-
instance_double(Imap::Backup::Configuration::GmailOauth2, run: nil)
|
219
|
-
end
|
220
217
|
|
221
218
|
before do
|
222
219
|
allow(Imap::Backup::Configuration::Asker).
|
223
220
|
to receive(:password) { new_password }
|
224
|
-
allow(Imap::Backup::Configuration::GmailOauth2).
|
225
|
-
to receive(:new).
|
226
|
-
with(account) { gmail_oauth2 }
|
227
221
|
subject.run
|
228
222
|
menu.choices["modify password"].call
|
229
223
|
end
|
@@ -245,14 +239,49 @@ describe Imap::Backup::Configuration::Account do
|
|
245
239
|
|
246
240
|
include_examples "it doesn't flag the account as modified"
|
247
241
|
end
|
242
|
+
end
|
248
243
|
|
249
|
-
|
250
|
-
|
244
|
+
describe "choosing 'modify password' when the server is for GMail" do
|
245
|
+
let(:new_password) { "new_password" }
|
246
|
+
let(:current_server) { GMAIL_IMAP_SERVER }
|
247
|
+
let(:gmail_oauth2) do
|
248
|
+
instance_double(Imap::Backup::Configuration::GmailOauth2, run: nil)
|
249
|
+
end
|
250
|
+
|
251
|
+
before do
|
252
|
+
allow(Imap::Backup::Configuration::Asker).
|
253
|
+
to receive(:password) { new_password }
|
254
|
+
allow(Imap::Backup::Configuration::GmailOauth2).
|
255
|
+
to receive(:new).
|
256
|
+
with(account) { gmail_oauth2 }
|
257
|
+
end
|
258
|
+
|
259
|
+
context "when the environment IMAP_BACKUP_ENABLE_GMAIL_OAUTH2 is set" do
|
260
|
+
before do
|
261
|
+
ENV["IMAP_BACKUP_ENABLE_GMAIL_OAUTH2"] = "1"
|
262
|
+
subject.run
|
263
|
+
menu.choices["modify password"].call
|
264
|
+
end
|
265
|
+
|
266
|
+
after do
|
267
|
+
ENV.delete("IMAP_BACKUP_ENABLE_GMAIL_OAUTH2")
|
268
|
+
end
|
251
269
|
|
252
270
|
it "sets up GMail OAuth2" do
|
253
271
|
expect(gmail_oauth2).to have_received(:run)
|
254
272
|
end
|
255
273
|
end
|
274
|
+
|
275
|
+
context "when the environment IMAP_BACKUP_ENABLE_GMAIL_OAUTH2 is not set" do
|
276
|
+
before do
|
277
|
+
subject.run
|
278
|
+
menu.choices["modify password"].call
|
279
|
+
end
|
280
|
+
|
281
|
+
it "sets up GMail OAuth2" do
|
282
|
+
expect(gmail_oauth2).to_not have_received(:run)
|
283
|
+
end
|
284
|
+
end
|
256
285
|
end
|
257
286
|
|
258
287
|
describe "choosing 'modify server'" do
|
@@ -43,7 +43,7 @@ describe Imap::Backup::Configuration::Setup do
|
|
43
43
|
describe "main menu" do
|
44
44
|
before { subject.run }
|
45
45
|
|
46
|
-
|
46
|
+
["add account", "save and exit", "exit without saving"].each do |choice|
|
47
47
|
it "includes #{choice}" do
|
48
48
|
expect(output.string).to include(choice)
|
49
49
|
end
|
@@ -12,7 +12,6 @@ describe Imap::Backup::Utils do
|
|
12
12
|
describe ".check_permissions" do
|
13
13
|
let(:requested) { 0o345 }
|
14
14
|
|
15
|
-
# rubocop:disable RSpec/EmptyExampleGroup
|
16
15
|
context "with existing files" do
|
17
16
|
[
|
18
17
|
[0o100, "less than the limit", true],
|
@@ -37,7 +36,6 @@ describe Imap::Backup::Utils do
|
|
37
36
|
end
|
38
37
|
end
|
39
38
|
end
|
40
|
-
# rubocop:enable RSpec/EmptyExampleGroup
|
41
39
|
|
42
40
|
context "with non-existent files" do
|
43
41
|
let(:exists) { false }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imap-backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Yates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gmail_xoauth
|
@@ -210,7 +210,7 @@ files:
|
|
210
210
|
- docs/26-type-code-into-imap-backup.png
|
211
211
|
- docs/27-success.png
|
212
212
|
- docs/docker-imap.md
|
213
|
-
- docs/setting-up-gmail.md
|
213
|
+
- docs/setting-up-gmail-with-oauth2.md
|
214
214
|
- imap-backup.gemspec
|
215
215
|
- lib/email/mboxrd/message.rb
|
216
216
|
- lib/email/provider.rb
|
@@ -290,7 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
290
290
|
- !ruby/object:Gem::Version
|
291
291
|
version: '0'
|
292
292
|
requirements: []
|
293
|
-
rubygems_version: 3.
|
293
|
+
rubygems_version: 3.1.4
|
294
294
|
signing_key:
|
295
295
|
specification_version: 4
|
296
296
|
summary: Backup GMail (or other IMAP) accounts to disk
|