imap-backup 4.0.0.rc1 → 4.0.0.rc5
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/CHANGELOG.md +8 -0
- data/README.md +22 -8
- data/imap-backup.gemspec +0 -2
- data/lib/imap/backup/account/connection.rb +2 -21
- data/lib/imap/backup/cli/local.rb +9 -5
- data/lib/imap/backup/cli.rb +77 -73
- data/lib/imap/backup/configuration/account.rb +1 -11
- data/lib/imap/backup/version.rb +1 -1
- data/lib/imap/backup.rb +0 -1
- data/spec/unit/imap/backup/account/connection_spec.rb +0 -45
- data/spec/unit/imap/backup/configuration/account_spec.rb +0 -43
- metadata +2 -65
- data/docs/01-credentials-screen.png +0 -0
- data/docs/02-new-project.png +0 -0
- data/docs/03-initial-credentials-for-project.png +0 -0
- data/docs/04-credential-type-selection.png +0 -0
- data/docs/05-cant-create-without-consent-setup.png +0 -0
- data/docs/06-user-type-selection.png +0 -0
- data/docs/07-consent-screen-form.png +0 -0
- data/docs/08-app-scopes.png +0 -0
- data/docs/09-scope-selection.png +0 -0
- data/docs/10-updated-app-scopes.png +0 -0
- data/docs/11-test-users.png +0 -0
- data/docs/12-add-users.png +0 -0
- data/docs/13-create-oauth-client.png +0 -0
- data/docs/14-application-details.png +0 -0
- data/docs/16-initial-menu.png +0 -0
- data/docs/17-inputting-the-email-address.png +0 -0
- data/docs/18-choose-password.png +0 -0
- data/docs/19-supply-client-info.png +0 -0
- data/docs/20-choose-gmail-account.png +0 -0
- data/docs/21-accept-warnings.png +0 -0
- data/docs/22-grant-access.png +0 -0
- data/docs/24-confirm-choices.png +0 -0
- data/docs/25-success-code.png +0 -0
- data/docs/26-type-code-into-imap-backup.png +0 -0
- data/docs/27-success.png +0 -0
- data/docs/setting-up-gmail-with-oauth2.md +0 -166
- data/lib/gmail/authenticator.rb +0 -160
- data/lib/google/auth/stores/in_memory_token_store.rb +0 -9
- data/lib/imap/backup/configuration/gmail_oauth2.rb +0 -102
- data/spec/unit/gmail/authenticator_spec.rb +0 -138
- data/spec/unit/google/auth/stores/in_memory_token_store_spec.rb +0 -15
- data/spec/unit/imap/backup/configuration/gmail_oauth2_spec.rb +0 -121
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6b754ca94002e528fff72fa9bfbe6316281d3325796843d312303c4956cd03f
|
4
|
+
data.tar.gz: dc7230bd742a4db2dfe24a358c6bac1508433578c1eb108130bbd5d89e41b60c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b8cbc016eb22fe70240bad350ad2d9e009800af15db493f798aa33367e7b67ae0725ce6f8d97666c0f0ad46101fe793f2447d241199ffdc983a17d60c47a852
|
7
|
+
data.tar.gz: 0f3c5a5a4e8e257dca263c25ac004e7d697908dfaccc9a82e354b5dfa8164f61e8671feb20afc8a4afd55bc3e79337bf723c715f61ce758d3a6e7ba1f8448677
|
data/CHANGELOG.md
CHANGED
@@ -4,8 +4,16 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
6
6
|
|
7
|
+
## [4.0.0.rc2] - 2021-11-18
|
8
|
+
|
9
|
+
### Removed
|
10
|
+
|
11
|
+
* GMail OAuth2 support. Tokens only last a few days, so this authentication
|
12
|
+
method is not usable for automated backups.
|
13
|
+
|
7
14
|
## [4.0.0.rc1] - 2021-11-17
|
8
15
|
|
9
16
|
### Added
|
17
|
+
|
10
18
|
* `local` commands to list accounts, folders and emails and to view single
|
11
19
|
emails.
|
data/README.md
CHANGED
@@ -20,20 +20,24 @@
|
|
20
20
|
|
21
21
|
To use imap-backup with GMail, you will need to enable 'App passwords' on your account.
|
22
22
|
|
23
|
-
|
23
|
+
# Installation
|
24
|
+
|
25
|
+
```shell
|
26
|
+
$ gem install 'imap-backup'
|
27
|
+
```
|
24
28
|
|
25
|
-
|
26
|
-
users to set up an application specific to their account, the feature
|
27
|
-
is disabled by default.
|
29
|
+
# Commands
|
28
30
|
|
29
|
-
|
31
|
+
For a full list, run
|
30
32
|
|
31
|
-
|
33
|
+
```
|
34
|
+
$ imap-backup help
|
35
|
+
```
|
32
36
|
|
33
|
-
|
37
|
+
For more information about a command, run
|
34
38
|
|
35
39
|
```shell
|
36
|
-
$
|
40
|
+
$ imap-backup help COMMAND
|
37
41
|
```
|
38
42
|
|
39
43
|
# Setup
|
@@ -148,6 +152,16 @@ Each folder is saved to an mbox file.
|
|
148
152
|
Alongside each mbox is a file with extension '.imap', which lists the source IMAP
|
149
153
|
UIDs to allow a full restore.
|
150
154
|
|
155
|
+
# Local commands
|
156
|
+
|
157
|
+
There a various commands for viewing local backup status.
|
158
|
+
|
159
|
+
To view the list, use
|
160
|
+
|
161
|
+
```shell
|
162
|
+
$ imap_backup help local
|
163
|
+
```
|
164
|
+
|
151
165
|
# Troubleshooting
|
152
166
|
|
153
167
|
If you have problems:
|
data/imap-backup.gemspec
CHANGED
@@ -16,8 +16,6 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.required_ruby_version = ">= 2.5"
|
17
17
|
gem.version = Imap::Backup::VERSION
|
18
18
|
|
19
|
-
gem.add_runtime_dependency "gmail_xoauth"
|
20
|
-
gem.add_runtime_dependency "googleauth"
|
21
19
|
gem.add_runtime_dependency "highline"
|
22
20
|
gem.add_runtime_dependency "mail"
|
23
21
|
gem.add_runtime_dependency "rake"
|
@@ -1,15 +1,11 @@
|
|
1
1
|
require "net/imap"
|
2
|
-
require "gmail_xoauth"
|
3
2
|
|
4
|
-
require "gmail/authenticator"
|
5
3
|
require "retry_on_error"
|
6
4
|
|
7
5
|
module Imap::Backup
|
8
6
|
module Account; end
|
9
7
|
|
10
8
|
class Account::Connection
|
11
|
-
class InvalidGmailOauth2RefreshToken < StandardError; end
|
12
|
-
|
13
9
|
include RetryOnError
|
14
10
|
|
15
11
|
LOGIN_RETRY_CLASSES = [EOFError, Errno::ECONNRESET, SocketError].freeze
|
@@ -109,17 +105,8 @@ module Imap::Backup
|
|
109
105
|
"Creating IMAP instance: #{server}, options: #{options.inspect}"
|
110
106
|
)
|
111
107
|
imap = Net::IMAP.new(server, options)
|
112
|
-
|
113
|
-
|
114
|
-
credentials = authenticator.credentials
|
115
|
-
raise InvalidGmailOauth2RefreshToken if !credentials
|
116
|
-
|
117
|
-
Imap::Backup.logger.debug "Logging in with OAuth2 token: #{username}"
|
118
|
-
imap.authenticate("XOAUTH2", username, credentials.access_token)
|
119
|
-
else
|
120
|
-
Imap::Backup.logger.debug "Logging in: #{username}/#{masked_password}"
|
121
|
-
imap.login(username, password)
|
122
|
-
end
|
108
|
+
Imap::Backup.logger.debug "Logging in: #{username}/#{masked_password}"
|
109
|
+
imap.login(username, password)
|
123
110
|
Imap::Backup.logger.debug "Login complete"
|
124
111
|
imap
|
125
112
|
end
|
@@ -181,12 +168,6 @@ module Imap::Backup
|
|
181
168
|
password.gsub(/./, "x")
|
182
169
|
end
|
183
170
|
|
184
|
-
def use_gmail_oauth2?
|
185
|
-
# TODO: test use of ENV
|
186
|
-
server == Email::Provider::GMAIL_IMAP_SERVER &&
|
187
|
-
ENV["IMAP_BACKUP_ENABLE_GMAIL_OAUTH2"]
|
188
|
-
end
|
189
|
-
|
190
171
|
def backup_folders
|
191
172
|
@backup_folders ||=
|
192
173
|
begin
|
@@ -3,13 +3,13 @@ module Imap::Backup
|
|
3
3
|
include Thor::Actions
|
4
4
|
include CLI::Helpers
|
5
5
|
|
6
|
-
desc "accounts", "
|
6
|
+
desc "accounts", "List locally backed-up accounts"
|
7
7
|
def accounts
|
8
8
|
connections = Imap::Backup::Configuration::List.new
|
9
9
|
connections.accounts.each { |a| puts a[:username] }
|
10
10
|
end
|
11
11
|
|
12
|
-
desc "folders EMAIL", "
|
12
|
+
desc "folders EMAIL", "List account folders"
|
13
13
|
def folders(email)
|
14
14
|
connections = Imap::Backup::Configuration::List.new
|
15
15
|
account = connections.accounts.find { |a| a[:username] == email }
|
@@ -21,7 +21,7 @@ module Imap::Backup
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
desc "emails EMAIL FOLDER", "
|
24
|
+
desc "emails EMAIL FOLDER", "List emails in a folder"
|
25
25
|
def emails(email, folder_name)
|
26
26
|
connections = Imap::Backup::Configuration::List.new
|
27
27
|
account = connections.accounts.find { |a| a[:username] == email }
|
@@ -40,7 +40,11 @@ module Imap::Backup
|
|
40
40
|
uids = folder_serializer.uids
|
41
41
|
|
42
42
|
folder_serializer.each_message(uids).map do |uid, message|
|
43
|
-
m = {
|
43
|
+
m = {
|
44
|
+
uid: uid,
|
45
|
+
date: message.parsed.date.to_s,
|
46
|
+
subject: message.parsed.subject || ""
|
47
|
+
}
|
44
48
|
if m[:subject].length > max_subject
|
45
49
|
puts format("% 10<uid>u: %.#{max_subject - 3}<subject>s... - %<date>s", m)
|
46
50
|
else
|
@@ -49,7 +53,7 @@ module Imap::Backup
|
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
52
|
-
desc "email EMAIL FOLDER UID", "
|
56
|
+
desc "email EMAIL FOLDER UID", "Show an email"
|
53
57
|
def email(email, folder_name, uid)
|
54
58
|
connections = Imap::Backup::Configuration::List.new
|
55
59
|
account = connections.accounts.find { |a| a[:username] == email }
|
data/lib/imap/backup/cli.rb
CHANGED
@@ -1,87 +1,91 @@
|
|
1
1
|
require "thor"
|
2
2
|
|
3
|
-
|
4
|
-
require "imap/backup/cli/helpers"
|
3
|
+
module Imap; end
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
autoload :Remote, "imap/backup/cli/remote"
|
10
|
-
autoload :Restore, "imap/backup/cli/restore"
|
11
|
-
autoload :Setup, "imap/backup/cli/setup"
|
12
|
-
autoload :Status, "imap/backup/cli/status"
|
5
|
+
module Imap::Backup
|
6
|
+
class CLI < Thor
|
7
|
+
require "imap/backup/cli/helpers"
|
13
8
|
|
14
|
-
|
9
|
+
autoload :Backup, "imap/backup/cli/backup"
|
10
|
+
autoload :Folders, "imap/backup/cli/folders"
|
11
|
+
autoload :Local, "imap/backup/cli/local"
|
12
|
+
autoload :Remote, "imap/backup/cli/remote"
|
13
|
+
autoload :Restore, "imap/backup/cli/restore"
|
14
|
+
autoload :Setup, "imap/backup/cli/setup"
|
15
|
+
autoload :Status, "imap/backup/cli/status"
|
15
16
|
|
16
|
-
|
17
|
+
include Helpers
|
17
18
|
|
18
|
-
|
19
|
-
true
|
20
|
-
end
|
19
|
+
default_task :backup
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
type: :string,
|
26
|
-
banner: "a comma-separated list of accounts (defaults to all configured accounts)",
|
27
|
-
aliases: ["-a"]
|
28
|
-
)
|
29
|
-
end
|
21
|
+
def self.exit_on_failure?
|
22
|
+
true
|
23
|
+
end
|
30
24
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
accounts_option
|
40
|
-
def backup
|
41
|
-
Backup.new(symbolized(options)).run
|
42
|
-
end
|
25
|
+
def self.accounts_option
|
26
|
+
method_option(
|
27
|
+
"accounts",
|
28
|
+
type: :string,
|
29
|
+
banner: "a comma-separated list of accounts (defaults to all configured accounts)",
|
30
|
+
aliases: ["-a"]
|
31
|
+
)
|
32
|
+
end
|
43
33
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
34
|
+
desc "backup [OPTIONS]", "Run the backup"
|
35
|
+
long_desc <<~DESC
|
36
|
+
Downloads any emails not yet present locally.
|
37
|
+
Runs the backup for each configured account,
|
38
|
+
or for those requested via the --accounts option.
|
39
|
+
By default all folders, are backed up.
|
40
|
+
The setup tool can be used to choose a specific list of folders to back up.
|
41
|
+
DESC
|
42
|
+
accounts_option
|
43
|
+
def backup
|
44
|
+
Backup.new(symbolized(options)).run
|
45
|
+
end
|
55
46
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
47
|
+
desc "folders [OPTIONS]", "This command is deprecated, use `imap-backup remote folders ACCOUNT`"
|
48
|
+
long_desc <<~DESC
|
49
|
+
Lists all folders of all configured accounts.
|
50
|
+
This command is deprecated.
|
51
|
+
Instead, use a combination of `imap-backup local accounts` to get the list of accounts,
|
52
|
+
and `imap-backup remote folders ACCOUNT` to get the folder list.
|
53
|
+
DESC
|
54
|
+
accounts_option
|
55
|
+
def folders
|
56
|
+
Folders.new(symbolized(options)).run
|
57
|
+
end
|
66
58
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
59
|
+
desc "restore [OPTIONS]", "This command is deprecated, use `imap-backup restore ACCOUNT`"
|
60
|
+
long_desc <<~DESC
|
61
|
+
By default, restores all local emails to their respective servers.
|
62
|
+
This command is deprecated.
|
63
|
+
Instead, use `imap-backup restore ACCOUNT` to restore a single account.
|
64
|
+
DESC
|
65
|
+
accounts_option
|
66
|
+
def restore
|
67
|
+
Restore.new(symbolized(options)).run
|
68
|
+
end
|
75
69
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
70
|
+
desc "setup", "Configure imap-backup"
|
71
|
+
long_desc <<~DESC
|
72
|
+
A menu-driven command-line application used to configure imap-backup.
|
73
|
+
Configure email accounts to back up.
|
74
|
+
DESC
|
75
|
+
def setup
|
76
|
+
Setup.new().run
|
77
|
+
end
|
84
78
|
|
85
|
-
|
86
|
-
|
79
|
+
desc "status", "Show backup status"
|
80
|
+
long_desc <<~DESC
|
81
|
+
For each configured account and folder, lists the number of emails yet to be downloaded.
|
82
|
+
DESC
|
83
|
+
accounts_option
|
84
|
+
def status
|
85
|
+
Status.new(symbolized(options)).run
|
86
|
+
end
|
87
|
+
|
88
|
+
desc "local SUBCOMMAND [OPTIONS]", "View local info"
|
89
|
+
subcommand "local", Local
|
90
|
+
end
|
87
91
|
end
|
@@ -68,12 +68,7 @@ module Imap::Backup
|
|
68
68
|
|
69
69
|
def modify_password(menu)
|
70
70
|
menu.choice("modify password") do
|
71
|
-
password =
|
72
|
-
if use_gmail_oauth2?(account)
|
73
|
-
Configuration::GmailOauth2.new(account).run
|
74
|
-
else
|
75
|
-
Configuration::Asker.password
|
76
|
-
end
|
71
|
+
password = Configuration::Asker.password
|
77
72
|
|
78
73
|
if !password.nil?
|
79
74
|
account[:password] = password
|
@@ -82,11 +77,6 @@ module Imap::Backup
|
|
82
77
|
end
|
83
78
|
end
|
84
79
|
|
85
|
-
def use_gmail_oauth2?(account)
|
86
|
-
account[:server] == Email::Provider::GMAIL_IMAP_SERVER &&
|
87
|
-
ENV["IMAP_BACKUP_ENABLE_GMAIL_OAUTH2"]
|
88
|
-
end
|
89
|
-
|
90
80
|
def modify_server(menu)
|
91
81
|
menu.choice("modify server") do
|
92
82
|
server = highline.ask("server: ")
|
data/lib/imap/backup/version.rb
CHANGED
data/lib/imap/backup.rb
CHANGED
@@ -7,7 +7,6 @@ require "imap/backup/configuration/account"
|
|
7
7
|
require "imap/backup/configuration/asker"
|
8
8
|
require "imap/backup/configuration/connection_tester"
|
9
9
|
require "imap/backup/configuration/folder_chooser"
|
10
|
-
require "imap/backup/configuration/gmail_oauth2"
|
11
10
|
require "imap/backup/configuration/list"
|
12
11
|
require "imap/backup/configuration/setup"
|
13
12
|
require "imap/backup/configuration/store"
|
@@ -90,56 +90,11 @@ describe Imap::Backup::Account::Connection do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
context "with the GMail IMAP server" do
|
93
|
-
ACCESS_TOKEN = "access_token".freeze
|
94
|
-
|
95
93
|
let(:server) { GMAIL_IMAP_SERVER }
|
96
94
|
let(:refresh_token) { true }
|
97
95
|
let(:result) { nil }
|
98
|
-
let(:authenticator) do
|
99
|
-
instance_double(
|
100
|
-
Gmail::Authenticator,
|
101
|
-
credentials: credentials
|
102
|
-
)
|
103
|
-
end
|
104
|
-
let(:credentials) { OpenStruct.new(access_token: ACCESS_TOKEN) }
|
105
|
-
|
106
|
-
before do
|
107
|
-
allow(Gmail::Authenticator).
|
108
|
-
to receive(:refresh_token?) { refresh_token }
|
109
|
-
allow(Gmail::Authenticator).
|
110
|
-
to receive(:new).
|
111
|
-
with(email: USERNAME, token: PASSWORD) { authenticator }
|
112
|
-
end
|
113
|
-
|
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
|
-
|
123
|
-
it "uses the OAuth2 access_token to authenticate" do
|
124
|
-
subject.imap
|
125
|
-
|
126
|
-
expect(imap).to have_received(:authenticate).with(
|
127
|
-
"XOAUTH2", USERNAME, ACCESS_TOKEN
|
128
|
-
)
|
129
|
-
end
|
130
|
-
|
131
|
-
context "when the refresh token is invalid" do
|
132
|
-
let(:credentials) { nil }
|
133
|
-
|
134
|
-
it "raises" do
|
135
|
-
expect { subject.imap }.to raise_error(String)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
96
|
|
140
97
|
context "when the password is not our copy of a GMail refresh token" do
|
141
|
-
let(:refresh_token) { false }
|
142
|
-
|
143
98
|
it "uses the password" do
|
144
99
|
subject.imap
|
145
100
|
|
@@ -241,49 +241,6 @@ describe Imap::Backup::Configuration::Account do
|
|
241
241
|
end
|
242
242
|
end
|
243
243
|
|
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
|
269
|
-
|
270
|
-
it "sets up GMail OAuth2" do
|
271
|
-
expect(gmail_oauth2).to have_received(:run)
|
272
|
-
end
|
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
|
285
|
-
end
|
286
|
-
|
287
244
|
describe "choosing 'modify server'" do
|
288
245
|
let(:server) { "server" }
|
289
246
|
|
metadata
CHANGED
@@ -1,43 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imap-backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.rc5
|
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-
|
11
|
+
date: 2021-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: gmail_xoauth
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: googleauth
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: highline
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,39 +171,11 @@ files:
|
|
199
171
|
- Rakefile
|
200
172
|
- bin/imap-backup
|
201
173
|
- docker-compose.yml
|
202
|
-
- docs/01-credentials-screen.png
|
203
|
-
- docs/02-new-project.png
|
204
|
-
- docs/03-initial-credentials-for-project.png
|
205
|
-
- docs/04-credential-type-selection.png
|
206
|
-
- docs/05-cant-create-without-consent-setup.png
|
207
|
-
- docs/06-user-type-selection.png
|
208
|
-
- docs/07-consent-screen-form.png
|
209
|
-
- docs/08-app-scopes.png
|
210
|
-
- docs/09-scope-selection.png
|
211
|
-
- docs/10-updated-app-scopes.png
|
212
|
-
- docs/11-test-users.png
|
213
|
-
- docs/12-add-users.png
|
214
|
-
- docs/13-create-oauth-client.png
|
215
|
-
- docs/14-application-details.png
|
216
|
-
- docs/16-initial-menu.png
|
217
|
-
- docs/17-inputting-the-email-address.png
|
218
|
-
- docs/18-choose-password.png
|
219
|
-
- docs/19-supply-client-info.png
|
220
|
-
- docs/20-choose-gmail-account.png
|
221
|
-
- docs/21-accept-warnings.png
|
222
|
-
- docs/22-grant-access.png
|
223
|
-
- docs/24-confirm-choices.png
|
224
|
-
- docs/25-success-code.png
|
225
|
-
- docs/26-type-code-into-imap-backup.png
|
226
|
-
- docs/27-success.png
|
227
174
|
- docs/docker-imap.md
|
228
|
-
- docs/setting-up-gmail-with-oauth2.md
|
229
175
|
- imap-backup
|
230
176
|
- imap-backup.gemspec
|
231
177
|
- lib/email/mboxrd/message.rb
|
232
178
|
- lib/email/provider.rb
|
233
|
-
- lib/gmail/authenticator.rb
|
234
|
-
- lib/google/auth/stores/in_memory_token_store.rb
|
235
179
|
- lib/imap/backup.rb
|
236
180
|
- lib/imap/backup/account/connection.rb
|
237
181
|
- lib/imap/backup/account/folder.rb
|
@@ -247,7 +191,6 @@ files:
|
|
247
191
|
- lib/imap/backup/configuration/asker.rb
|
248
192
|
- lib/imap/backup/configuration/connection_tester.rb
|
249
193
|
- lib/imap/backup/configuration/folder_chooser.rb
|
250
|
-
- lib/imap/backup/configuration/gmail_oauth2.rb
|
251
194
|
- lib/imap/backup/configuration/list.rb
|
252
195
|
- lib/imap/backup/configuration/setup.rb
|
253
196
|
- lib/imap/backup/configuration/store.rb
|
@@ -276,15 +219,12 @@ files:
|
|
276
219
|
- spec/support/silence_logging.rb
|
277
220
|
- spec/unit/email/mboxrd/message_spec.rb
|
278
221
|
- spec/unit/email/provider_spec.rb
|
279
|
-
- spec/unit/gmail/authenticator_spec.rb
|
280
|
-
- spec/unit/google/auth/stores/in_memory_token_store_spec.rb
|
281
222
|
- spec/unit/imap/backup/account/connection_spec.rb
|
282
223
|
- spec/unit/imap/backup/account/folder_spec.rb
|
283
224
|
- spec/unit/imap/backup/configuration/account_spec.rb
|
284
225
|
- spec/unit/imap/backup/configuration/asker_spec.rb
|
285
226
|
- spec/unit/imap/backup/configuration/connection_tester_spec.rb
|
286
227
|
- spec/unit/imap/backup/configuration/folder_chooser_spec.rb
|
287
|
-
- spec/unit/imap/backup/configuration/gmail_oauth2_spec.rb
|
288
228
|
- spec/unit/imap/backup/configuration/list_spec.rb
|
289
229
|
- spec/unit/imap/backup/configuration/setup_spec.rb
|
290
230
|
- spec/unit/imap/backup/configuration/store_spec.rb
|
@@ -335,15 +275,12 @@ test_files:
|
|
335
275
|
- spec/support/silence_logging.rb
|
336
276
|
- spec/unit/email/mboxrd/message_spec.rb
|
337
277
|
- spec/unit/email/provider_spec.rb
|
338
|
-
- spec/unit/gmail/authenticator_spec.rb
|
339
|
-
- spec/unit/google/auth/stores/in_memory_token_store_spec.rb
|
340
278
|
- spec/unit/imap/backup/account/connection_spec.rb
|
341
279
|
- spec/unit/imap/backup/account/folder_spec.rb
|
342
280
|
- spec/unit/imap/backup/configuration/account_spec.rb
|
343
281
|
- spec/unit/imap/backup/configuration/asker_spec.rb
|
344
282
|
- spec/unit/imap/backup/configuration/connection_tester_spec.rb
|
345
283
|
- spec/unit/imap/backup/configuration/folder_chooser_spec.rb
|
346
|
-
- spec/unit/imap/backup/configuration/gmail_oauth2_spec.rb
|
347
284
|
- spec/unit/imap/backup/configuration/list_spec.rb
|
348
285
|
- spec/unit/imap/backup/configuration/setup_spec.rb
|
349
286
|
- spec/unit/imap/backup/configuration/store_spec.rb
|
Binary file
|
data/docs/02-new-project.png
DELETED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/docs/08-app-scopes.png
DELETED
Binary file
|
data/docs/09-scope-selection.png
DELETED
Binary file
|
Binary file
|
data/docs/11-test-users.png
DELETED
Binary file
|
data/docs/12-add-users.png
DELETED
Binary file
|
Binary file
|
Binary file
|
data/docs/16-initial-menu.png
DELETED
Binary file
|