Skip to content

Commit 7b45ea2

Browse files
committed
ipn/yegor: new keys force init on every update
1 parent aa4974f commit 7b45ea2

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

intra/ipn/rpn/yegor.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ const (
3636
// didTokenHeader is the HTTP response/request header for a device-id token
3737
// issued by svchost / svchosttest. Format: "a hextoken:expiryepochsec".
3838
didTokenHeader = "x-rethink-app-did-token"
39+
40+
// alwaysInitOnUpdate always runs the /WgConfigs/init + /WgConfigs/connect flow on every config update,
41+
// even if the server list didn't change.
42+
alwaysInitOnUpdate = true
3943
)
4044

4145
const (
@@ -1418,7 +1422,7 @@ func getServerList(h *http.Client, sess *WsSession, ent *WsEntitlement) (*WsServ
14181422
return wsRes(locres, &wsServerList, "wgconfs")
14191423
}
14201424

1421-
func genWgConfs(h *http.Client, existingCreds *WsWgCreds, sess *WsSession, servers []WsServerList, ent *WsEntitlement) (*WsWgCreds, []*RegionalWgConf, error) {
1425+
func genWgConfs(h *http.Client, existingCreds *WsWgCreds, sess *WsSession, servers []WsServerList, ent *WsEntitlement, forceInit bool) (*WsWgCreds, []*RegionalWgConf, error) {
14221426
if sess == nil || ent == nil {
14231427
return nil, nil, errWsNoSession
14241428
}
@@ -1441,7 +1445,7 @@ func genWgConfs(h *http.Client, existingCreds *WsWgCreds, sess *WsSession, serve
14411445
runkey := 0
14421446
keyed := 0
14431447
keyagain:
1444-
useExistingCreds := existingCreds != nil && keyed == 0
1448+
useExistingCreds := existingCreds != nil && keyed == 0 && !forceInit
14451449
runkey += 1
14461450

14471451
var priv x.WgKey
@@ -1618,7 +1622,7 @@ initagain:
16181622
return nil, nil, log.EE("ws: wgconfs: (test? %t) no regions found %s; %v", test, details, err)
16191623
}
16201624

1621-
log.I("ws: wgconfs: (test? %t / tok? %s) found %d regions %s", test, tokst, len(regconfs), details)
1625+
log.I("ws: wgconfs: ok (test? %t / tok? %s) found %d regions %s", test, tokst, len(regconfs), details)
16221626
return creds, regconfs, nil
16231627
}
16241628

@@ -1694,7 +1698,7 @@ func makeWsWg(h *http.Client, ent *WsEntitlement) (*WsClient, error) {
16941698
return nil, err
16951699
}
16961700

1697-
creds, wgconfs, err := genWgConfs(h, nil, sess, servers.Data, ent)
1701+
creds, wgconfs, err := genWgConfs(h, nil, sess, servers.Data, ent, false /*force update*/)
16981702
if err != nil {
16991703
return nil, err
17001704
}
@@ -1763,7 +1767,7 @@ func (w *BaseClient) makeWsWgFrom(existingConf *WsWgConfig) (*WsClient, error) {
17631767
return ws, err
17641768
}
17651769

1766-
func makeWsWgFrom(h *http.Client, existingConf *WsWgConfig, errOnNoUpdate bool) (ws *WsClient, refreshedSess bool, err error) {
1770+
func makeWsWgFrom(h *http.Client, existingConf *WsWgConfig, performingUpdate bool) (ws *WsClient, refreshedSess bool, err error) {
17671771
existingEnt := existingConf.Entitlement
17681772
if existingEnt == nil || len(existingEnt.SessionToken) <= 0 {
17691773
err = errWsNoEntitlement
@@ -1795,7 +1799,7 @@ func makeWsWgFrom(h *http.Client, existingConf *WsWgConfig, errOnNoUpdate bool)
17951799
} else {
17961800
log.W("ws: make: get session err: %v; using existing; tok? %s", err, tokst)
17971801
newSess = existingConf.Session // use existing session
1798-
if errOnNoUpdate {
1802+
if performingUpdate {
17991803
return nil, refreshedSess, err
18001804
}
18011805
}
@@ -1828,17 +1832,23 @@ func makeWsWgFrom(h *http.Client, existingConf *WsWgConfig, errOnNoUpdate bool)
18281832
}
18291833
}
18301834

1835+
// performingUpdate is set for "Update" calls only; that is, when remote api call fails to
1836+
// either init or init+connect, we can safely errors out on the "Update";
1837+
// if setup to always init+connect, then forceInit to true iff performingUpdate is also set.
1838+
forceInit := alwaysInitOnUpdate && performingUpdate
18311839
// create wg confs from new or existing server list
18321840
// always reconfigure (as /WgConfigs/connect must be done once every wg_ttl, which is 60m)
1833-
maybeNewCreds, maybeNewWgConfs, uerr := genWgConfs(h, existingCreds, newSess, maybeNewServers, existingConf.Entitlement)
1841+
maybeNewCreds, maybeNewWgConfs, uerr := genWgConfs(h, existingCreds, newSess, maybeNewServers, existingConf.Entitlement, forceInit)
18341842
loge(uerr)("ws: make: gen wg confs; tok? %s; downloadloc? %t / hasnewloc? %t len (%d/%d); err? %v",
18351843
tokst, downloadServerList, hasnew, len(existingServers), len(maybeNewServers), uerr)
18361844

18371845
if uerr == nil {
18381846
existingConf.Servers = maybeNewServers
18391847
existingConf.Configs = maybeNewWgConfs
18401848
existingConf.Creds = maybeNewCreds
1841-
} else if errOnNoUpdate {
1849+
} else if performingUpdate {
1850+
// error out early as this was meant to create an update config for later use
1851+
// but it itself is not the currently active config aka "existingConf"
18421852
return nil, refreshedSess, uerr
18431853
}
18441854
} else {

0 commit comments

Comments
 (0)