forked from Silverfish/proton-bridge
GODT-1932: frontend is instantiated before bridge.
WIP: introduced frontend.Type. WIP: frontend is create before bridge is instantiated. WIP: filtering of internet stastus event in gRPC event queue.
This commit is contained in:
@ -90,7 +90,6 @@ func NewService(
|
||||
panicHandler types.PanicHandler,
|
||||
eventListener listener.Listener,
|
||||
updater types.Updater,
|
||||
bridge types.Bridger,
|
||||
restarter types.Restarter,
|
||||
locations *locations.Locations,
|
||||
) *Service {
|
||||
@ -99,7 +98,6 @@ func NewService(
|
||||
panicHandler: panicHandler,
|
||||
eventListener: eventListener,
|
||||
updater: updater,
|
||||
bridge: bridge,
|
||||
restarter: restarter,
|
||||
showOnStartup: showOnStartup,
|
||||
|
||||
@ -115,6 +113,15 @@ func NewService(
|
||||
// set to 1
|
||||
s.initializing.Add(1)
|
||||
|
||||
go func() {
|
||||
defer s.panicHandler.HandlePanic()
|
||||
s.watchEvents()
|
||||
}()
|
||||
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s *Service) startGRPCServer() {
|
||||
tlsConfig, pemCert, err := s.generateTLSConfig()
|
||||
if err != nil {
|
||||
s.log.WithError(err).Panic("could not generate gRPC TLS config")
|
||||
@ -122,10 +129,9 @@ func NewService(
|
||||
|
||||
s.pemCert = string(pemCert)
|
||||
|
||||
s.initAutostart()
|
||||
s.grpcServer = grpc.NewServer(grpc.Creds(credentials.NewTLS(tlsConfig)))
|
||||
|
||||
RegisterBridgeServer(s.grpcServer, &s)
|
||||
RegisterBridgeServer(s.grpcServer, s)
|
||||
|
||||
s.listener, err = net.Listen("tcp", "127.0.0.1:0") // Port 0 means that the port is randomly picked by the system.
|
||||
if err != nil {
|
||||
@ -137,8 +143,6 @@ func NewService(
|
||||
}
|
||||
|
||||
s.log.Info("gRPC server listening at ", s.listener.Addr())
|
||||
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s *Service) initAutostart() {
|
||||
@ -158,15 +162,18 @@ func (s *Service) initAutostart() {
|
||||
})
|
||||
}
|
||||
|
||||
func (s *Service) Loop() error {
|
||||
func (s *Service) Loop(b types.Bridger) error {
|
||||
s.bridge = b
|
||||
s.initAutostart()
|
||||
s.startGRPCServer()
|
||||
|
||||
defer func() {
|
||||
s.bridge.SetBool(settings.FirstStartGUIKey, false)
|
||||
}()
|
||||
|
||||
go func() {
|
||||
defer s.panicHandler.HandlePanic()
|
||||
s.watchEvents()
|
||||
}()
|
||||
if s.bridge.HasError(bridge.ErrLocalCacheUnavailable) {
|
||||
_ = s.SendEvent(NewCacheErrorEvent(CacheErrorType_CACHE_UNAVAILABLE_ERROR))
|
||||
}
|
||||
|
||||
err := s.grpcServer.Serve(s.listener)
|
||||
if err != nil {
|
||||
@ -203,10 +210,6 @@ func (s *Service) WaitUntilFrontendIsReady() {
|
||||
}
|
||||
|
||||
func (s *Service) watchEvents() { // nolint:funlen
|
||||
if s.bridge.HasError(bridge.ErrLocalCacheUnavailable) {
|
||||
_ = s.SendEvent(NewCacheErrorEvent(CacheErrorType_CACHE_UNAVAILABLE_ERROR))
|
||||
}
|
||||
|
||||
errorCh := s.eventListener.ProvideChannel(events.ErrorEvent)
|
||||
credentialsErrorCh := s.eventListener.ProvideChannel(events.CredentialsErrorEvent)
|
||||
noActiveKeyForRecipientCh := s.eventListener.ProvideChannel(events.NoActiveKeyForRecipientEvent)
|
||||
@ -258,6 +261,10 @@ func (s *Service) watchEvents() { // nolint:funlen
|
||||
case address := <-addressChangedLogoutCh:
|
||||
_ = s.SendEvent(NewMailAddressChangeLogoutEvent(address))
|
||||
case userID := <-logoutCh:
|
||||
if s.bridge == nil {
|
||||
logrus.Error("Received a logout event but bridge is not yet instantiated.")
|
||||
break
|
||||
}
|
||||
user, err := s.bridge.GetUserInfo(userID)
|
||||
if err != nil {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user