fix: provide a proper error message when viewing a link share with an invalid token
continuous-integration/drone/push Build is failing Details

This commit is contained in:
kolaente 2023-04-17 11:08:38 +02:00
parent 10f71c29b2
commit aa43127e52
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
3 changed files with 36 additions and 4 deletions

View File

@ -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. |

View File

@ -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.",
}
}

View File

@ -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