2020-08-24 10:06:55 +02:00
|
|
|
package http
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net/url"
|
|
|
|
)
|
|
|
|
|
|
|
|
func GetOriginFromURLString(s string) (string, error) {
|
|
|
|
parsed, err := url.Parse(s)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
return fmt.Sprintf("%s://%s", parsed.Scheme, parsed.Host), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func IsOriginAllowed(allowList []string, origin string) bool {
|
|
|
|
for _, allowed := range allowList {
|
|
|
|
if allowed == origin {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
2021-05-19 09:17:38 +02:00
|
|
|
|
|
|
|
//IsOrigin checks if provided string is an origin (scheme://hostname[:port]) without path, query or fragment
|
|
|
|
func IsOrigin(rawOrigin string) bool {
|
|
|
|
parsedUrl, err := url.Parse(rawOrigin)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return parsedUrl.Scheme != "" && parsedUrl.Host != "" && parsedUrl.Path == "" && len(parsedUrl.Query()) == 0 && parsedUrl.Fragment == ""
|
|
|
|
}
|
2022-02-14 17:22:30 +01:00
|
|
|
|
|
|
|
func BuildHTTP(hostname string, externalPort uint16, secure bool) string {
|
2022-04-26 12:13:16 +02:00
|
|
|
if externalPort == 0 || (externalPort == 443 && secure) || (externalPort == 80 && !secure) {
|
|
|
|
return BuildOrigin(hostname, secure)
|
2022-04-25 11:16:36 +02:00
|
|
|
}
|
2022-04-26 12:13:16 +02:00
|
|
|
return BuildOrigin(fmt.Sprintf("%s:%d", hostname, externalPort), secure)
|
2022-04-25 10:01:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func BuildOrigin(host string, secure bool) string {
|
2022-02-14 17:22:30 +01:00
|
|
|
schema := "https"
|
|
|
|
if !secure {
|
|
|
|
schema = "http"
|
|
|
|
}
|
2022-04-25 10:01:17 +02:00
|
|
|
return fmt.Sprintf("%s://%s", schema, host)
|
2022-02-14 17:22:30 +01:00
|
|
|
}
|