Files
nhost/services/auth/go/controller/refresh_provider_token.go

41 lines
1.2 KiB
Go

package controller
import (
"context"
oapimw "github.com/nhost/nhost/internal/lib/oapi/middleware"
"github.com/nhost/nhost/services/auth/go/api"
"golang.org/x/oauth2"
)
func (ctrl *Controller) RefreshProviderToken( //nolint:ireturn
ctx context.Context, req api.RefreshProviderTokenRequestObject,
) (api.RefreshProviderTokenResponseObject, error) {
logger := oapimw.LoggerFromContext(ctx)
logger = logger.With("provider", req.Provider)
provider := ctrl.Providers.Get(string(req.Provider))
if provider == nil {
logger.ErrorContext(ctx, "provider not enabled")
return ctrl.sendError(ErrDisabledEndpoint), nil
}
if !provider.IsOauth2() {
logger.ErrorContext(ctx, "provider does not support OAuth2")
return ctrl.sendError(ErrOauthProviderError), nil
}
token, err := provider.Oauth2().Exchange(
ctx,
"",
oauth2.SetAuthURLParam("grant_type", "refresh_token"),
oauth2.SetAuthURLParam("refresh_token", req.Body.RefreshToken),
)
if err != nil {
logger.ErrorContext(ctx, "failed to exchange code for token", "error", err)
return ctrl.sendError(ErrOauthProviderError), nil
}
return api.RefreshProviderToken200JSONResponse(tokenToProviderSession(token)), nil
}