mirror of
https://github.com/zitadel/zitadel.git
synced 2025-04-24 08:01:33 +00:00
58 lines
1.8 KiB
Go
58 lines
1.8 KiB
Go
package login
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/zitadel/logging"
|
|
|
|
http_mw "github.com/zitadel/zitadel/internal/api/http/middleware"
|
|
"github.com/zitadel/zitadel/internal/domain"
|
|
)
|
|
|
|
const (
|
|
QueryAuthRequestID = "authRequestID"
|
|
queryUserAgentID = "userAgentID"
|
|
)
|
|
|
|
func (l *Login) getAuthRequest(r *http.Request) (*domain.AuthRequest, error) {
|
|
authRequestID := r.FormValue(QueryAuthRequestID)
|
|
if authRequestID == "" {
|
|
return nil, nil
|
|
}
|
|
userAgentID, _ := http_mw.UserAgentIDFromCtx(r.Context())
|
|
return l.authRepo.AuthRequestByID(r.Context(), authRequestID, userAgentID)
|
|
}
|
|
|
|
func (l *Login) getAuthRequestAndParseData(r *http.Request, data interface{}) (*domain.AuthRequest, error) {
|
|
authReq, err := l.getAuthRequest(r)
|
|
if err != nil {
|
|
return authReq, err
|
|
}
|
|
err = l.parser.Parse(r, data)
|
|
return authReq, err
|
|
}
|
|
|
|
func (l *Login) getParseData(r *http.Request, data interface{}) error {
|
|
return l.parser.Parse(r, data)
|
|
}
|
|
|
|
// checkOptionalAuthRequestOfEmailLinks tries to get the [domain.AuthRequest] from the request.
|
|
// In case any error occurs, e.g. if the user agent does not correspond, the `authRequestID` query parameter will be
|
|
// removed from the request URL and form to ensure subsequent functions and pages do not use it.
|
|
// This function is used for handling links in emails, which could possibly be opened on another device than the
|
|
// auth request was initiated.
|
|
func (l *Login) checkOptionalAuthRequestOfEmailLinks(r *http.Request) *domain.AuthRequest {
|
|
authReq, err := l.getAuthRequest(r)
|
|
if err == nil {
|
|
return authReq
|
|
}
|
|
logging.WithError(err).Infof("authrequest could not be found for email link on path %s", r.URL.RequestURI())
|
|
queries := r.URL.Query()
|
|
queries.Del(QueryAuthRequestID)
|
|
r.URL.RawQuery = queries.Encode()
|
|
r.RequestURI = r.URL.RequestURI()
|
|
r.Form.Del(QueryAuthRequestID)
|
|
r.PostForm.Del(QueryAuthRequestID)
|
|
return nil
|
|
}
|