b984697fe3
- Add delete button to webdav ui - Some other bug fixes here and there
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package webdav
|
|
|
|
import (
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// getName: Returns the torrent name and filename from the path
|
|
func getName(rootDir, path string) (string, string) {
|
|
path = strings.TrimPrefix(path, rootDir)
|
|
parts := strings.Split(strings.TrimPrefix(path, string(os.PathSeparator)), string(os.PathSeparator))
|
|
if len(parts) < 2 {
|
|
return "", ""
|
|
}
|
|
return parts[1], strings.Join(parts[2:], string(os.PathSeparator)) // Note the change from [0] to [1]
|
|
}
|
|
|
|
func isValidURL(str string) bool {
|
|
u, err := url.Parse(str)
|
|
// A valid URL should parse without error, and have a non-empty scheme and host.
|
|
return err == nil && u.Scheme != "" && u.Host != ""
|
|
}
|
|
|
|
var pctHex = "0123456789ABCDEF"
|
|
|
|
// fastEscapePath returns a percent-encoded path, preserving '/'
|
|
// and only encoding bytes outside the unreserved set:
|
|
//
|
|
// ALPHA / DIGIT / '-' / '_' / '.' / '~' / '/'
|
|
func fastEscapePath(p string) string {
|
|
var b strings.Builder
|
|
|
|
for i := 0; i < len(p); i++ {
|
|
c := p[i]
|
|
// unreserved (plus '/')
|
|
if (c >= 'a' && c <= 'z') ||
|
|
(c >= 'A' && c <= 'Z') ||
|
|
(c >= '0' && c <= '9') ||
|
|
c == '-' || c == '_' ||
|
|
c == '.' || c == '~' ||
|
|
c == '/' {
|
|
b.WriteByte(c)
|
|
} else {
|
|
b.WriteByte('%')
|
|
b.WriteByte(pctHex[c>>4])
|
|
b.WriteByte(pctHex[c&0xF])
|
|
}
|
|
}
|
|
return b.String()
|
|
}
|