Dont allow invalid URL

This commit is contained in:
Radhi Fadlillah 2018-03-08 20:57:25 +07:00
parent efd20cb400
commit fd1f190800
2 changed files with 20 additions and 11 deletions

View file

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

View file

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