diff --git a/pkg/algo/algo.go b/pkg/algo/algo.go
deleted file mode 100644
index 68b3d7c..0000000
--- a/pkg/algo/algo.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-// Package algo provides some algorithm utils.
-package algo
diff --git a/pkg/algo/sets.go b/pkg/algo/sets.go
deleted file mode 100644
index d084256..0000000
--- a/pkg/algo/sets.go
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package algo
-
-import "reflect"
-
-// SetIntersection complexity: O(n^2), could be better but this is simple enough.
-func SetIntersection(a, b interface{}, eq func(a, b interface{}) bool) []interface{} {
- set := make([]interface{}, 0)
- av := reflect.ValueOf(a)
-
- for i := 0; i < av.Len(); i++ {
- el := av.Index(i).Interface()
- if contains(b, el, eq) {
- set = append(set, el)
- }
- }
-
- return set
-}
-
-func contains(a, e interface{}, eq func(a, b interface{}) bool) bool {
- v := reflect.ValueOf(a)
-
- for i := 0; i < v.Len(); i++ {
- if eq(v.Index(i).Interface(), e) {
- return true
- }
- }
-
- return false
-}
diff --git a/pkg/algo/sets_test.go b/pkg/algo/sets_test.go
deleted file mode 100644
index bdb2718..0000000
--- a/pkg/algo/sets_test.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package algo
-
-import (
- "testing"
-
- "github.com/google/go-cmp/cmp"
-)
-
-type T struct {
- k, v int
-}
-
-func TestSetIntersection(t *testing.T) {
- keysAreEqual := func(a, b interface{}) bool {
- return a.(T).k == b.(T).k
- }
-
- type args struct {
- a interface{}
- b interface{}
- eq func(a, b interface{}) bool
- }
-
- tests := []struct {
- name string
- args args
- want interface{}
- }{
- {
- name: "integer sets",
- args: args{a: []int{1, 2, 3}, b: []int{3, 4, 5}, eq: func(a, b interface{}) bool { return a == b }},
- want: []int{3},
- },
- {
- name: "string sets",
- args: args{a: []string{"1", "2", "3"}, b: []string{"3", "4", "5"}, eq: func(a, b interface{}) bool { return a == b }},
- want: []string{"3"},
- },
- {
- name: "custom comp, only compare on keys, prefer first set if keys are the same",
- args: args{a: []T{{k: 1, v: 1}, {k: 2, v: 2}}, b: []T{{k: 2, v: 1234}, {k: 3, v: 3}}, eq: keysAreEqual},
- want: []T{{k: 2, v: 2}},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- // using cmp.Equal because it handles the interfaces correctly; testify/assert doesn't
- // treat these as equal because their types are different ([]interface vs []int)
- if got := SetIntersection(tt.args.a, tt.args.b, tt.args.eq); cmp.Equal(got, tt.want) {
- t.Errorf("SetIntersection() = %v, want %v", got, tt.want)
- }
- })
- }
-}
diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go
deleted file mode 100644
index 3162173..0000000
--- a/pkg/constants/constants.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-// Package constants contains variables that are set via ldflags during build.
-package constants
-
-import "fmt"
-
-const VendorName = "protonmail"
-
-// nolint[gochecknoglobals]
-var (
- // Version of the build.
- Version = "1000.1000.1000+git"
-
- // Revision is current hash of the build.
- Revision = "bf2a7aaf0f"
-
- // BuildTime stamp of the build.
- BuildTime = "2022-01-01T17:20:35+0100"
-
- // BuildVersion is derived from LongVersion and BuildTime.
- BuildVersion = fmt.Sprintf("%v (%v) %v", Version, Revision, BuildTime)
-)
diff --git a/pkg/constants/update_default.go b/pkg/constants/update_default.go
deleted file mode 100644
index 81a573a..0000000
--- a/pkg/constants/update_default.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-// +build !build_qa
-
-package constants
-
-import "time"
-
-// nolint[gochecknoglobals]
-var (
- // UpdateCheckInterval defines how often we check for new version
- UpdateCheckInterval = time.Hour //nolint[gochecknoglobals]
-)
diff --git a/pkg/constants/update_qa.go b/pkg/constants/update_qa.go
deleted file mode 100644
index a802f32..0000000
--- a/pkg/constants/update_qa.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-// +build build_qa
-
-package constants
-
-import "time"
-
-// nolint[gochecknoglobals]
-var (
- // UpdateCheckInterval defines how often we check for new version
- UpdateCheckInterval = time.Duration(5 * time.Minute)
-)
diff --git a/pkg/dialer/dial_client.go b/pkg/dialer/dial_client.go
deleted file mode 100644
index 8183ced..0000000
--- a/pkg/dialer/dial_client.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package dialer
-
-import (
- "net"
- "net/http"
- "time"
-)
-
-const (
- // ClientTimeout is the timeout for the whole request (from dial to
- // receiving the response body). It should be large enough to download
- // even the largest attachments or the new binary of the Bridge, but
- // should be hit if the server hangs (default is infinite which is bad).
- clientTimeout = 30 * time.Minute
- dialTimeout = 3 * time.Second
-)
-
-// DialTimeoutClient creates client with overridden dialTimeout.
-func DialTimeoutClient() *http.Client {
- transport := &http.Transport{
- Dial: func(network, addr string) (net.Conn, error) {
- return net.DialTimeout(network, addr, dialTimeout)
- },
- }
- return &http.Client{
- Timeout: clientTimeout,
- Transport: transport,
- }
-}
diff --git a/pkg/mobileconfig/config.go b/pkg/mobileconfig/config.go
deleted file mode 100644
index 4114a83..0000000
--- a/pkg/mobileconfig/config.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package mobileconfig
-
-import (
- "io"
- "text/template"
-
- "github.com/google/uuid"
-)
-
-// Config represents an Apple mobileconfig file.
-type Config struct {
- EmailAddress string
- DisplayName string
- Identifier string
- Organization string
- AccountDescription string
-
- IMAP *IMAP
- SMTP *SMTP
-
- Description string
- ContentUUID string
- UUID string
-}
-
-type IMAP struct {
- Hostname string
- Port int
- TLS bool
-
- Username string
- Password string
-}
-
-type SMTP struct {
- Hostname string
- Port int
- TLS bool
-
- // Leave Username blank to do not use SMTP authentication.
- Username string
- // Leave Password blank to use IMAP credentials.
- Password string
-}
-
-func (c *Config) WriteOut(w io.Writer) error {
- if c.ContentUUID == "" {
- uuid := uuid.New()
- c.ContentUUID = uuid.String()
- }
-
- if c.UUID == "" {
- uuid := uuid.New()
- c.UUID = uuid.String()
- }
-
- return template.Must(template.New("mobileconfig").Parse(mailTemplate)).Execute(w, c)
-}
diff --git a/pkg/mobileconfig/template.go b/pkg/mobileconfig/template.go
deleted file mode 100644
index 5de289d..0000000
--- a/pkg/mobileconfig/template.go
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package mobileconfig
-
-const mailTemplate = `
-
-
-
- PayloadContent
-
-
- {{- if .AccountDescription}}
- EmailAccountDescription
- {{.AccountDescription}}
- {{- end}}
-
- {{- if .IMAP}}
- EmailAccountType
- EmailTypeIMAP
-
- EmailAddress
- {{.EmailAddress}}
-
- IncomingMailServerAuthentication
- EmailAuthPassword
-
- IncomingMailServerHostName
- {{.IMAP.Hostname}}
-
- IncomingMailServerPortNumber
- {{.IMAP.Port}}
-
- IncomingMailServerUseSSL
- {{- if .IMAP.TLS}}
-
- {{- else}}
-
- {{- end}}
-
- IncomingMailServerUsername
- {{.IMAP.Username}}
-
- IncomingPassword
- {{.IMAP.Password}}
- {{- end}}
-
- {{ if .SMTP}}
- OutgoingMailServerAuthentication
- {{if .SMTP.Username}}EmailAuthPassword{{else}}EmailAuthNone{{end}}
-
- OutgoingMailServerHostName
- {{.SMTP.Hostname}}
-
- OutgoingMailServerPortNumber
- {{.SMTP.Port}}
-
- OutgoingMailServerUseSSL
- {{- if .SMTP.TLS}}
-
- {{- else}}
-
- {{- end}}
-
- {{- if .SMTP.Username}}
- OutgoingMailServerUsername
- {{.SMTP.Username}}
- {{- end}}
-
- {{- if .SMTP.Password}}
- OutgoingPassword
- {{.SMTP.Password}}
- {{- else}}
- OutgoingPasswordSameAsIncomingPassword
-
- {{- end}}
- {{end}}
-
- PayloadDescription
- Configures email account.
-
- PayloadDisplayName
- {{.DisplayName}}
-
- PayloadIdentifier
- {{.Identifier}}
-
- {{- if .Organization}}
- PayloadOrganization
- {{.Organization}}
- {{- end}}
-
- PayloadType
- com.apple.mail.managed
-
- PayloadUUID
- {{.ContentUUID}}
-
- PayloadVersion
- 1
-
- PreventAppSheet
-
-
- PreventMove
-
-
- SMIMEEnabled
-
-
-
-
- PayloadDescription
- {{if .Description}}{{.Description}}{{else}}Install this profile to auto configure email account for {{.EmailAddress}}.{{- end}}
-
- PayloadDisplayName
- {{.DisplayName}}
-
- PayloadIdentifier
- {{.Identifier}}
-
- {{- if .Organization}}
- PayloadOrganization
- {{.Organization}}
- {{- end}}
-
- PayloadRemovalDisallowed
-
-
- PayloadType
- Configuration
-
- PayloadUUID
- {{.UUID}}
-
- PayloadVersion
- 1
-
-`
diff --git a/pkg/signature/signature.go b/pkg/signature/signature.go
deleted file mode 100644
index b8018a5..0000000
--- a/pkg/signature/signature.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-// Package signature implements functions to verify files by their detached signatures.
-package signature
-
-import (
- "github.com/ProtonMail/gopenpgp/v2/crypto"
- "github.com/pkg/errors"
-)
-
-// Verify verifies the given file by its signature using the given armored public key.
-func Verify(fileBytes, sigBytes []byte, pubKey string) error {
- key, err := crypto.NewKeyFromArmored(pubKey)
- if err != nil {
- return errors.Wrap(err, "failed to load key")
- }
-
- kr, err := crypto.NewKeyRing(key)
- if err != nil {
- return errors.Wrap(err, "failed to create keyring")
- }
-
- return kr.VerifyDetached(
- crypto.NewPlainMessage(fileBytes),
- crypto.NewPGPSignature(sigBytes),
- crypto.GetUnixTime(),
- )
-}
diff --git a/pkg/sum/sum.go b/pkg/sum/sum.go
deleted file mode 100644
index c1d6e93..0000000
--- a/pkg/sum/sum.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package sum
-
-import (
- "crypto/sha512"
- "encoding/base64"
- "io"
- "os"
- "path/filepath"
-
- "github.com/sirupsen/logrus"
-)
-
-// RecursiveSum computes the sha512 sum of all files in the root directory and descendents.
-// If a skipFile is provided (e.g. the path of a checksum file relative to
-// rootDir), it (and its signature) is ignored.
-func RecursiveSum(rootDir, skipFileName string) ([]byte, error) {
- hash := sha512.New()
- // In windows filepath accepts both delimiters `\` and `/`. In order to
- // to properly skip file we have to choose one native delimiter.
- rootDir = filepath.FromSlash(rootDir)
- skipFile := filepath.Join(rootDir, skipFileName)
- skipFileSig := skipFile + ".sig"
-
- if err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
- log := logrus.
- WithField("path", path).
- WithField("sum", base64.StdEncoding.EncodeToString(hash.Sum([]byte{})))
- log.Debug("Next file")
- if err != nil {
- log.WithError(err).Error("Walk failed")
- return err
- }
- if info.IsDir() {
- log.Debug("Skip dir")
- return nil
- }
-
- // The hashfile itself isn't included in the hash.
- if path == skipFile || path == skipFileSig {
- log.Debug("Skip file")
- return nil
- }
-
- rel, err := filepath.Rel(rootDir, path)
- if err != nil {
- log.WithError(err).Error("Failed to find relative path")
- return err
- }
- if _, err := hash.Write([]byte(rel)); err != nil {
- log.WithError(err).Error("Failed to write path")
- return err
- }
- f, err := os.Open(path) // nolint[gosec]
- if err != nil {
- log.WithError(err).Error("Failed to open file")
- return err
- }
- if _, err := io.Copy(hash, f); err != nil {
- log.WithError(err).Error("Copy to hash failed")
- return err
- }
- return f.Close()
- }); err != nil {
- return nil, err
- }
-
- return hash.Sum([]byte{}), nil
-}
diff --git a/pkg/sum/sum_test.go b/pkg/sum/sum_test.go
deleted file mode 100644
index 9c13800..0000000
--- a/pkg/sum/sum_test.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package sum
-
-import (
- "io/ioutil"
- "os"
- "path/filepath"
- "testing"
-
- "github.com/stretchr/testify/require"
-)
-
-func TestRecursiveSum(t *testing.T) {
- tempDir, err := ioutil.TempDir("", "verify-test")
- require.NoError(t, err)
-
- createFiles(t, tempDir,
- filepath.Join("a", "1"),
- filepath.Join("a", "2"),
- filepath.Join("b", "3"),
- filepath.Join("b", "4"),
- filepath.Join("b", "c", "5"),
- filepath.Join("b", "c", "6"),
- )
-
- sumOriginal := sum(t, tempDir)
-
- // Renaming files should produce a different checksum.
- require.NoError(t, os.Rename(filepath.Join(tempDir, "a", "1"), filepath.Join(tempDir, "a", "11")))
- sumRenamed := sum(t, tempDir)
- require.NotEqual(t, sumOriginal, sumRenamed)
-
- // Reverting to the original name should produce the same checksum again.
- require.NoError(t, os.Rename(filepath.Join(tempDir, "a", "11"), filepath.Join(tempDir, "a", "1")))
- require.Equal(t, sumOriginal, sum(t, tempDir))
-
- // Moving files should produce a different checksum.
- require.NoError(t, os.Rename(filepath.Join(tempDir, "a", "1"), filepath.Join(tempDir, "1")))
- sumMoved := sum(t, tempDir)
- require.NotEqual(t, sumOriginal, sumMoved)
-
- // Moving files back to their original location should produce the same checksum again.
- require.NoError(t, os.Rename(filepath.Join(tempDir, "1"), filepath.Join(tempDir, "a", "1")))
- require.Equal(t, sumOriginal, sum(t, tempDir))
-
- // Changing file data should produce a different checksum.
- originalData := modifyFile(t, filepath.Join(tempDir, "a", "1"), []byte("something"))
- require.NotEqual(t, sumOriginal, sum(t, tempDir))
-
- // Reverting file data should produce the original checksum.
- modifyFile(t, filepath.Join(tempDir, "a", "1"), originalData)
- require.Equal(t, sumOriginal, sum(t, tempDir))
-}
-
-func createFiles(t *testing.T, root string, paths ...string) {
- for _, path := range paths {
- makeFile(t, filepath.Join(root, path))
- }
-}
-
-func makeFile(t *testing.T, path string) {
- require.NoError(t, os.MkdirAll(filepath.Dir(path), 0700))
-
- f, err := os.Create(path)
- require.NoError(t, err)
-
- _, err = f.WriteString(path)
- require.NoError(t, err)
-
- require.NoError(t, f.Close())
-}
-
-func sum(t *testing.T, path string) []byte {
- sum, err := RecursiveSum(path, "")
- require.NoError(t, err)
-
- return sum
-}
-
-func modifyFile(t *testing.T, path string, data []byte) []byte {
- r, err := os.Open(path)
- require.NoError(t, err)
-
- b, err := ioutil.ReadAll(r)
- require.NoError(t, err)
- require.NoError(t, r.Close())
-
- f, err := os.Create(path)
- require.NoError(t, err)
-
- _, err = f.Write(data)
- require.NoError(t, err)
- require.NoError(t, f.Close())
-
- return b
-}
diff --git a/pkg/tar/tar.go b/pkg/tar/tar.go
deleted file mode 100644
index 47f84e7..0000000
--- a/pkg/tar/tar.go
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (c) 2022 Proton Technologies AG
-//
-// This file is part of ProtonMail Bridge.
-//
-// ProtonMail Bridge is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// ProtonMail Bridge is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with ProtonMail Bridge. If not, see .
-
-package tar
-
-import (
- "archive/tar"
- "errors"
- "io"
- "os"
- "path/filepath"
- "runtime"
-
- "github.com/sirupsen/logrus"
-)
-
-// maxFileSize limit tre single file size after decopression is not larger than 1GB.
-const maxFileSize = int64(1 * 1024 * 1024 * 1024) // 1 GB
-
-// ErrFileTooLarge returned when decompressed file is too large.
-var ErrFileTooLarge = errors.New("trying to decompress file larger than 1GB")
-
-type limitReader struct {
- r io.Reader
- n int64
-}
-
-// Read returns error if limit was exceeded. Inspired by io.LimitReader.Read
-// implementation.
-func (lr *limitReader) Read(p []byte) (n int, err error) {
- if lr.n <= 0 {
- return 0, ErrFileTooLarge
- }
- if int64(len(p)) > lr.n {
- p = p[0:lr.n]
- }
- n, err = lr.r.Read(p)
- lr.n -= int64(n)
- return
-}
-
-// UntarToDir decopmress and unarchive the files into directory.
-func UntarToDir(r io.Reader, dir string) error {
- tr := tar.NewReader(r)
-
- for {
- header, err := tr.Next()
- if err == io.EOF {
- return nil
- }
- if err != nil {
- return err
- }
- if header == nil {
- continue
- }
-
- target := filepath.Join(dir, filepath.Clean(header.Name)) // gosec G305
-
- switch {
- case header.Typeflag == tar.TypeSymlink:
- if err := os.Symlink(header.Linkname, target); err != nil {
- return err
- }
-
- case header.FileInfo().IsDir():
- if err := os.MkdirAll(target, header.FileInfo().Mode()); err != nil {
- return err
- }
-
- default:
- f, err := os.Create(target)
- if err != nil {
- return err
- }
- lr := &limitReader{r: tr, n: maxFileSize} // gosec G110
- if _, err := io.Copy(f, lr); err != nil {
- return err
- }
- if runtime.GOOS != "windows" {
- if err := f.Chmod(header.FileInfo().Mode()); err != nil {
- return err
- }
- }
- if err := f.Close(); err != nil {
- logrus.WithError(err).Error("Failed to close file")
- }
- }
- }
-}
diff --git a/pkg/transfer/mocks/mocks.go b/pkg/transfer/mocks/mocks.go
deleted file mode 100644
index 5025fde..0000000
--- a/pkg/transfer/mocks/mocks.go
+++ /dev/null
@@ -1,215 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: github.com/ljanyst/peroxide/pkg/transfer (interfaces: PanicHandler,IMAPClientProvider)
-
-// Package mocks is a generated GoMock package.
-package mocks
-
-import (
- reflect "reflect"
-
- imap "github.com/emersion/go-imap"
- sasl "github.com/emersion/go-sasl"
- gomock "github.com/golang/mock/gomock"
-)
-
-// MockPanicHandler is a mock of PanicHandler interface.
-type MockPanicHandler struct {
- ctrl *gomock.Controller
- recorder *MockPanicHandlerMockRecorder
-}
-
-// MockPanicHandlerMockRecorder is the mock recorder for MockPanicHandler.
-type MockPanicHandlerMockRecorder struct {
- mock *MockPanicHandler
-}
-
-// NewMockPanicHandler creates a new mock instance.
-func NewMockPanicHandler(ctrl *gomock.Controller) *MockPanicHandler {
- mock := &MockPanicHandler{ctrl: ctrl}
- mock.recorder = &MockPanicHandlerMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockPanicHandler) EXPECT() *MockPanicHandlerMockRecorder {
- return m.recorder
-}
-
-// HandlePanic mocks base method.
-func (m *MockPanicHandler) HandlePanic() {
- m.ctrl.T.Helper()
- m.ctrl.Call(m, "HandlePanic")
-}
-
-// HandlePanic indicates an expected call of HandlePanic.
-func (mr *MockPanicHandlerMockRecorder) HandlePanic() *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HandlePanic", reflect.TypeOf((*MockPanicHandler)(nil).HandlePanic))
-}
-
-// MockIMAPClientProvider is a mock of IMAPClientProvider interface.
-type MockIMAPClientProvider struct {
- ctrl *gomock.Controller
- recorder *MockIMAPClientProviderMockRecorder
-}
-
-// MockIMAPClientProviderMockRecorder is the mock recorder for MockIMAPClientProvider.
-type MockIMAPClientProviderMockRecorder struct {
- mock *MockIMAPClientProvider
-}
-
-// NewMockIMAPClientProvider creates a new mock instance.
-func NewMockIMAPClientProvider(ctrl *gomock.Controller) *MockIMAPClientProvider {
- mock := &MockIMAPClientProvider{ctrl: ctrl}
- mock.recorder = &MockIMAPClientProviderMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockIMAPClientProvider) EXPECT() *MockIMAPClientProviderMockRecorder {
- return m.recorder
-}
-
-// Authenticate mocks base method.
-func (m *MockIMAPClientProvider) Authenticate(arg0 sasl.Client) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Authenticate", arg0)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Authenticate indicates an expected call of Authenticate.
-func (mr *MockIMAPClientProviderMockRecorder) Authenticate(arg0 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Authenticate", reflect.TypeOf((*MockIMAPClientProvider)(nil).Authenticate), arg0)
-}
-
-// Capability mocks base method.
-func (m *MockIMAPClientProvider) Capability() (map[string]bool, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Capability")
- ret0, _ := ret[0].(map[string]bool)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// Capability indicates an expected call of Capability.
-func (mr *MockIMAPClientProviderMockRecorder) Capability() *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Capability", reflect.TypeOf((*MockIMAPClientProvider)(nil).Capability))
-}
-
-// Fetch mocks base method.
-func (m *MockIMAPClientProvider) Fetch(arg0 *imap.SeqSet, arg1 []imap.FetchItem, arg2 chan *imap.Message) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Fetch", arg0, arg1, arg2)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Fetch indicates an expected call of Fetch.
-func (mr *MockIMAPClientProviderMockRecorder) Fetch(arg0, arg1, arg2 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Fetch", reflect.TypeOf((*MockIMAPClientProvider)(nil).Fetch), arg0, arg1, arg2)
-}
-
-// List mocks base method.
-func (m *MockIMAPClientProvider) List(arg0, arg1 string, arg2 chan *imap.MailboxInfo) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "List", arg0, arg1, arg2)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// List indicates an expected call of List.
-func (mr *MockIMAPClientProviderMockRecorder) List(arg0, arg1, arg2 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockIMAPClientProvider)(nil).List), arg0, arg1, arg2)
-}
-
-// Login mocks base method.
-func (m *MockIMAPClientProvider) Login(arg0, arg1 string) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Login", arg0, arg1)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Login indicates an expected call of Login.
-func (mr *MockIMAPClientProviderMockRecorder) Login(arg0, arg1 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Login", reflect.TypeOf((*MockIMAPClientProvider)(nil).Login), arg0, arg1)
-}
-
-// Select mocks base method.
-func (m *MockIMAPClientProvider) Select(arg0 string, arg1 bool) (*imap.MailboxStatus, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Select", arg0, arg1)
- ret0, _ := ret[0].(*imap.MailboxStatus)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// Select indicates an expected call of Select.
-func (mr *MockIMAPClientProviderMockRecorder) Select(arg0, arg1 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Select", reflect.TypeOf((*MockIMAPClientProvider)(nil).Select), arg0, arg1)
-}
-
-// State mocks base method.
-func (m *MockIMAPClientProvider) State() imap.ConnState {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "State")
- ret0, _ := ret[0].(imap.ConnState)
- return ret0
-}
-
-// State indicates an expected call of State.
-func (mr *MockIMAPClientProviderMockRecorder) State() *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "State", reflect.TypeOf((*MockIMAPClientProvider)(nil).State))
-}
-
-// Support mocks base method.
-func (m *MockIMAPClientProvider) Support(arg0 string) (bool, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Support", arg0)
- ret0, _ := ret[0].(bool)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// Support indicates an expected call of Support.
-func (mr *MockIMAPClientProviderMockRecorder) Support(arg0 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Support", reflect.TypeOf((*MockIMAPClientProvider)(nil).Support), arg0)
-}
-
-// SupportAuth mocks base method.
-func (m *MockIMAPClientProvider) SupportAuth(arg0 string) (bool, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "SupportAuth", arg0)
- ret0, _ := ret[0].(bool)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// SupportAuth indicates an expected call of SupportAuth.
-func (mr *MockIMAPClientProviderMockRecorder) SupportAuth(arg0 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SupportAuth", reflect.TypeOf((*MockIMAPClientProvider)(nil).SupportAuth), arg0)
-}
-
-// UidFetch mocks base method.
-func (m *MockIMAPClientProvider) UidFetch(arg0 *imap.SeqSet, arg1 []imap.FetchItem, arg2 chan *imap.Message) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "UidFetch", arg0, arg1, arg2)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// UidFetch indicates an expected call of UidFetch.
-func (mr *MockIMAPClientProviderMockRecorder) UidFetch(arg0, arg1, arg2 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UidFetch", reflect.TypeOf((*MockIMAPClientProvider)(nil).UidFetch), arg0, arg1, arg2)
-}