imap-backup 4.0.0 → 4.0.4
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/README.md +17 -49
- data/docs/development.md +53 -0
- data/docs/restore.md +17 -0
- data/imap-backup.gemspec +4 -7
- data/lib/email/mboxrd/message.rb +6 -2
- data/lib/email/provider/apple_mail.rb +7 -0
- data/lib/email/provider/default.rb +12 -0
- data/lib/email/provider/fastmail.rb +7 -0
- data/lib/email/provider/gmail.rb +7 -0
- data/lib/email/provider.rb +16 -26
- data/lib/imap/backup/account/connection.rb +19 -29
- data/lib/imap/backup/account/folder.rb +9 -10
- data/lib/imap/backup/cli/helpers.rb +14 -1
- data/lib/imap/backup/cli/local.rb +22 -28
- data/lib/imap/backup/cli/setup.rb +1 -1
- data/lib/imap/backup/cli/utils.rb +98 -0
- data/lib/imap/backup/cli.rb +5 -1
- data/lib/imap/backup/client/apple_mail.rb +11 -0
- data/lib/imap/backup/client/default.rb +51 -0
- data/lib/imap/backup/configuration/account.rb +3 -1
- data/lib/imap/backup/configuration/connection_tester.rb +1 -1
- data/lib/imap/backup/configuration/store.rb +10 -5
- data/lib/imap/backup/downloader.rb +3 -4
- data/lib/imap/backup/serializer/mbox.rb +5 -0
- data/lib/imap/backup/serializer/mbox_store.rb +8 -8
- data/lib/imap/backup/thunderbird/mailbox_exporter.rb +58 -0
- data/lib/imap/backup/version.rb +1 -1
- data/lib/imap/backup.rb +1 -0
- data/lib/thunderbird/install.rb +16 -0
- data/lib/thunderbird/local_folder.rb +65 -0
- data/lib/thunderbird/profile.rb +30 -0
- data/lib/thunderbird/profiles.rb +71 -0
- data/lib/thunderbird/subdirectory.rb +96 -0
- data/lib/thunderbird/subdirectory_placeholder.rb +21 -0
- data/lib/thunderbird.rb +14 -0
- data/spec/features/restore_spec.rb +1 -1
- data/spec/features/support/email_server.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/email/provider/apple_mail_spec.rb +7 -0
- data/spec/unit/email/provider/default_spec.rb +17 -0
- data/spec/unit/email/provider/fastmail_spec.rb +7 -0
- data/spec/unit/email/provider/gmail_spec.rb +7 -0
- data/spec/unit/email/provider_spec.rb +12 -25
- data/spec/unit/imap/backup/account/connection_spec.rb +26 -51
- data/spec/unit/imap/backup/account/folder_spec.rb +22 -22
- data/spec/unit/imap/backup/cli/local_spec.rb +70 -0
- data/spec/unit/imap/backup/cli/utils_spec.rb +50 -0
- data/spec/unit/imap/backup/client/default_spec.rb +22 -0
- data/spec/unit/imap/backup/configuration/connection_tester_spec.rb +3 -3
- data/spec/unit/imap/backup/configuration/store_spec.rb +25 -12
- data/spec/unit/imap/backup/downloader_spec.rb +1 -2
- metadata +71 -28
- data/docs/docker-imap.md +0 -18
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            describe Imap::Backup::Configuration::ConnectionTester do
         | 
| 2 2 | 
             
              describe ".test" do
         | 
| 3 3 | 
             
                let(:connection) do
         | 
| 4 | 
            -
                  instance_double(Imap::Backup::Account::Connection,  | 
| 4 | 
            +
                  instance_double(Imap::Backup::Account::Connection, client: nil)
         | 
| 5 5 | 
             
                end
         | 
| 6 6 |  | 
| 7 7 | 
             
                before do
         | 
| @@ -10,7 +10,7 @@ describe Imap::Backup::Configuration::ConnectionTester do | |
| 10 10 |  | 
| 11 11 | 
             
                describe "call" do
         | 
| 12 12 | 
             
                  it "tries to connect" do
         | 
| 13 | 
            -
                    expect(connection).to receive(: | 
| 13 | 
            +
                    expect(connection).to receive(:client)
         | 
| 14 14 |  | 
| 15 15 | 
             
                    subject.test("foo")
         | 
| 16 16 | 
             
                  end
         | 
| @@ -24,7 +24,7 @@ describe Imap::Backup::Configuration::ConnectionTester do | |
| 24 24 |  | 
| 25 25 | 
             
                describe "failure" do
         | 
| 26 26 | 
             
                  before do
         | 
| 27 | 
            -
                    allow(connection).to receive(: | 
| 27 | 
            +
                    allow(connection).to receive(:client).and_raise(error)
         | 
| 28 28 | 
             
                  end
         | 
| 29 29 |  | 
| 30 30 | 
             
                  context "with no connection" do
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require "json"
         | 
| 2 | 
            +
            require "os"
         | 
| 2 3 |  | 
| 3 4 | 
             
            # rubocop:disable RSpec/PredicateMatcher
         | 
| 4 5 |  | 
| @@ -189,10 +190,16 @@ describe Imap::Backup::Configuration::Store do | |
| 189 190 | 
             
                end
         | 
| 190 191 |  | 
| 191 192 | 
             
                context "when file permissions are too open" do
         | 
| 192 | 
            -
                   | 
| 193 | 
            -
                     | 
| 193 | 
            +
                  context "when on UNIX" do
         | 
| 194 | 
            +
                    before do
         | 
| 195 | 
            +
                      allow(OS).to receive(:windows?) { false }
         | 
| 196 | 
            +
                    end
         | 
| 194 197 |  | 
| 195 | 
            -
                     | 
| 198 | 
            +
                    it "sets them to 0600" do
         | 
| 199 | 
            +
                      expect(FileUtils).to receive(:chmod).with(0o600, file_path)
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                      subject.save
         | 
| 202 | 
            +
                    end
         | 
| 196 203 | 
             
                  end
         | 
| 197 204 | 
             
                end
         | 
| 198 205 |  | 
| @@ -206,18 +213,24 @@ describe Imap::Backup::Configuration::Store do | |
| 206 213 | 
             
                  end
         | 
| 207 214 | 
             
                end
         | 
| 208 215 |  | 
| 209 | 
            -
                context "when  | 
| 210 | 
            -
                  let(:file_exists) { true }
         | 
| 211 | 
            -
             | 
| 216 | 
            +
                context "when on UNIX" do
         | 
| 212 217 | 
             
                  before do
         | 
| 213 | 
            -
                    allow( | 
| 214 | 
            -
                      with(file_path, 0o600).and_raise("Error")
         | 
| 218 | 
            +
                    allow(OS).to receive(:windows?) { false }
         | 
| 215 219 | 
             
                  end
         | 
| 216 220 |  | 
| 217 | 
            -
                   | 
| 218 | 
            -
                     | 
| 219 | 
            -
             | 
| 220 | 
            -
                     | 
| 221 | 
            +
                  context "when the config file permissions are too lax" do
         | 
| 222 | 
            +
                    let(:file_exists) { true }
         | 
| 223 | 
            +
             | 
| 224 | 
            +
                    before do
         | 
| 225 | 
            +
                      allow(Imap::Backup::Utils).to receive(:check_permissions).
         | 
| 226 | 
            +
                        with(file_path, 0o600).and_raise("Error")
         | 
| 227 | 
            +
                    end
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                    it "fails" do
         | 
| 230 | 
            +
                      expect do
         | 
| 231 | 
            +
                        subject.save
         | 
| 232 | 
            +
                      end.to raise_error(RuntimeError, "Error")
         | 
| 233 | 
            +
                    end
         | 
| 221 234 | 
             
                  end
         | 
| 222 235 | 
             
                end
         | 
| 223 236 | 
             
              end
         | 
| @@ -3,11 +3,10 @@ describe Imap::Backup::Downloader do | |
| 3 3 | 
             
                subject { described_class.new(folder, serializer) }
         | 
| 4 4 |  | 
| 5 5 | 
             
                let(:body) { "blah" }
         | 
| 6 | 
            -
                let(:message) { {"RFC822" => body} }
         | 
| 7 6 | 
             
                let(:folder) do
         | 
| 8 7 | 
             
                  instance_double(
         | 
| 9 8 | 
             
                    Imap::Backup::Account::Folder,
         | 
| 10 | 
            -
                    fetch:  | 
| 9 | 
            +
                    fetch: body,
         | 
| 11 10 | 
             
                    name: "folder",
         | 
| 12 11 | 
             
                    uids: folder_uids
         | 
| 13 12 | 
             
                  )
         | 
    
        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: 4.0. | 
| 4 | 
            +
              version: 4.0.4
         | 
| 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-12-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: highline
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: os
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 41 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 56 | 
             
              name: rake
         | 
| 43 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -161,12 +175,16 @@ files: | |
| 161 175 | 
             
            - LICENSE
         | 
| 162 176 | 
             
            - README.md
         | 
| 163 177 | 
             
            - bin/imap-backup
         | 
| 164 | 
            -
            - docs/ | 
| 178 | 
            +
            - docs/development.md
         | 
| 165 179 | 
             
            - docs/restore.md
         | 
| 166 180 | 
             
            - docs/setup.md
         | 
| 167 181 | 
             
            - imap-backup.gemspec
         | 
| 168 182 | 
             
            - lib/email/mboxrd/message.rb
         | 
| 169 183 | 
             
            - lib/email/provider.rb
         | 
| 184 | 
            +
            - lib/email/provider/apple_mail.rb
         | 
| 185 | 
            +
            - lib/email/provider/default.rb
         | 
| 186 | 
            +
            - lib/email/provider/fastmail.rb
         | 
| 187 | 
            +
            - lib/email/provider/gmail.rb
         | 
| 170 188 | 
             
            - lib/imap/backup.rb
         | 
| 171 189 | 
             
            - lib/imap/backup/account/connection.rb
         | 
| 172 190 | 
             
            - lib/imap/backup/account/folder.rb
         | 
| @@ -178,6 +196,9 @@ files: | |
| 178 196 | 
             
            - lib/imap/backup/cli/restore.rb
         | 
| 179 197 | 
             
            - lib/imap/backup/cli/setup.rb
         | 
| 180 198 | 
             
            - lib/imap/backup/cli/status.rb
         | 
| 199 | 
            +
            - lib/imap/backup/cli/utils.rb
         | 
| 200 | 
            +
            - lib/imap/backup/client/apple_mail.rb
         | 
| 201 | 
            +
            - lib/imap/backup/client/default.rb
         | 
| 181 202 | 
             
            - lib/imap/backup/configuration/account.rb
         | 
| 182 203 | 
             
            - lib/imap/backup/configuration/asker.rb
         | 
| 183 204 | 
             
            - lib/imap/backup/configuration/connection_tester.rb
         | 
| @@ -190,10 +211,18 @@ files: | |
| 190 211 | 
             
            - lib/imap/backup/serializer/mbox.rb
         | 
| 191 212 | 
             
            - lib/imap/backup/serializer/mbox_enumerator.rb
         | 
| 192 213 | 
             
            - lib/imap/backup/serializer/mbox_store.rb
         | 
| 214 | 
            +
            - lib/imap/backup/thunderbird/mailbox_exporter.rb
         | 
| 193 215 | 
             
            - lib/imap/backup/uploader.rb
         | 
| 194 216 | 
             
            - lib/imap/backup/utils.rb
         | 
| 195 217 | 
             
            - lib/imap/backup/version.rb
         | 
| 196 218 | 
             
            - lib/retry_on_error.rb
         | 
| 219 | 
            +
            - lib/thunderbird.rb
         | 
| 220 | 
            +
            - lib/thunderbird/install.rb
         | 
| 221 | 
            +
            - lib/thunderbird/local_folder.rb
         | 
| 222 | 
            +
            - lib/thunderbird/profile.rb
         | 
| 223 | 
            +
            - lib/thunderbird/profiles.rb
         | 
| 224 | 
            +
            - lib/thunderbird/subdirectory.rb
         | 
| 225 | 
            +
            - lib/thunderbird/subdirectory_placeholder.rb
         | 
| 197 226 | 
             
            - spec/features/backup_spec.rb
         | 
| 198 227 | 
             
            - spec/features/helper.rb
         | 
| 199 228 | 
             
            - spec/features/restore_spec.rb
         | 
| @@ -209,9 +238,16 @@ files: | |
| 209 238 | 
             
            - spec/support/shared_examples/account_flagging.rb
         | 
| 210 239 | 
             
            - spec/support/silence_logging.rb
         | 
| 211 240 | 
             
            - spec/unit/email/mboxrd/message_spec.rb
         | 
| 241 | 
            +
            - spec/unit/email/provider/apple_mail_spec.rb
         | 
| 242 | 
            +
            - spec/unit/email/provider/default_spec.rb
         | 
| 243 | 
            +
            - spec/unit/email/provider/fastmail_spec.rb
         | 
| 244 | 
            +
            - spec/unit/email/provider/gmail_spec.rb
         | 
| 212 245 | 
             
            - spec/unit/email/provider_spec.rb
         | 
| 213 246 | 
             
            - spec/unit/imap/backup/account/connection_spec.rb
         | 
| 214 247 | 
             
            - spec/unit/imap/backup/account/folder_spec.rb
         | 
| 248 | 
            +
            - spec/unit/imap/backup/cli/local_spec.rb
         | 
| 249 | 
            +
            - spec/unit/imap/backup/cli/utils_spec.rb
         | 
| 250 | 
            +
            - spec/unit/imap/backup/client/default_spec.rb
         | 
| 215 251 | 
             
            - spec/unit/imap/backup/configuration/account_spec.rb
         | 
| 216 252 | 
             
            - spec/unit/imap/backup/configuration/asker_spec.rb
         | 
| 217 253 | 
             
            - spec/unit/imap/backup/configuration/connection_tester_spec.rb
         | 
| @@ -245,40 +281,47 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 245 281 | 
             
                - !ruby/object:Gem::Version
         | 
| 246 282 | 
             
                  version: '0'
         | 
| 247 283 | 
             
            requirements: []
         | 
| 248 | 
            -
            rubygems_version: 3.1. | 
| 284 | 
            +
            rubygems_version: 3.1.2
         | 
| 249 285 | 
             
            signing_key: 
         | 
| 250 286 | 
             
            specification_version: 4
         | 
| 251 287 | 
             
            summary: Backup GMail (or other IMAP) accounts to disk
         | 
| 252 288 | 
             
            test_files:
         | 
| 253 | 
            -
            - spec/features/backup_spec.rb
         | 
| 254 | 
            -
            - spec/features/helper.rb
         | 
| 255 | 
            -
            - spec/features/restore_spec.rb
         | 
| 256 | 
            -
            - spec/features/support/backup_directory.rb
         | 
| 257 | 
            -
            - spec/features/support/email_server.rb
         | 
| 258 | 
            -
            - spec/features/support/shared/connection_context.rb
         | 
| 259 | 
            -
            - spec/features/support/shared/message_fixtures.rb
         | 
| 260 | 
            -
            - spec/fixtures/connection.yml
         | 
| 261 | 
            -
            - spec/gather_rspec_coverage.rb
         | 
| 262 289 | 
             
            - spec/spec_helper.rb
         | 
| 263 | 
            -
            - spec/ | 
| 264 | 
            -
            - spec/ | 
| 265 | 
            -
            - spec/ | 
| 266 | 
            -
            - spec/ | 
| 267 | 
            -
            - spec/unit/email/ | 
| 290 | 
            +
            - spec/fixtures/connection.yml
         | 
| 291 | 
            +
            - spec/unit/email/provider/gmail_spec.rb
         | 
| 292 | 
            +
            - spec/unit/email/provider/apple_mail_spec.rb
         | 
| 293 | 
            +
            - spec/unit/email/provider/default_spec.rb
         | 
| 294 | 
            +
            - spec/unit/email/provider/fastmail_spec.rb
         | 
| 268 295 | 
             
            - spec/unit/email/provider_spec.rb
         | 
| 269 | 
            -
            - spec/unit/ | 
| 270 | 
            -
            - spec/unit/imap/ | 
| 271 | 
            -
            - spec/unit/imap/backup/ | 
| 272 | 
            -
            - spec/unit/imap/backup/ | 
| 296 | 
            +
            - spec/unit/email/mboxrd/message_spec.rb
         | 
| 297 | 
            +
            - spec/unit/imap/backup_spec.rb
         | 
| 298 | 
            +
            - spec/unit/imap/backup/cli/utils_spec.rb
         | 
| 299 | 
            +
            - spec/unit/imap/backup/cli/local_spec.rb
         | 
| 300 | 
            +
            - spec/unit/imap/backup/utils_spec.rb
         | 
| 301 | 
            +
            - spec/unit/imap/backup/client/default_spec.rb
         | 
| 302 | 
            +
            - spec/unit/imap/backup/downloader_spec.rb
         | 
| 303 | 
            +
            - spec/unit/imap/backup/configuration/store_spec.rb
         | 
| 273 304 | 
             
            - spec/unit/imap/backup/configuration/connection_tester_spec.rb
         | 
| 305 | 
            +
            - spec/unit/imap/backup/configuration/asker_spec.rb
         | 
| 306 | 
            +
            - spec/unit/imap/backup/configuration/setup_spec.rb
         | 
| 274 307 | 
             
            - spec/unit/imap/backup/configuration/folder_chooser_spec.rb
         | 
| 308 | 
            +
            - spec/unit/imap/backup/configuration/account_spec.rb
         | 
| 275 309 | 
             
            - spec/unit/imap/backup/configuration/list_spec.rb
         | 
| 276 | 
            -
            - spec/unit/imap/backup/ | 
| 277 | 
            -
            - spec/unit/imap/backup/ | 
| 278 | 
            -
            - spec/unit/imap/backup/downloader_spec.rb
         | 
| 279 | 
            -
            - spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
         | 
| 310 | 
            +
            - spec/unit/imap/backup/account/folder_spec.rb
         | 
| 311 | 
            +
            - spec/unit/imap/backup/account/connection_spec.rb
         | 
| 280 312 | 
             
            - spec/unit/imap/backup/serializer/mbox_spec.rb
         | 
| 281 313 | 
             
            - spec/unit/imap/backup/serializer/mbox_store_spec.rb
         | 
| 314 | 
            +
            - spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
         | 
| 282 315 | 
             
            - spec/unit/imap/backup/uploader_spec.rb
         | 
| 283 | 
            -
            - spec/ | 
| 284 | 
            -
            - spec/ | 
| 316 | 
            +
            - spec/support/fixtures.rb
         | 
| 317 | 
            +
            - spec/support/shared_examples/account_flagging.rb
         | 
| 318 | 
            +
            - spec/support/higline_test_helpers.rb
         | 
| 319 | 
            +
            - spec/support/silence_logging.rb
         | 
| 320 | 
            +
            - spec/gather_rspec_coverage.rb
         | 
| 321 | 
            +
            - spec/features/backup_spec.rb
         | 
| 322 | 
            +
            - spec/features/helper.rb
         | 
| 323 | 
            +
            - spec/features/support/backup_directory.rb
         | 
| 324 | 
            +
            - spec/features/support/shared/message_fixtures.rb
         | 
| 325 | 
            +
            - spec/features/support/shared/connection_context.rb
         | 
| 326 | 
            +
            - spec/features/support/email_server.rb
         | 
| 327 | 
            +
            - spec/features/restore_spec.rb
         | 
    
        data/docs/docker-imap.md
    DELETED
    
    | @@ -1,18 +0,0 @@ | |
| 1 | 
            -
            # Access Docker imap server
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            ```ruby
         | 
| 4 | 
            -
            require "net/imap"
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            imap = Net::IMAP.new("localhost", {port: 8993, ssl: {verify_mode: 0}})
         | 
| 7 | 
            -
            username = "address@example.org"
         | 
| 8 | 
            -
            imap.login(username, "pass")
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            message = "From: #{username}\nSubject: Some Subject\n\nHello!\n"
         | 
| 11 | 
            -
            response = imap.append("INBOX", message, nil, nil)
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            imap.examine("INBOX")
         | 
| 14 | 
            -
            uids = imap.uid_search(["ALL"]).sort
         | 
| 15 | 
            -
             | 
| 16 | 
            -
            REQUESTED_ATTRIBUTES = ["RFC822", "FLAGS", "INTERNALDATE"].freeze
         | 
| 17 | 
            -
            fetch_data_items = imap.uid_fetch(uids, REQUESTED_ATTRIBUTES)
         | 
| 18 | 
            -
            ```
         |