mirror of
https://github.com/go-shiori/shiori.git
synced 2025-10-03 02:05:22 +08:00
Dont allow invalid URL
This commit is contained in:
parent
efd20cb400
commit
fd1f190800
2 changed files with 20 additions and 11 deletions
22
cmd/add.go
22
cmd/add.go
|
@ -1,6 +1,7 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
nurl "net/url"
|
nurl "net/url"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -59,8 +60,14 @@ func addBookmark(base model.Bookmark, offline bool) (book model.Bookmark, err er
|
||||||
// Prepare initial result
|
// Prepare initial result
|
||||||
book = base
|
book = base
|
||||||
|
|
||||||
|
// Make sure URL valid
|
||||||
|
parsedURL, err := nurl.ParseRequestURI(book.URL)
|
||||||
|
if err != nil {
|
||||||
|
return book, fmt.Errorf("URL is not valid")
|
||||||
|
}
|
||||||
|
|
||||||
// Clear UTM parameters from URL
|
// Clear UTM parameters from URL
|
||||||
book.URL, err = clearUTMParams(book.URL)
|
book.URL, err = clearUTMParams(parsedURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return book, err
|
return book, err
|
||||||
}
|
}
|
||||||
|
@ -101,14 +108,9 @@ func normalizeSpace(str string) string {
|
||||||
return strings.Join(strings.Fields(str), " ")
|
return strings.Join(strings.Fields(str), " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
func clearUTMParams(uri string) (string, error) {
|
func clearUTMParams(url *nurl.URL) (string, error) {
|
||||||
tempURL, err := nurl.Parse(uri)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
newQuery := nurl.Values{}
|
newQuery := nurl.Values{}
|
||||||
for key, value := range tempURL.Query() {
|
for key, value := range url.Query() {
|
||||||
if strings.HasPrefix(key, "utm_") {
|
if strings.HasPrefix(key, "utm_") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -116,6 +118,6 @@ func clearUTMParams(uri string) (string, error) {
|
||||||
newQuery[key] = value
|
newQuery[key] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
tempURL.RawQuery = newQuery.Encode()
|
url.RawQuery = newQuery.Encode()
|
||||||
return tempURL.String(), nil
|
return url.String(), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
nurl "net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -100,8 +101,14 @@ func init() {
|
||||||
func updateBookmarks(indices []string, base model.Bookmark, offline, overwrite bool) ([]model.Bookmark, error) {
|
func updateBookmarks(indices []string, base model.Bookmark, offline, overwrite bool) ([]model.Bookmark, error) {
|
||||||
mutex := sync.Mutex{}
|
mutex := sync.Mutex{}
|
||||||
|
|
||||||
|
// Make sure URL valid
|
||||||
|
parsedURL, err := nurl.ParseRequestURI(base.URL)
|
||||||
|
if err != nil {
|
||||||
|
return []model.Bookmark{}, fmt.Errorf("URL is not valid")
|
||||||
|
}
|
||||||
|
|
||||||
// Clear UTM parameters from URL
|
// Clear UTM parameters from URL
|
||||||
url, err := clearUTMParams(base.URL)
|
url, err := clearUTMParams(parsedURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []model.Bookmark{}, err
|
return []model.Bookmark{}, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue