1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Package urlutil provides helper function to check urls kind.
- // It supports http urls, git urls and transport url (tcp://, …)
- package urlutil
- import (
- "regexp"
- "strings"
- )
- var (
- validPrefixes = map[string][]string{
- "url": {"http://", "https://"},
- "git": {"git://", "github.com/", "git@"},
- "transport": {"tcp://", "tcp+tls://", "udp://", "unix://", "unixgram://"},
- }
- urlPathWithFragmentSuffix = regexp.MustCompile(".git(?:#.+)?$")
- )
- // IsURL returns true if the provided str is an HTTP(S) URL.
- func IsURL(str string) bool {
- return checkURL(str, "url")
- }
- // IsGitURL returns true if the provided str is a git repository URL.
- func IsGitURL(str string) bool {
- if IsURL(str) && urlPathWithFragmentSuffix.MatchString(str) {
- return true
- }
- return checkURL(str, "git")
- }
- // IsGitTransport returns true if the provided str is a git transport by inspecting
- // the prefix of the string for known protocols used in git.
- func IsGitTransport(str string) bool {
- return IsURL(str) || strings.HasPrefix(str, "git://") || strings.HasPrefix(str, "git@")
- }
- // IsTransportURL returns true if the provided str is a transport (tcp, tcp+tls, udp, unix) URL.
- func IsTransportURL(str string) bool {
- return checkURL(str, "transport")
- }
- func checkURL(str, kind string) bool {
- for _, prefix := range validPrefixes[kind] {
- if strings.HasPrefix(str, prefix) {
- return true
- }
- }
- return false
- }
|