fix(auth): correct antigravity oauth redirect and expiry

This commit is contained in:
hkfires
2026-01-24 07:36:52 +08:00
parent 8c0eaa1f71
commit f3d58fa0ce
3 changed files with 20 additions and 16 deletions

View File

@@ -1398,7 +1398,7 @@ func (h *Handler) RequestAntigravityToken(c *gin.Context) {
fmt.Println("Initializing Antigravity authentication...") fmt.Println("Initializing Antigravity authentication...")
authSvc := antigravity.NewAntigravityAuth(h.cfg) authSvc := antigravity.NewAntigravityAuth(h.cfg, nil)
state, errState := misc.GenerateRandomState() state, errState := misc.GenerateRandomState()
if errState != nil { if errState != nil {
@@ -1408,9 +1408,7 @@ func (h *Handler) RequestAntigravityToken(c *gin.Context) {
} }
redirectURI := fmt.Sprintf("http://localhost:%d/oauth-callback", antigravity.CallbackPort) redirectURI := fmt.Sprintf("http://localhost:%d/oauth-callback", antigravity.CallbackPort)
authURL := authSvc.BuildAuthURL(state) authURL := authSvc.BuildAuthURL(state, redirectURI)
// Override redirect URI if needed (BuildAuthURL hardcodes it)
authURL = strings.ReplaceAll(authURL, fmt.Sprintf("http://localhost:%d/oauth-callback", antigravity.CallbackPort), redirectURI)
RegisterOAuthSession(state, "antigravity") RegisterOAuthSession(state, "antigravity")

View File

@@ -20,7 +20,7 @@ import (
type TokenResponse struct { type TokenResponse struct {
AccessToken string `json:"access_token"` AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"` RefreshToken string `json:"refresh_token"`
ExpiresIn int64 `json:"expires_token"` ExpiresIn int64 `json:"expires_in"`
TokenType string `json:"token_type"` TokenType string `json:"token_type"`
} }
@@ -34,20 +34,29 @@ type AntigravityAuth struct {
httpClient *http.Client httpClient *http.Client
} }
// NewAntigravityAuth creates a new Antigravity auth service // NewAntigravityAuth creates a new Antigravity auth service.
func NewAntigravityAuth(cfg *config.Config) *AntigravityAuth { func NewAntigravityAuth(cfg *config.Config, httpClient *http.Client) *AntigravityAuth {
if httpClient != nil {
return &AntigravityAuth{httpClient: httpClient}
}
if cfg == nil {
cfg = &config.Config{}
}
return &AntigravityAuth{ return &AntigravityAuth{
httpClient: util.SetProxy(&cfg.SDKConfig, &http.Client{}), httpClient: util.SetProxy(&cfg.SDKConfig, &http.Client{}),
} }
} }
// BuildAuthURL generates the OAuth authorization URL // BuildAuthURL generates the OAuth authorization URL.
func (o *AntigravityAuth) BuildAuthURL(state string) string { func (o *AntigravityAuth) BuildAuthURL(state, redirectURI string) string {
if strings.TrimSpace(redirectURI) == "" {
redirectURI = fmt.Sprintf("http://localhost:%d/oauth-callback", CallbackPort)
}
params := url.Values{} params := url.Values{}
params.Set("access_type", "offline") params.Set("access_type", "offline")
params.Set("client_id", ClientID) params.Set("client_id", ClientID)
params.Set("prompt", "consent") params.Set("prompt", "consent")
params.Set("redirect_uri", fmt.Sprintf("http://localhost:%d/oauth-callback", CallbackPort)) params.Set("redirect_uri", redirectURI)
params.Set("response_type", "code") params.Set("response_type", "code")
params.Set("scope", strings.Join(Scopes, " ")) params.Set("scope", strings.Join(Scopes, " "))
params.Set("state", state) params.Set("state", state)

View File

@@ -49,7 +49,7 @@ func (AntigravityAuthenticator) Login(ctx context.Context, cfg *config.Config, o
callbackPort = opts.CallbackPort callbackPort = opts.CallbackPort
} }
authSvc := antigravity.NewAntigravityAuth(cfg) authSvc := antigravity.NewAntigravityAuth(cfg, nil)
state, err := misc.GenerateRandomState() state, err := misc.GenerateRandomState()
if err != nil { if err != nil {
@@ -67,9 +67,7 @@ func (AntigravityAuthenticator) Login(ctx context.Context, cfg *config.Config, o
}() }()
redirectURI := fmt.Sprintf("http://localhost:%d/oauth-callback", port) redirectURI := fmt.Sprintf("http://localhost:%d/oauth-callback", port)
authURL := authSvc.BuildAuthURL(state) authURL := authSvc.BuildAuthURL(state, redirectURI)
// Override redirect URI in authURL
authURL = strings.ReplaceAll(authURL, fmt.Sprintf("http://localhost:%d/oauth-callback", antigravity.CallbackPort), redirectURI)
if !opts.NoBrowser { if !opts.NoBrowser {
fmt.Println("Opening browser for antigravity authentication") fmt.Println("Opening browser for antigravity authentication")
@@ -256,7 +254,6 @@ func startAntigravityCallbackServer(port int) (*http.Server, int, <-chan callbac
// FetchAntigravityProjectID exposes project discovery for external callers. // FetchAntigravityProjectID exposes project discovery for external callers.
func FetchAntigravityProjectID(ctx context.Context, accessToken string, httpClient *http.Client) (string, error) { func FetchAntigravityProjectID(ctx context.Context, accessToken string, httpClient *http.Client) (string, error) {
cfg := &config.Config{} cfg := &config.Config{}
// Set the httpClient if provided (for proxy support) authSvc := antigravity.NewAntigravityAuth(cfg, httpClient)
authSvc := antigravity.NewAntigravityAuth(cfg)
return authSvc.FetchProjectID(ctx, accessToken) return authSvc.FetchProjectID(ctx, accessToken)
} }