2020-04-07 10:42:42 +02:00
|
|
|
package remote
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/url"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Heuristic struct {
|
|
|
|
ServiceType string
|
|
|
|
Domains []string
|
|
|
|
Paths []string
|
|
|
|
Method string
|
|
|
|
}
|
|
|
|
|
|
|
|
var Heuristics = []Heuristic{
|
|
|
|
{ServiceFacebook, []string{"facebook.com", "www.facebook.com"}, []string{}, "GET"},
|
|
|
|
{ServiceTwitter, []string{"twitter.com"}, []string{}, "GET"},
|
|
|
|
{ServiceFlickr, []string{"flickr.com", "www.flickr.com"}, []string{}, "GET"},
|
|
|
|
{ServiceInstagram, []string{"instagram.com", "www.instagram.com"}, []string{}, "GET"},
|
|
|
|
{ServiceEyeEm, []string{"eyeem.com", "www.eyeem.com"}, []string{}, "GET"},
|
|
|
|
{ServiceTelegram, []string{"web.telegram.org", "www.telegram.org", "telegram.org"}, []string{}, "GET"},
|
|
|
|
{ServiceWhatsApp, []string{"web.whatsapp.com", "www.whatsapp.com", "whatsapp.com"}, []string{}, "GET"},
|
|
|
|
{ServiceOneDrive, []string{"onedrive.live.com"}, []string{}, "GET"},
|
|
|
|
{ServiceGDrive, []string{"drive.google.com"}, []string{}, "GET"},
|
|
|
|
{ServiceGPhotos, []string{"photos.google.com"}, []string{}, "GET"},
|
2021-01-25 15:11:21 +01:00
|
|
|
{ServiceWebDAV, []string{}, []string{"/", "/webdav/", "/remote.php/dav/files/{user}/", "/remote.php/webdav/", "/dav/files/{user}/", "/servlet/webdav.infostore/"}, "PROPFIND"},
|
2020-04-07 10:42:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func (h Heuristic) MatchDomain(match string) bool {
|
|
|
|
if len(h.Domains) == 0 {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, m := range h.Domains {
|
|
|
|
if m == match {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func (h Heuristic) Discover(rawUrl, user string) *url.URL {
|
|
|
|
u, err := url.Parse(rawUrl)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
if HttpOk(h.Method, u.String()) {
|
|
|
|
return u
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, p := range h.Paths {
|
2021-01-25 15:11:21 +01:00
|
|
|
u.Path = strings.Replace(p, "{user}", user, -1)
|
2020-04-07 10:42:42 +02:00
|
|
|
|
|
|
|
if HttpOk(h.Method, u.String()) {
|
|
|
|
return u
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|