mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-18 20:30:51 +08:00
refactor(login): enhance project ID normalization and onboarding logic
- Introduced `trimmedRequest` for consistent project ID trimming. - Improved handling of project ID retrieval from Gemini onboarding responses. - Added safeguards to maintain the requested project ID when discrepancies occur.
This commit is contained in:
@@ -154,11 +154,14 @@ func performGeminiCLISetup(ctx context.Context, httpClient *http.Client, storage
|
|||||||
"pluginType": "GEMINI",
|
"pluginType": "GEMINI",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trimmedRequest := strings.TrimSpace(requestedProject)
|
||||||
|
explicitProject := trimmedRequest != ""
|
||||||
|
|
||||||
loadReqBody := map[string]any{
|
loadReqBody := map[string]any{
|
||||||
"metadata": metadata,
|
"metadata": metadata,
|
||||||
}
|
}
|
||||||
if requestedProject != "" {
|
if explicitProject {
|
||||||
loadReqBody["cloudaicompanionProject"] = requestedProject
|
loadReqBody["cloudaicompanionProject"] = trimmedRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
var loadResp map[string]any
|
var loadResp map[string]any
|
||||||
@@ -182,11 +185,18 @@ func performGeminiCLISetup(ctx context.Context, httpClient *http.Client, storage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
projectID := strings.TrimSpace(requestedProject)
|
projectID := trimmedRequest
|
||||||
if projectID == "" {
|
if projectID == "" {
|
||||||
if id, okProject := loadResp["cloudaicompanionProject"].(string); okProject {
|
if id, okProject := loadResp["cloudaicompanionProject"].(string); okProject {
|
||||||
projectID = strings.TrimSpace(id)
|
projectID = strings.TrimSpace(id)
|
||||||
}
|
}
|
||||||
|
if projectID == "" {
|
||||||
|
if projectMap, okProject := loadResp["cloudaicompanionProject"].(map[string]any); okProject {
|
||||||
|
if id, okID := projectMap["id"].(string); okID {
|
||||||
|
projectID = strings.TrimSpace(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if projectID == "" {
|
if projectID == "" {
|
||||||
return &projectSelectionRequiredError{}
|
return &projectSelectionRequiredError{}
|
||||||
@@ -208,16 +218,30 @@ func performGeminiCLISetup(ctx context.Context, httpClient *http.Client, storage
|
|||||||
}
|
}
|
||||||
|
|
||||||
if done, okDone := onboardResp["done"].(bool); okDone && done {
|
if done, okDone := onboardResp["done"].(bool); okDone && done {
|
||||||
|
responseProjectID := ""
|
||||||
if resp, okResp := onboardResp["response"].(map[string]any); okResp {
|
if resp, okResp := onboardResp["response"].(map[string]any); okResp {
|
||||||
if project, okProject := resp["cloudaicompanionProject"].(map[string]any); okProject {
|
switch projectValue := resp["cloudaicompanionProject"].(type) {
|
||||||
if id, okID := project["id"].(string); okID && strings.TrimSpace(id) != "" {
|
case map[string]any:
|
||||||
storage.ProjectID = strings.TrimSpace(id)
|
if id, okID := projectValue["id"].(string); okID {
|
||||||
|
responseProjectID = strings.TrimSpace(id)
|
||||||
|
}
|
||||||
|
case string:
|
||||||
|
responseProjectID = strings.TrimSpace(projectValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
finalProjectID := projectID
|
||||||
|
if responseProjectID != "" {
|
||||||
|
if explicitProject && !strings.EqualFold(responseProjectID, projectID) {
|
||||||
|
log.Warnf("Gemini onboarding returned project %s instead of requested %s; keeping requested project ID.", responseProjectID, projectID)
|
||||||
|
} else {
|
||||||
|
finalProjectID = responseProjectID
|
||||||
}
|
}
|
||||||
storage.ProjectID = strings.TrimSpace(storage.ProjectID)
|
}
|
||||||
|
|
||||||
|
storage.ProjectID = strings.TrimSpace(finalProjectID)
|
||||||
if storage.ProjectID == "" {
|
if storage.ProjectID == "" {
|
||||||
storage.ProjectID = projectID
|
storage.ProjectID = strings.TrimSpace(projectID)
|
||||||
}
|
}
|
||||||
if storage.ProjectID == "" {
|
if storage.ProjectID == "" {
|
||||||
return fmt.Errorf("onboard user completed without project id")
|
return fmt.Errorf("onboard user completed without project id")
|
||||||
|
|||||||
Reference in New Issue
Block a user