forked from Silverfish/proton-bridge
refactor: no more pmapifactory
This commit is contained in:
@ -21,15 +21,14 @@ import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/ProtonMail/go-appdir"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/logs"
|
||||
"github.com/hashicorp/go-multierror"
|
||||
)
|
||||
|
||||
var (
|
||||
log = GetLogEntry("config") //nolint[gochecknoglobals]
|
||||
log = logs.GetLogEntry("config") //nolint[gochecknoglobals]
|
||||
)
|
||||
|
||||
type appDirProvider interface {
|
||||
@ -45,7 +44,6 @@ type Config struct {
|
||||
cacheVersion string
|
||||
appDirs appDirProvider
|
||||
appDirsVersion appDirProvider
|
||||
apiConfig *pmapi.ClientConfig
|
||||
}
|
||||
|
||||
// New returns fully initialized config struct.
|
||||
@ -67,11 +65,6 @@ func newConfig(appName, version, revision, cacheVersion string, appDirs, appDirs
|
||||
cacheVersion: cacheVersion,
|
||||
appDirs: appDirs,
|
||||
appDirsVersion: appDirsVersion,
|
||||
apiConfig: &pmapi.ClientConfig{
|
||||
AppVersion: strings.Title(appName) + "_" + version,
|
||||
ClientID: appName,
|
||||
SentryDSN: "https://bacfb56338a7471a9fede610046afdda:ab437b0d13f54602a0f5feb684e6d319@api.protonmail.ch/reports/sentry/8",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@ -229,11 +222,6 @@ func (c *Config) GetPreferencesPath() string {
|
||||
return filepath.Join(c.appDirsVersion.UserCache(), "prefs.json")
|
||||
}
|
||||
|
||||
// GetAPIConfig returns config for ProtonMail API.
|
||||
func (c *Config) GetAPIConfig() *pmapi.ClientConfig {
|
||||
return c.apiConfig
|
||||
}
|
||||
|
||||
// GetDefaultAPIPort returns default Bridge local API port.
|
||||
func (c *Config) GetDefaultAPIPort() int {
|
||||
return 1042
|
||||
|
||||
@ -54,13 +54,6 @@ var logFile *os.File //nolint[gochecknoglobals]
|
||||
var logFileRgx = regexp.MustCompile("^v.*\\.log$") //nolint[gochecknoglobals]
|
||||
var logCrashRgx = regexp.MustCompile("^v.*_crash_.*\\.log$") //nolint[gochecknoglobals]
|
||||
|
||||
// GetLogEntry returns logrus.Entry with PID and `packageName`.
|
||||
func GetLogEntry(packageName string) *logrus.Entry {
|
||||
return logrus.WithFields(logrus.Fields{
|
||||
"pkg": packageName,
|
||||
})
|
||||
}
|
||||
|
||||
// HandlePanic reports the crash to sentry or local file when sentry fails.
|
||||
func HandlePanic(cfg *Config, output string) {
|
||||
if !cfg.IsDevMode() {
|
||||
|
||||
43
pkg/config/pmapi_noprod.go
Normal file
43
pkg/config/pmapi_noprod.go
Normal file
@ -0,0 +1,43 @@
|
||||
// Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
// +build !pmapi_prod
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/ProtonMail/proton-bridge/pkg/listener"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
|
||||
)
|
||||
|
||||
func (c *Config) GetAPIConfig() *pmapi.ClientConfig {
|
||||
return &pmapi.ClientConfig{
|
||||
AppVersion: strings.Title(c.appName) + "_" + c.version,
|
||||
ClientID: c.appName,
|
||||
}
|
||||
}
|
||||
|
||||
func SetClientRoundTripper(_ *pmapi.ClientManager, _ *pmapi.ClientConfig, _ listener.Listener) {
|
||||
// Use the default roundtripper; do nothing.
|
||||
}
|
||||
|
||||
func (c *Config) GetRoundTripper(_ *pmapi.ClientManager, _ listener.Listener) http.RoundTripper {
|
||||
return http.DefaultTransport
|
||||
}
|
||||
50
pkg/config/pmapi_prod.go
Normal file
50
pkg/config/pmapi_prod.go
Normal file
@ -0,0 +1,50 @@
|
||||
// Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
// +build pmapi_prod
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/ProtonMail/proton-bridge/internal/events"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/listener"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
|
||||
)
|
||||
|
||||
func (c *Config) GetAPIConfig() *pmapi.ClientConfig {
|
||||
return &pmapi.ClientConfig{
|
||||
AppVersion: strings.Title(c.appName) + "_" + c.version,
|
||||
ClientID: c.appName,
|
||||
Timeout: 10 * time.Minute, // Overall request timeout (~25MB / 10 mins => ~40kB/s, should be reasonable).
|
||||
FirstReadTimeout: 30 * time.Second, // 30s to match 30s response header timeout.
|
||||
MinSpeed: 1 << 13, // Enforce minimum download speed of 8kB/s.
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Config) GetRoundTripper(cm *pmapi.ClientManager, listener listener.Listener) http.RoundTripper {
|
||||
pin := pmapi.NewDialerWithPinning(cm, c.GetAPIConfig().AppVersion)
|
||||
|
||||
pin.ReportCertIssueLocal = func() {
|
||||
listener.Emit(events.TLSCertIssue, "")
|
||||
}
|
||||
|
||||
return pin.TransportWithPinning()
|
||||
}
|
||||
@ -22,7 +22,7 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/ProtonMail/proton-bridge/pkg/config"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/logs"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
|
||||
)
|
||||
|
||||
@ -30,7 +30,7 @@ import (
|
||||
var (
|
||||
ErrNoInternetConnection = errors.New("no internet connection")
|
||||
ErrCanNotReachAPI = errors.New("can not reach PM API")
|
||||
log = config.GetLogEntry("connection") //nolint[gochecknoglobals]
|
||||
log = logs.GetLogEntry("connection") //nolint[gochecknoglobals]
|
||||
)
|
||||
|
||||
// CheckInternetConnection does a check of API connection. It checks two of our endpoints in parallel.
|
||||
|
||||
@ -23,7 +23,7 @@ import (
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/ProtonMail/proton-bridge/pkg/config"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/logs"
|
||||
"github.com/docker/docker-credential-helpers/credentials"
|
||||
)
|
||||
|
||||
@ -32,7 +32,7 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
log = config.GetLogEntry("bridgeUtils/keychain") //nolint[gochecknoglobals]
|
||||
log = logs.GetLogEntry("bridgeUtils/keychain") //nolint[gochecknoglobals]
|
||||
|
||||
ErrWrongKeychainURL = errors.New("wrong keychain base URL")
|
||||
ErrMacKeychainRebuild = errors.New("keychain error -25293")
|
||||
|
||||
@ -21,10 +21,10 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/ProtonMail/proton-bridge/pkg/config"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/logs"
|
||||
)
|
||||
|
||||
var log = config.GetLogEntry("bridgeUtils/listener") //nolint[gochecknoglobals]
|
||||
var log = logs.GetLogEntry("bridgeUtils/listener") //nolint[gochecknoglobals]
|
||||
|
||||
// Listener has a list of channels watching for updates.
|
||||
type Listener interface {
|
||||
|
||||
10
pkg/logs/logs.go
Normal file
10
pkg/logs/logs.go
Normal file
@ -0,0 +1,10 @@
|
||||
package logs
|
||||
|
||||
import "github.com/sirupsen/logrus"
|
||||
|
||||
// GetLogEntry returns logrus.Entry with PID and `packageName`.
|
||||
func GetLogEntry(packageName string) *logrus.Entry {
|
||||
return logrus.WithFields(logrus.Fields{
|
||||
"pkg": packageName,
|
||||
})
|
||||
}
|
||||
@ -76,9 +76,6 @@ type ClientConfig struct {
|
||||
// The client ID.
|
||||
ClientID string
|
||||
|
||||
// The sentry DSN.
|
||||
SentryDSN string
|
||||
|
||||
// Timeout specifies the timeout from request to getting response headers to our API.
|
||||
// Passed to http.Client, empty means no timeout.
|
||||
Timeout time.Duration
|
||||
|
||||
@ -6,7 +6,6 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/getsentry/raven-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@ -59,10 +58,6 @@ type tokenExpiration struct {
|
||||
|
||||
// NewClientManager creates a new ClientMan which manages clients configured with the given client config.
|
||||
func NewClientManager(config *ClientConfig) (cm *ClientManager) {
|
||||
if err := raven.SetDSN(config.SentryDSN); err != nil {
|
||||
logrus.WithError(err).Error("Could not set up sentry DSN")
|
||||
}
|
||||
|
||||
cm = &ClientManager{
|
||||
config: config,
|
||||
roundTripper: http.DefaultTransport,
|
||||
|
||||
@ -27,7 +27,7 @@ import (
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/ProtonMail/proton-bridge/pkg/config"
|
||||
"github.com/ProtonMail/proton-bridge/pkg/logs"
|
||||
"github.com/kardianos/osext"
|
||||
)
|
||||
|
||||
@ -44,7 +44,7 @@ var (
|
||||
)
|
||||
|
||||
var (
|
||||
log = config.GetLogEntry("bridgeUtils/updates") //nolint[gochecknoglobals]
|
||||
log = logs.GetLogEntry("bridgeUtils/updates") //nolint[gochecknoglobals]
|
||||
|
||||
installFileSuffix = map[string]string{ //nolint[gochecknoglobals]
|
||||
"darwin": ".dmg",
|
||||
|
||||
Reference in New Issue
Block a user