From d7a65e66799be84049daf1f2c4082de55277fcbc Mon Sep 17 00:00:00 2001 From: sloum Date: Thu, 2 Jul 2020 14:47:38 -0700 Subject: [PATCH] Allows for relative redirects --- client.go | 7 +++++++ gemini/gemini.go | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/client.go b/client.go index c84757a..dafb5af 100644 --- a/client.go +++ b/client.go @@ -999,6 +999,13 @@ func (c *client) handleGemini(u Url) { if strings.Replace(lowerRedirect, lowerOriginal, "", 1) == "/" { c.Visit(capsule.Content) } else { + if !strings.Contains(capsule.Content, "://") { + lnk, lnkErr := gemini.HandleRelativeUrl(capsule.Content, u.Full) + if lnkErr == nil { + capsule.Content = lnk + } + } + c.SetMessage(fmt.Sprintf("Follow redirect (y/n): %s?", capsule.Content), false) c.DrawMessage() ch := cui.Getch() diff --git a/gemini/gemini.go b/gemini/gemini.go index 44c8545..b0a87a8 100644 --- a/gemini/gemini.go +++ b/gemini/gemini.go @@ -399,7 +399,7 @@ func parseGemini(b, currentUrl string) (string, []string) { } if strings.Index(link, "://") < 0 { - link, _ = handleRelativeUrl(link, currentUrl) + link, _ = HandleRelativeUrl(link, currentUrl) } links = append(links, link) @@ -418,7 +418,7 @@ func parseGemini(b, currentUrl string) (string, []string) { } // handleRelativeUrl provides link completion -func handleRelativeUrl(relLink, current string) (string, error) { +func HandleRelativeUrl(relLink, current string) (string, error) { base, err := url.Parse(current) if err != nil { return relLink, err