From e5095b21544d9a46040d0ab63ac81557dd0de4ba Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Thu, 17 Nov 2022 13:10:03 +0100 Subject: [PATCH] Other: Add API debug option in QA builds --- internal/bridge/api.go | 45 +++++++++++++++++++++++++++++ internal/bridge/api_default.go | 38 ++++++++++++++++++++++++ internal/bridge/api_qa.go | 53 ++++++++++++++++++++++++++++++++++ internal/bridge/bridge.go | 9 +----- 4 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 internal/bridge/api.go create mode 100644 internal/bridge/api_default.go create mode 100644 internal/bridge/api_qa.go diff --git a/internal/bridge/api.go b/internal/bridge/api.go new file mode 100644 index 00000000..d1f83fb1 --- /dev/null +++ b/internal/bridge/api.go @@ -0,0 +1,45 @@ +// Copyright (c) 2022 Proton AG +// +// This file is part of Proton Mail Bridge. +// +// Proton Mail 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. +// +// Proton Mail 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 Proton Mail Bridge. If not, see . + +package bridge + +import ( + "net/http" + + "github.com/Masterminds/semver/v3" + "github.com/ProtonMail/proton-bridge/v2/internal/constants" + "github.com/sirupsen/logrus" + "gitlab.protontech.ch/go/liteapi" +) + +// defaultAPIOptions returns a set of default API options for the given parameters. +func defaultAPIOptions( + apiURL string, + version *semver.Version, + cookieJar http.CookieJar, + transport http.RoundTripper, + poolSize int, +) []liteapi.Option { + return []liteapi.Option{ + liteapi.WithHostURL(apiURL), + liteapi.WithAppVersion(constants.AppVersion(version.Original())), + liteapi.WithCookieJar(cookieJar), + liteapi.WithTransport(transport), + liteapi.WithAttPoolSize(poolSize), + liteapi.WithLogger(logrus.StandardLogger()), + } +} diff --git a/internal/bridge/api_default.go b/internal/bridge/api_default.go new file mode 100644 index 00000000..2c734d57 --- /dev/null +++ b/internal/bridge/api_default.go @@ -0,0 +1,38 @@ +// Copyright (c) 2022 Proton AG +// +// This file is part of Proton Mail Bridge. +// +// Proton Mail 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. +// +// Proton Mail 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 Proton Mail Bridge. If not, see . + +//go:build !build_qa + +package bridge + +import ( + "net/http" + + "github.com/Masterminds/semver/v3" + "gitlab.protontech.ch/go/liteapi" +) + +// newAPIOptions returns a set of API options for the given parameters. +func newAPIOptions( + apiURL string, + version *semver.Version, + cookieJar http.CookieJar, + transport http.RoundTripper, + poolSize int, +) []liteapi.Option { + return defaultAPIOptions(apiURL, version, cookieJar, transport, poolSize) +} diff --git a/internal/bridge/api_qa.go b/internal/bridge/api_qa.go new file mode 100644 index 00000000..7802632f --- /dev/null +++ b/internal/bridge/api_qa.go @@ -0,0 +1,53 @@ +// Copyright (c) 2022 Proton AG +// +// This file is part of Proton Mail Bridge. +// +// Proton Mail 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. +// +// Proton Mail 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 Proton Mail Bridge. If not, see . + +//go:build build_qa + +package bridge + +import ( + "net/http" + "os" + + "github.com/Masterminds/semver/v3" + "gitlab.protontech.ch/go/liteapi" +) + +// newAPIOptions returns a set of API options for the given parameters. +func newAPIOptions( + apiURL string, + version *semver.Version, + cookieJar http.CookieJar, + transport http.RoundTripper, + poolSize int, +) []liteapi.Option { + opt := defaultAPIOptions(apiURL, version, cookieJar, transport, poolSize) + + if host := os.Getenv("BRIDGE_API_HOST"); host != "" { + opt = append(opt, liteapi.WithHostURL(host)) + } + + if debug := os.Getenv("BRIDGE_API_DEBUG"); debug != "" { + opt = append(opt, liteapi.WithDebug(true)) + } + + if skipVerify := os.Getenv("BRIDGE_API_SKIP_VERIFY"); skipVerify != "" { + opt = append(opt, liteapi.WithSkipVerifyProofs()) + } + + return opt +} diff --git a/internal/bridge/bridge.go b/internal/bridge/bridge.go index 3ffb0048..1c76e9db 100644 --- a/internal/bridge/bridge.go +++ b/internal/bridge/bridge.go @@ -139,14 +139,7 @@ func New( //nolint:funlen logSMTP bool, // whether to log SMTP activity ) (*Bridge, <-chan events.Event, error) { // api is the user's API manager. - api := liteapi.New( - liteapi.WithHostURL(apiURL), - liteapi.WithAppVersion(constants.AppVersion(curVersion.Original())), - liteapi.WithCookieJar(cookieJar), - liteapi.WithTransport(roundTripper), - liteapi.WithAttPoolSize(vault.SyncAttPool()), - liteapi.WithLogger(logrus.StandardLogger()), - ) + api := liteapi.New(newAPIOptions(apiURL, curVersion, cookieJar, roundTripper, vault.SyncAttPool())...) // tasks holds all the bridge's background tasks. tasks := async.NewGroup(context.Background(), crashHandler)