Skip to content

Commit

Permalink
[pocketbase#282] fixed "real" user ip extraction
Browse files Browse the repository at this point in the history
  • Loading branch information
ganigeorgiev committed Aug 20, 2022
1 parent beb8e79 commit 07cd758
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 19 deletions.
6 changes: 3 additions & 3 deletions apis/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ func (api *adminApi) refresh(c echo.Context) error {
func (api *adminApi) emailAuth(c echo.Context) error {
form := forms.NewAdminLogin(api.app)
if readErr := c.Bind(form); readErr != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", readErr)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", readErr)
}

admin, submitErr := form.Submit()
Expand All @@ -80,7 +80,7 @@ func (api *adminApi) emailAuth(c echo.Context) error {
func (api *adminApi) requestPasswordReset(c echo.Context) error {
form := forms.NewAdminPasswordResetRequest(api.app)
if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", err)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", err)
}

if err := form.Validate(); err != nil {
Expand All @@ -101,7 +101,7 @@ func (api *adminApi) requestPasswordReset(c echo.Context) error {
func (api *adminApi) confirmPasswordReset(c echo.Context) error {
form := forms.NewAdminPasswordResetConfirm(api.app)
if readErr := c.Bind(form); readErr != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", readErr)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", readErr)
}

admin, submitErr := form.Submit()
Expand Down
18 changes: 10 additions & 8 deletions apis/middlewares.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,22 +304,24 @@ func ActivityLogger(app core.App) echo.MiddlewareFunc {

// Returns the "real" user IP from common proxy headers (or fallbackIp if none is found).
//
// The returned IP shouldn't be trusted if not behind a trusted reverse proxy!
// The returned IP value shouldn't be trusted if not behind a trusted reverse proxy!
func realUserIp(r *http.Request, fallbackIp string) string {
if ip := r.Header.Get("CF-Connecting-IP"); ip != "" {
return ip
}

if ip := r.Header.Get("X-Forwarded-For"); ip != "" {
// extract only the last IP
if i := strings.IndexAny(ip, ","); i > 0 {
return strings.TrimSpace(ip[:i])
}
if ip := r.Header.Get("X-Real-IP"); ip != "" {
return ip
}

if ip := r.Header.Get("X-Forwarded-For"); ip != "" {
return ip
if ipsList := r.Header.Get("X-Forwarded-For"); ipsList != "" {
ips := strings.Split(ipsList, ",")
// extract the rightmost ip
for _, ip := range ips {
if trimmedIp := strings.TrimSpace(ip); trimmedIp != "" {
return trimmedIp
}
}
}

return fallbackIp
Expand Down
16 changes: 8 additions & 8 deletions apis/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ func (api *userApi) authMethods(c echo.Context) error {
func (api *userApi) oauth2Auth(c echo.Context) error {
form := forms.NewUserOauth2Login(api.app)
if readErr := c.Bind(form); readErr != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", readErr)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", readErr)
}

user, authData, submitErr := form.Submit()
Expand All @@ -170,7 +170,7 @@ func (api *userApi) emailAuth(c echo.Context) error {

form := forms.NewUserEmailLogin(api.app)
if readErr := c.Bind(form); readErr != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", readErr)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", readErr)
}

user, submitErr := form.Submit()
Expand All @@ -184,7 +184,7 @@ func (api *userApi) emailAuth(c echo.Context) error {
func (api *userApi) requestPasswordReset(c echo.Context) error {
form := forms.NewUserPasswordResetRequest(api.app)
if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", err)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", err)
}

if err := form.Validate(); err != nil {
Expand All @@ -205,7 +205,7 @@ func (api *userApi) requestPasswordReset(c echo.Context) error {
func (api *userApi) confirmPasswordReset(c echo.Context) error {
form := forms.NewUserPasswordResetConfirm(api.app)
if readErr := c.Bind(form); readErr != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", readErr)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", readErr)
}

user, submitErr := form.Submit()
Expand All @@ -224,7 +224,7 @@ func (api *userApi) requestEmailChange(c echo.Context) error {

form := forms.NewUserEmailChangeRequest(api.app, loggedUser)
if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", err)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", err)
}

if err := form.Submit(); err != nil {
Expand All @@ -237,7 +237,7 @@ func (api *userApi) requestEmailChange(c echo.Context) error {
func (api *userApi) confirmEmailChange(c echo.Context) error {
form := forms.NewUserEmailChangeConfirm(api.app)
if readErr := c.Bind(form); readErr != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", readErr)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", readErr)
}

user, submitErr := form.Submit()
Expand All @@ -251,7 +251,7 @@ func (api *userApi) confirmEmailChange(c echo.Context) error {
func (api *userApi) requestVerification(c echo.Context) error {
form := forms.NewUserVerificationRequest(api.app)
if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", err)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", err)
}

if err := form.Validate(); err != nil {
Expand All @@ -272,7 +272,7 @@ func (api *userApi) requestVerification(c echo.Context) error {
func (api *userApi) confirmVerification(c echo.Context) error {
form := forms.NewUserVerificationConfirm(api.app)
if readErr := c.Bind(form); readErr != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", readErr)
return rest.NewBadRequestError("An error occurred while loading the submitted data.", readErr)
}

user, submitErr := form.Submit()
Expand Down

0 comments on commit 07cd758

Please sign in to comment.