package public import ( "context" customermodel "git.sendico.io/tech/sxchnge/product/customers/model" sessionmodel "git.sendico.io/tech/sxchnge/product/sessions/model" "net/http" "git.sendico.io/tech/sxchnge/product/auth/response" rtokens "git.sendico.io/tech/sxchnge/product/sessions/tokens" "git.sendico.io/tech/sxchnge/shared/http/response" "git.sendico.io/tech/sxchnge/shared/logging/fields" "go.uber.org/zap" ) func (pr *PublicRouter) refreshAndRespondLogin( ctx context.Context, r *http.Request, session *sessionmodel.SessionIdentifier, account *customermodel.Account, ) http.HandlerFunc { refreshToken, err := rtokens.PrepareRefreshToken( ctx, r, pr.rtdb, pr.config.Length, pr.config.Expiration.Refresh, session, account, pr.logger, ) if err != nil { pr.logger.Warn("Failed to create refresh token", zap.Error(err), mzap.StorableRef(account), zap.String("client_id", session.ClientID), zap.String("device_id", session.DeviceID)) return response.Internal(pr.logger, pr.service, err) } accessToken, err := pr.imp.CreateAccessTokenForSession(account, refreshToken.SessionIdentifier) if err != nil { pr.logger.Warn("Failed to generate access token", zap.Error(err), mzap.StorableRef(account), zap.String("client_id", session.ClientID), zap.String("device_id", session.DeviceID)) return response.Internal(pr.logger, pr.service, err) } token := sresponse.TokenData{ Token: refreshToken.RefreshToken, Expiration: refreshToken.ExpiresAt, } return sresponse.Login(pr.logger, account, &accessToken, &token) }