Skip to content

Commit c636e1b

Browse files
committed
compatible cookie of region/prject loss
1 parent f9137ce commit c636e1b

2 files changed

Lines changed: 76 additions & 6 deletions

File tree

base/config.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -400,14 +400,33 @@ func NewInCloudShell() (*AggConfigManager, error) {
400400
regionKey := fmt.Sprintf("c_last_region_%s", email)
401401
var proj project
402402
var reg region
403-
err = json.Unmarshal([]byte(tokenMap[projectKey]), &proj)
404-
if err != nil {
405-
return nil, err
403+
if _, ok := tokenMap[projectKey]; ok {
404+
err = json.Unmarshal([]byte(tokenMap[projectKey]), &proj)
405+
if err != nil {
406+
return nil, err
407+
}
408+
} else {
409+
id, name, err := getDefaultProject(cookie, tokenMap["CSRF_TOKEN"])
410+
if err != nil {
411+
return nil, fmt.Errorf("query default project error: %w", err)
412+
}
413+
proj.ProjectId = id
414+
proj.ProjectName = name
406415
}
407-
err = json.Unmarshal([]byte(tokenMap[regionKey]), &reg)
408-
if err != nil {
409-
return nil, err
416+
if _, ok := tokenMap[regionKey]; ok {
417+
err = json.Unmarshal([]byte(tokenMap[regionKey]), &reg)
418+
if err != nil {
419+
return nil, err
420+
}
421+
} else {
422+
region, zone, err := getDefaultRegion(cookie, tokenMap["CSRF_TOKEN"])
423+
if err != nil {
424+
return nil, fmt.Errorf("query default region error: %w", err)
425+
}
426+
reg.Region = region
427+
reg.Zone = zone
410428
}
429+
411430
ac := &AggConfig{
412431
Cookie: cookie,
413432
Profile: DefaultProfile,

base/util.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,3 +648,54 @@ func curGoroutineID() int64 {
648648

649649
return int64(id)
650650
}
651+
652+
func getDefaultRegion(cookie, csrfToken string) (string, string, error) {
653+
cfg := &AggConfig{
654+
Cookie: cookie,
655+
BaseURL: DefaultBaseURL,
656+
CSRFToken: csrfToken,
657+
Timeout: DefaultTimeoutSec,
658+
MaxRetryTimes: sdk.Int(DefaultMaxRetryTimes),
659+
}
660+
bc, err := GetBizClient(cfg)
661+
req := bc.NewGetRegionRequest()
662+
if err != nil {
663+
return "", "", err
664+
}
665+
resp, err := bc.GetRegion(req)
666+
if err != nil {
667+
return "", "", err
668+
}
669+
for _, r := range resp.Regions {
670+
if r.IsDefault {
671+
return r.Region, r.Zone, nil
672+
}
673+
}
674+
return "", "", fmt.Errorf("default region not found")
675+
}
676+
677+
func getDefaultProject(cookie, csrfToken string) (string, string, error) {
678+
cfg := &AggConfig{
679+
Cookie: cookie,
680+
BaseURL: DefaultBaseURL,
681+
CSRFToken: csrfToken,
682+
Timeout: DefaultTimeoutSec,
683+
MaxRetryTimes: sdk.Int(DefaultMaxRetryTimes),
684+
}
685+
bc, err := GetBizClient(cfg)
686+
if err != nil {
687+
return "", "", err
688+
}
689+
690+
req := bc.NewGetProjectListRequest()
691+
resp, err := bc.GetProjectList(req)
692+
if err != nil {
693+
return "", "", err
694+
}
695+
for _, project := range resp.ProjectSet {
696+
if project.IsDefault == true {
697+
return project.ProjectId, project.ProjectName, nil
698+
}
699+
}
700+
return "", "", fmt.Errorf("default project not found")
701+
}

0 commit comments

Comments
 (0)