@@ -26,6 +26,7 @@ import (
2626 "github.com/pkg/errors"
2727 log "github.com/sirupsen/logrus"
2828
29+ "github.com/mendersoftware/mender/app/proxy"
2930 "github.com/mendersoftware/mender/client"
3031 "github.com/mendersoftware/mender/conf"
3132 "github.com/mendersoftware/mender/datastore"
@@ -144,6 +145,8 @@ type menderAuthManagerService struct {
144145 idSrc device.IdentityDataGetter
145146 serverURL string
146147 tenantToken client.AuthToken
148+
149+ localProxy * proxy.ProxyController
147150}
148151
149152// AuthManagerConfig holds the configuration of the auth manager
@@ -162,13 +165,15 @@ func NewAuthManager(conf AuthManagerConfig) *MenderAuthManager {
162165 return nil
163166 }
164167
165- var api * client.ApiClient
168+ httpConfig := client.Config {}
166169 if conf .Config != nil {
167- var err error
168- api , err = client .New (conf .Config .GetHttpConfig ())
169- if err != nil {
170- return nil
171- }
170+ httpConfig = conf .Config .GetHttpConfig ()
171+
172+ }
173+
174+ api , err := client .New (httpConfig )
175+ if err != nil {
176+ return nil
172177 }
173178
174179 // get the first server URL available in the config file
@@ -192,6 +197,16 @@ func NewAuthManager(conf AuthManagerConfig) *MenderAuthManager {
192197 log .Errorf ("Error handling the caching of the tenant token: %s" , err .Error ())
193198 }
194199
200+ wsDialer , err := client .NewWebsocketDialer (httpConfig )
201+ if err != nil {
202+ return nil
203+ }
204+
205+ proxy , err := proxy .NewProxyController (api , wsDialer , "" , "" )
206+ if err != nil {
207+ log .Errorf ("Error creating local proxy: %s" , err .Error ())
208+ }
209+
195210 mgr := & MenderAuthManager {
196211 & menderAuthManagerService {
197212 inChan : make (chan AuthManagerRequest , authManagerInMessageChanSize ),
@@ -207,6 +222,7 @@ func NewAuthManager(conf AuthManagerConfig) *MenderAuthManager {
207222 idSrc : conf .IdentitySource ,
208223 tenantToken : tenantToken ,
209224 serverURL : serverURL ,
225+ localProxy : proxy ,
210226 },
211227 }
212228
@@ -310,7 +326,7 @@ func (m *menderAuthManagerService) registerDBusCallbacks() (unregisterFunc func(
310326 case message := <- respChan :
311327 tokenAndServerURL := dbus.TokenAndServerURL {
312328 Token : string (message .AuthToken ),
313- ServerURL : m .serverURL ,
329+ ServerURL : m .localProxy . GetServerUrl () ,
314330 }
315331 return tokenAndServerURL , message .Error
316332 case <- time .After (5 * time .Second ):
@@ -370,7 +386,7 @@ func (m *menderAuthManagerService) run() {
370386 // When we are being stopped, make sure they know that this happened.
371387 defer func () {
372388 // Checking for panic here is just to avoid deadlocking if we
373- // get an unexpected panic: Let it propogate instead of blocking
389+ // get an unexpected panic: Let it propagate instead of blocking
374390 // on the channel. If the program is correct, this should never
375391 // be non-nil.
376392 if recover () == nil {
@@ -487,6 +503,8 @@ func (m *MenderAuthManager) Stop() {
487503 <- m .menderAuthManagerService .quitResp
488504 m .menderAuthManagerService .hasStarted = false
489505
506+ m .localProxy .Stop ()
507+
490508 runtime .SetFinalizer (m , nil )
491509}
492510
@@ -516,7 +534,7 @@ func (m *menderAuthManagerService) broadcast(message AuthManagerResponse) {
516534 if m .dbus != nil {
517535 tokenAndServerURL := dbus.TokenAndServerURL {
518536 Token : string (message .AuthToken ),
519- ServerURL : m .serverURL ,
537+ ServerURL : m .localProxy . GetServerUrl () ,
520538 }
521539 _ = m .dbus .EmitSignal (m .dbusConn , "" , AuthManagerDBusPath ,
522540 AuthManagerDBusInterfaceName , AuthManagerDBusSignalJwtTokenStateChange ,
@@ -527,7 +545,26 @@ func (m *menderAuthManagerService) broadcast(message AuthManagerResponse) {
527545// broadcastAuthTokenStateChange broadcasts the notification to all the subscribers
528546func (m * menderAuthManagerService ) broadcastAuthTokenStateChange () {
529547 authToken , err := m .authToken ()
548+
549+ // stop proxy regardless
550+ m .localProxy .Stop ()
530551 if err == nil {
552+ // reconfigure proxy
553+ err = m .localProxy .Reconfigure (m .serverURL , string (authToken ))
554+ if err != nil {
555+ log .Errorf (
556+ "Could not reconfigure proxy with URL %q and token '%s...'" +
557+ " Other applications running on the device won't be able" +
558+ " to reach the Mender server. Error: %s" ,
559+ m .serverURL ,
560+ string (authToken )[:7 ],
561+ err .Error (),
562+ )
563+ } else {
564+ m .localProxy .Start ()
565+
566+ }
567+
531568 m .broadcast (AuthManagerResponse {
532569 Event : EventAuthTokenStateChange ,
533570 AuthToken : authToken ,
0 commit comments