forked from Silverfish/proton-bridge
feat(BRIDGE-75): Bridge repair button/feature implemented
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -111,6 +111,9 @@ service Bridge {
|
||||
// Server -> Client event stream
|
||||
rpc RunEventStream(EventStreamRequest) returns (stream StreamEvent); // Keep streaming until StopEventStream is called.
|
||||
rpc StopEventStream(google.protobuf.Empty) returns (google.protobuf.Empty);
|
||||
|
||||
// Repair
|
||||
rpc TriggerRepair(google.protobuf.Empty) returns (google.protobuf.Empty);
|
||||
}
|
||||
|
||||
//**********************************************************************************************************************
|
||||
@ -272,6 +275,8 @@ message AppEvent {
|
||||
CertificateInstallCanceledEvent certificateInstallCanceled = 10;
|
||||
CertificateInstallFailedEvent certificateInstallFailed = 11;
|
||||
KnowledgeBaseSuggestionsEvent knowledgeBaseSuggestions = 12;
|
||||
RepairStartedEvent repairStarted = 13;
|
||||
AllUsersLoadedEvent allUsersLoaded = 14;
|
||||
}
|
||||
}
|
||||
|
||||
@ -289,6 +294,8 @@ message ReportBugFallbackEvent {}
|
||||
message CertificateInstallSuccessEvent {}
|
||||
message CertificateInstallCanceledEvent {}
|
||||
message CertificateInstallFailedEvent {}
|
||||
message RepairStartedEvent {}
|
||||
message AllUsersLoadedEvent {}
|
||||
|
||||
message KnowledgeBaseSuggestion {
|
||||
string url = 1;
|
||||
|
||||
@ -101,6 +101,7 @@ const (
|
||||
Bridge_ExportTLSCertificates_FullMethodName = "/grpc.Bridge/ExportTLSCertificates"
|
||||
Bridge_RunEventStream_FullMethodName = "/grpc.Bridge/RunEventStream"
|
||||
Bridge_StopEventStream_FullMethodName = "/grpc.Bridge/StopEventStream"
|
||||
Bridge_TriggerRepair_FullMethodName = "/grpc.Bridge/TriggerRepair"
|
||||
)
|
||||
|
||||
// BridgeClient is the client API for Bridge service.
|
||||
@ -180,6 +181,8 @@ type BridgeClient interface {
|
||||
// Server -> Client event stream
|
||||
RunEventStream(ctx context.Context, in *EventStreamRequest, opts ...grpc.CallOption) (Bridge_RunEventStreamClient, error)
|
||||
StopEventStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
// Repair
|
||||
TriggerRepair(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
}
|
||||
|
||||
type bridgeClient struct {
|
||||
@ -780,6 +783,15 @@ func (c *bridgeClient) StopEventStream(ctx context.Context, in *emptypb.Empty, o
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *bridgeClient) TriggerRepair(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
||||
out := new(emptypb.Empty)
|
||||
err := c.cc.Invoke(ctx, Bridge_TriggerRepair_FullMethodName, in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// BridgeServer is the server API for Bridge service.
|
||||
// All implementations must embed UnimplementedBridgeServer
|
||||
// for forward compatibility
|
||||
@ -857,6 +869,8 @@ type BridgeServer interface {
|
||||
// Server -> Client event stream
|
||||
RunEventStream(*EventStreamRequest, Bridge_RunEventStreamServer) error
|
||||
StopEventStream(context.Context, *emptypb.Empty) (*emptypb.Empty, error)
|
||||
// Repair
|
||||
TriggerRepair(context.Context, *emptypb.Empty) (*emptypb.Empty, error)
|
||||
mustEmbedUnimplementedBridgeServer()
|
||||
}
|
||||
|
||||
@ -1053,6 +1067,9 @@ func (UnimplementedBridgeServer) RunEventStream(*EventStreamRequest, Bridge_RunE
|
||||
func (UnimplementedBridgeServer) StopEventStream(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method StopEventStream not implemented")
|
||||
}
|
||||
func (UnimplementedBridgeServer) TriggerRepair(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method TriggerRepair not implemented")
|
||||
}
|
||||
func (UnimplementedBridgeServer) mustEmbedUnimplementedBridgeServer() {}
|
||||
|
||||
// UnsafeBridgeServer may be embedded to opt out of forward compatibility for this service.
|
||||
@ -2203,6 +2220,24 @@ func _Bridge_StopEventStream_Handler(srv interface{}, ctx context.Context, dec f
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bridge_TriggerRepair_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(emptypb.Empty)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(BridgeServer).TriggerRepair(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: Bridge_TriggerRepair_FullMethodName,
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(BridgeServer).TriggerRepair(ctx, req.(*emptypb.Empty))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// Bridge_ServiceDesc is the grpc.ServiceDesc for Bridge service.
|
||||
// It's only intended for direct use with grpc.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
@ -2458,6 +2493,10 @@ var Bridge_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "StopEventStream",
|
||||
Handler: _Bridge_StopEventStream_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "TriggerRepair",
|
||||
Handler: _Bridge_TriggerRepair_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{
|
||||
{
|
||||
|
||||
@ -241,6 +241,14 @@ func NewGenericErrorEvent(errorCode ErrorCode) *StreamEvent {
|
||||
return genericErrorEvent(&GenericErrorEvent{Code: errorCode})
|
||||
}
|
||||
|
||||
func NewRepairStartedEvent() *StreamEvent {
|
||||
return appEvent(&AppEvent{Event: &AppEvent_RepairStarted{RepairStarted: &RepairStartedEvent{}}})
|
||||
}
|
||||
|
||||
func NewAllUsersLoadedEvent() *StreamEvent {
|
||||
return appEvent(&AppEvent{Event: &AppEvent_AllUsersLoaded{AllUsersLoaded: &AllUsersLoadedEvent{}}})
|
||||
}
|
||||
|
||||
// Event category factory functions.
|
||||
|
||||
func appEvent(appEvent *AppEvent) *StreamEvent {
|
||||
|
||||
@ -401,6 +401,9 @@ func (s *Service) watchEvents() {
|
||||
|
||||
case events.TLSIssue:
|
||||
_ = s.SendEvent(NewMailApiCertIssue())
|
||||
|
||||
case events.AllUsersLoaded:
|
||||
_ = s.SendEvent(NewAllUsersLoadedEvent())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -838,6 +838,20 @@ func (s *Service) CurrentKeychain(_ context.Context, _ *emptypb.Empty) (*wrapper
|
||||
return wrapperspb.String(helper), nil
|
||||
}
|
||||
|
||||
func (s *Service) TriggerRepair(_ context.Context, _ *emptypb.Empty) (*emptypb.Empty, error) {
|
||||
s.log.Debug("TriggerRepair")
|
||||
go func() {
|
||||
defer func() {
|
||||
async.HandlePanic(s.panicHandler)
|
||||
_ = s.SendEvent(NewRepairStartedEvent())
|
||||
}()
|
||||
|
||||
s.bridge.Repair()
|
||||
}()
|
||||
|
||||
return &emptypb.Empty{}, nil
|
||||
}
|
||||
|
||||
func base64Decode(in []byte) ([]byte, error) {
|
||||
out := make([]byte, base64.StdEncoding.DecodedLen(len(in)))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user