Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions cmd/boulder-wfe2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"github.com/letsencrypt/boulder/ratelimits"
bredis "github.com/letsencrypt/boulder/redis"
sapb "github.com/letsencrypt/boulder/sa/proto"
salesforcepb "github.com/letsencrypt/boulder/salesforce/proto"
emailpb "github.com/letsencrypt/boulder/salesforce/email/proto"
"github.com/letsencrypt/boulder/unpause"
"github.com/letsencrypt/boulder/web"
"github.com/letsencrypt/boulder/wfe2"
Expand Down Expand Up @@ -310,11 +310,11 @@ func main() {
cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to SA")
sac := sapb.NewStorageAuthorityReadOnlyClient(saConn)

var eec salesforcepb.ExporterClient
var eec emailpb.ExporterClient
if c.WFE.EmailExporter != nil {
emailExporterConn, err := bgrpc.ClientSetup(c.WFE.EmailExporter, tlsConfig, stats, clk)
cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to email-exporter")
eec = salesforcepb.NewExporterClient(emailExporterConn)
eec = emailpb.NewExporterClient(emailExporterConn)
}

if c.WFE.RedeemNonceService == nil {
Expand Down
39 changes: 1 addition & 38 deletions cmd/email-exporter/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@ import (
"os"

"github.com/jmhodges/clock"
"google.golang.org/protobuf/types/known/emptypb"

"github.com/letsencrypt/boulder/cmd"
bgrpc "github.com/letsencrypt/boulder/grpc"
"github.com/letsencrypt/boulder/salesforce"
emailpb "github.com/letsencrypt/boulder/salesforce/email/proto"
salesforcepb "github.com/letsencrypt/boulder/salesforce/proto"
)

// Config holds the configuration for the email-exporter service.
Expand Down Expand Up @@ -64,38 +62,6 @@ type Config struct {
OpenTelemetry cmd.OpenTelemetryConfig
}

// legacyEmailExporterServer is an adapter that implements the email.Exporter
// gRPC interface by delegating to an inner salesforce.Exporter server.
//
// TODO(#8410): Remove legacyEmailExporterServer once fully migrated to
// salesforcepb.Exporter.
type legacyEmailExporterServer struct {
emailpb.UnimplementedExporterServer
inner salesforcepb.ExporterServer
}

// SendContacts is an interface adapter that forwards the request to the same
// method on the inner salesforce.Exporter server.
func (s legacyEmailExporterServer) SendContacts(ctx context.Context, req *emailpb.SendContactsRequest) (*emptypb.Empty, error) {
return s.inner.SendContacts(ctx, &salesforcepb.SendContactsRequest{Emails: req.GetEmails()})
}

// SendCase is an interface adapter that forwards the request to the same method
// on the inner salesforce.Exporter server.
func (s legacyEmailExporterServer) SendCase(ctx context.Context, req *emailpb.SendCaseRequest) (*emptypb.Empty, error) {
return s.inner.SendCase(ctx, &salesforcepb.SendCaseRequest{
Origin: req.GetOrigin(),
Subject: req.GetSubject(),
Description: req.GetDescription(),
ContactEmail: req.GetContactEmail(),
Organization: req.GetOrganization(),
AccountId: req.GetAccountId(),
RateLimitName: req.GetRateLimitName(),
RateLimitTier: req.GetRateLimitTier(),
UseCase: req.GetUseCase(),
})
}

func main() {
configFile := flag.String("config", "", "Path to configuration file")
grpcAddr := flag.String("addr", "", "gRPC listen address override")
Expand Down Expand Up @@ -152,10 +118,7 @@ func main() {
go server.Start(daemonCtx)

start, err := bgrpc.NewServer(c.EmailExporter.GRPC, logger).Add(
&salesforcepb.Exporter_ServiceDesc, server).Add(
// TODO(#8410): Remove emailpb.Exporter once fully migrated to
// salesforcepb.Exporter.
&emailpb.Exporter_ServiceDesc, legacyEmailExporterServer{inner: server}).Build(
&emailpb.Exporter_ServiceDesc, server).Build(
tlsConfig, scope, clk)
cmd.FailOnError(err, "Configuring email-exporter gRPC server")

Expand Down
6 changes: 3 additions & 3 deletions cmd/sfe/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
"github.com/letsencrypt/boulder/ratelimits"
bredis "github.com/letsencrypt/boulder/redis"
sapb "github.com/letsencrypt/boulder/sa/proto"
salesforcepb "github.com/letsencrypt/boulder/salesforce/proto"
emailpb "github.com/letsencrypt/boulder/salesforce/email/proto"
"github.com/letsencrypt/boulder/sfe"
"github.com/letsencrypt/boulder/sfe/zendesk"
"github.com/letsencrypt/boulder/web"
Expand Down Expand Up @@ -156,11 +156,11 @@ func main() {
cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to SA")
sac := sapb.NewStorageAuthorityReadOnlyClient(saConn)

var eec salesforcepb.ExporterClient
var eec emailpb.ExporterClient
if c.SFE.EmailExporter != nil {
emailExporterConn, err := bgrpc.ClientSetup(c.SFE.EmailExporter, tlsConfig, stats, clk)
cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to email-exporter")
eec = salesforcepb.NewExporterClient(emailExporterConn)
eec = emailpb.NewExporterClient(emailExporterConn)
}

var zendeskClient *zendesk.Client
Expand Down
43 changes: 4 additions & 39 deletions mocks/emailexporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"google.golang.org/protobuf/types/known/emptypb"

"github.com/letsencrypt/boulder/salesforce"
salesforcepb "github.com/letsencrypt/boulder/salesforce/proto"
emailpb "github.com/letsencrypt/boulder/salesforce/email/proto"
)

var _ salesforce.SalesforceClient = (*MockSalesforceClientImpl)(nil)
Expand All @@ -18,7 +18,6 @@ var _ salesforce.SalesforceClient = (*MockSalesforceClientImpl)(nil)
type MockSalesforceClientImpl struct {
sync.Mutex
CreatedContacts []string
CreatedCases []salesforce.Case
}

// NewMockSalesforceClientImpl returns a MockSalesforceClientImpl, which implements
Expand Down Expand Up @@ -47,42 +46,23 @@ func (m *MockSalesforceClientImpl) GetCreatedContacts() []string {
return slices.Clone(m.CreatedContacts)
}

// SendCase adds a case payload to CreatedCases.
func (m *MockSalesforceClientImpl) SendCase(payload salesforce.Case) error {
m.Lock()
defer m.Unlock()

m.CreatedCases = append(m.CreatedCases, payload)
return nil
}

// GetCreatedCases is used for testing to retrieve the list of created cases in
// a thread-safe manner.
func (m *MockSalesforceClientImpl) GetCreatedCases() []salesforce.Case {
m.Lock()
defer m.Unlock()

// Return a copy to avoid race conditions.
return slices.Clone(m.CreatedCases)
}

var _ salesforcepb.ExporterClient = (*MockExporterClientImpl)(nil)
var _ emailpb.ExporterClient = (*MockExporterClientImpl)(nil)

// MockExporterClientImpl is a mock implementation of ExporterClient.
type MockExporterClientImpl struct {
SalesforceClient salesforce.SalesforceClient
}

// NewMockExporterImpl returns a MockExporterClientImpl as an ExporterClient.
func NewMockExporterImpl(salesforceClient salesforce.SalesforceClient) salesforcepb.ExporterClient {
func NewMockExporterImpl(salesforceClient salesforce.SalesforceClient) emailpb.ExporterClient {
return &MockExporterClientImpl{
SalesforceClient: salesforceClient,
}
}

// SendContacts submits emails to the inner salesforce.SalesforceClient, returning an
// error if any fail.
func (m *MockExporterClientImpl) SendContacts(ctx context.Context, req *salesforcepb.SendContactsRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) {
func (m *MockExporterClientImpl) SendContacts(ctx context.Context, req *emailpb.SendContactsRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) {
for _, e := range req.Emails {
err := m.SalesforceClient.SendContact(e)
if err != nil {
Expand All @@ -91,18 +71,3 @@ func (m *MockExporterClientImpl) SendContacts(ctx context.Context, req *salesfor
}
return &emptypb.Empty{}, nil
}

// SendCase submits a Case using the inner salesforce.SalesforceClient.
func (m *MockExporterClientImpl) SendCase(ctx context.Context, req *salesforcepb.SendCaseRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) {
return &emptypb.Empty{}, m.SalesforceClient.SendCase(salesforce.Case{
Origin: req.Origin,
Subject: req.Subject,
Description: req.Description,
ContactEmail: req.ContactEmail,
Organization: req.Organization,
AccountId: req.AccountId,
RateLimitName: req.RateLimitName,
RateLimitTier: req.RateLimitTier,
UseCase: req.UseCase,
})
}
Loading