2020-01-18 13:30:41 -09:00
|
|
|
package webroute
|
2019-07-31 18:34:27 -08:00
|
|
|
|
|
|
|
import (
|
2019-10-15 14:46:42 -08:00
|
|
|
"fmt"
|
|
|
|
"net"
|
2019-07-31 18:34:27 -08:00
|
|
|
"net/url"
|
2019-10-15 14:46:42 -08:00
|
|
|
"os"
|
|
|
|
"strings"
|
2020-01-18 13:30:41 -09:00
|
|
|
|
|
|
|
"github.com/pkg/errors"
|
2019-07-31 18:34:27 -08:00
|
|
|
)
|
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
type WebRoute struct {
|
2019-07-31 18:34:27 -08:00
|
|
|
webAppUrl url.URL
|
|
|
|
webApiUrl url.URL
|
|
|
|
}
|
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
func New(apiBaseUrl, appBaseUrl string) (WebRoute, error) {
|
|
|
|
var r WebRoute
|
2019-07-31 18:34:27 -08:00
|
|
|
|
|
|
|
apiUrl, err := url.Parse(apiBaseUrl)
|
|
|
|
if err != nil {
|
|
|
|
return r, errors.WithMessagef(err, "Failed to parse api base URL '%s'", apiBaseUrl)
|
|
|
|
}
|
|
|
|
r.webApiUrl = *apiUrl
|
|
|
|
|
|
|
|
appUrl, err := url.Parse(appBaseUrl)
|
|
|
|
if err != nil {
|
|
|
|
return r, errors.WithMessagef(err, "Failed to parse app base URL '%s'", appBaseUrl)
|
|
|
|
}
|
|
|
|
r.webAppUrl = *appUrl
|
|
|
|
|
|
|
|
return r, nil
|
|
|
|
}
|
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
func (r WebRoute) WebAppUrl(urlPath string) string {
|
2019-07-31 18:34:27 -08:00
|
|
|
u := r.webAppUrl
|
|
|
|
u.Path = urlPath
|
|
|
|
return u.String()
|
|
|
|
}
|
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
func (r WebRoute) WebApiUrl(urlPath string) string {
|
2019-07-31 18:34:27 -08:00
|
|
|
u := r.webApiUrl
|
|
|
|
u.Path = urlPath
|
|
|
|
return u.String()
|
|
|
|
}
|
2019-08-02 15:03:32 -08:00
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
func (r WebRoute) UserResetPassword(resetHash string) string {
|
2019-08-02 15:03:32 -08:00
|
|
|
u := r.webAppUrl
|
2019-08-05 13:27:23 -08:00
|
|
|
u.Path = "/user/reset-password/" + resetHash
|
2019-08-02 15:03:32 -08:00
|
|
|
return u.String()
|
|
|
|
}
|
2019-08-05 13:27:23 -08:00
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
func (r WebRoute) UserInviteAccept(inviteHash string) string {
|
2019-08-05 13:27:23 -08:00
|
|
|
u := r.webAppUrl
|
|
|
|
u.Path = "/users/invite/" + inviteHash
|
|
|
|
return u.String()
|
2019-08-05 14:32:45 -08:00
|
|
|
}
|
2019-08-05 19:49:30 -08:00
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
func (r WebRoute) ApiDocs() string {
|
2019-08-05 19:49:30 -08:00
|
|
|
u := r.webApiUrl
|
|
|
|
u.Path = "/docs"
|
|
|
|
return u.String()
|
|
|
|
}
|
|
|
|
|
2020-01-18 15:36:16 -09:00
|
|
|
func (r WebRoute) ApiDocsJson(internal bool) string {
|
2019-08-05 19:49:30 -08:00
|
|
|
u := r.webApiUrl
|
2019-10-15 14:46:42 -08:00
|
|
|
|
|
|
|
if ev := os.Getenv("USE_NETWORK_ALIAS"); ev != "" {
|
|
|
|
if internal && strings.Contains(u.Host, ":") {
|
|
|
|
h, p, _ := net.SplitHostPort(u.Host)
|
|
|
|
if h == "127.0.0.1" || h == "localhost" {
|
|
|
|
u.Host = fmt.Sprintf("web-api:%s", p)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-05 19:49:30 -08:00
|
|
|
u.Path = "/docs/doc.json"
|
|
|
|
return u.String()
|
|
|
|
}
|