Other: Add API debug option in QA builds

This commit is contained in:
James Houlahan 2022-11-17 13:10:03 +01:00
parent 1e48ab4b9c
commit e5095b2154
4 changed files with 137 additions and 8 deletions

45
internal/bridge/api.go Normal file
View File

@ -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 <https://www.gnu.org/licenses/>.
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()),
}
}

View File

@ -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 <https://www.gnu.org/licenses/>.
//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)
}

53
internal/bridge/api_qa.go Normal file
View File

@ -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 <https://www.gnu.org/licenses/>.
//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
}

View File

@ -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)