diff --git a/docs/content/doc/usage/errors.md b/docs/content/doc/usage/errors.md index a825000fc..5c03255ea 100644 --- a/docs/content/doc/usage/errors.md +++ b/docs/content/doc/usage/errors.md @@ -162,7 +162,8 @@ This document describes the different errors Vikunja can return. ## Link Shares -| ErrorCode | HTTP Status Code | Description | -|-----------|------------------|-------------| +| ErrorCode | HTTP Status Code | Description | +|-----------|------------------|--------------------------------------------------------------------------------| | 13001 | 412 | This link share requires a password for authentication, but none was provided. | -| 13002 | 403 | The provided link share password was invalid. | +| 13002 | 403 | The provided link share password is invalid. | +| 13003 | 400 | The provided link share token is invalid. | diff --git a/pkg/models/error.go b/pkg/models/error.go index 69b63cedd..9e05abcb6 100644 --- a/pkg/models/error.go +++ b/pkg/models/error.go @@ -1709,3 +1709,29 @@ func (err ErrLinkSharePasswordInvalid) HTTPError() web.HTTPError { Message: "The provided link share password is invalid.", } } + +// ErrLinkShareTokenInvalid represents an error where a link share token is invalid +type ErrLinkShareTokenInvalid struct { +} + +// IsErrLinkShareTokenInvalid checks if an error is ErrLinkShareTokenInvalid. +func IsErrLinkShareTokenInvalid(err error) bool { + _, ok := err.(*ErrLinkShareTokenInvalid) + return ok +} + +func (err *ErrLinkShareTokenInvalid) Error() string { + return "Provided Link Share Token is invalid" +} + +// ErrCodeLinkShareTokenInvalid holds the unique world-error code of this error +const ErrCodeLinkShareTokenInvalid = 13003 + +// HTTPError holds the http error description +func (err ErrLinkShareTokenInvalid) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusBadRequest, + Code: ErrCodeLinkShareTokenInvalid, + Message: "The provided link share token is invalid.", + } +} diff --git a/pkg/models/link_sharing.go b/pkg/models/link_sharing.go index d91a320cc..ad8ca7480 100644 --- a/pkg/models/link_sharing.go +++ b/pkg/models/link_sharing.go @@ -86,10 +86,15 @@ func (share *LinkSharing) GetID() int64 { // GetLinkShareFromClaims builds a link sharing object from jwt claims func GetLinkShareFromClaims(claims jwt.MapClaims) (share *LinkSharing, err error) { + projectID, is := claims["project_id"].(float64) + if !is { + return nil, &ErrLinkShareTokenInvalid{} + } + share = &LinkSharing{} share.ID = int64(claims["id"].(float64)) share.Hash = claims["hash"].(string) - share.ProjectID = int64(claims["project_id"].(float64)) + share.ProjectID = int64(projectID) share.Right = Right(claims["right"].(float64)) share.SharedByID = int64(claims["sharedByID"].(float64)) return