Bugfix - Enforce URL length check in LinkMetadata before attempting to insert to database (#29589)
* Add missing URL length validation in LinkMetadata * Added MaxURLLength constant * Add test to validate new URL length limit * Add comment about table constraint * Use a seperate error string for URL length errors * Added error string fpr URL length * Updated error message * Update en.json * Fixed gofmt error in link_metadata.go * use right txn id ```release-note NONE ``` --------- Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in> Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e6b4764e0d
Коммит
baf9bf82c9
@@ -9520,6 +9520,10 @@
|
|||||||
"id": "model.link_metadata.is_valid.url.app_error",
|
"id": "model.link_metadata.is_valid.url.app_error",
|
||||||
"translation": "Link metadata URL must be set."
|
"translation": "Link metadata URL must be set."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "model.link_metadata.is_valid.url_length.app_error",
|
||||||
|
"translation": "Length of link metadata URL is {{ .Length }} characters long, which exceeds the maximum limit of {{ .MaxLength }} characters."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "model.member.is_valid.channel.app_error",
|
"id": "model.member.is_valid.channel.app_error",
|
||||||
"translation": "Channel name is not valid"
|
"translation": "Channel name is not valid"
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ const (
|
|||||||
LinkMetadataTypeNone LinkMetadataType = "none"
|
LinkMetadataTypeNone LinkMetadataType = "none"
|
||||||
LinkMetadataTypeOpengraph LinkMetadataType = "opengraph"
|
LinkMetadataTypeOpengraph LinkMetadataType = "opengraph"
|
||||||
LinkMetadataMaxImages int = 5
|
LinkMetadataMaxImages int = 5
|
||||||
|
LinkMetadataMaxURLLength int = 2048 // Maximum URL length in LinkMetadata table
|
||||||
)
|
)
|
||||||
|
|
||||||
type LinkMetadataType string
|
type LinkMetadataType string
|
||||||
@@ -93,6 +94,10 @@ func (o *LinkMetadata) IsValid() *AppError {
|
|||||||
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.url.app_error", nil, "", http.StatusBadRequest)
|
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.url.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(o.URL) > LinkMetadataMaxURLLength {
|
||||||
|
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.url_length.app_error", map[string]any{"MaxLength": LinkMetadataMaxURLLength, "Length": len(o.URL)}, "", http.StatusBadRequest)
|
||||||
|
}
|
||||||
|
|
||||||
if o.Timestamp == 0 || !isRoundedToNearestHour(o.Timestamp) {
|
if o.Timestamp == 0 || !isRoundedToNearestHour(o.Timestamp) {
|
||||||
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.timestamp.app_error", nil, "", http.StatusBadRequest)
|
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.timestamp.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,6 +146,16 @@ func TestLinkMetadataIsValid(t *testing.T) {
|
|||||||
},
|
},
|
||||||
Expected: false,
|
Expected: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "should be invalid because of URL length being too long",
|
||||||
|
Metadata: &LinkMetadata{
|
||||||
|
URL: "http://example.com/?" + strings.Repeat("a", 2048),
|
||||||
|
Timestamp: 1546300800000,
|
||||||
|
Type: LinkMetadataTypeImage,
|
||||||
|
Data: &PostImage{},
|
||||||
|
},
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(test.Name, func(t *testing.T) {
|
t.Run(test.Name, func(t *testing.T) {
|
||||||
appErr := test.Metadata.IsValid()
|
appErr := test.Metadata.IsValid()
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user