diff --git a/internal/webserver/handler_search.go b/internal/webserver/handler_search.go index 9547449..12be492 100644 --- a/internal/webserver/handler_search.go +++ b/internal/webserver/handler_search.go @@ -37,6 +37,8 @@ func (app *Application) Search(w http.ResponseWriter, r *http.Request) { maybe_url, err := url.Parse(search_text) if err == nil && (maybe_url.Host == "twitter.com" || maybe_url.Host == "mobile.twitter.com") { parts := strings.Split(strings.Trim(maybe_url.Path, "/"), "/") + + // Handle tweet links if len(parts) == 3 && parts[1] == "status" { id, err := strconv.Atoi(parts[2]) if err == nil { @@ -45,7 +47,8 @@ func (app *Application) Search(w http.ResponseWriter, r *http.Request) { } } - if len(parts) == 1 { + // Handle user profile links + if len(parts) == 1 || (len(parts) == 2 && parts[1] == "with_replies") { http.Redirect(w, r, fmt.Sprintf("/%s", parts[0]), 302) return } diff --git a/internal/webserver/server_test.go b/internal/webserver/server_test.go index 8c3af3f..f6a7544 100644 --- a/internal/webserver/server_test.go +++ b/internal/webserver/server_test.go @@ -242,6 +242,11 @@ func TestSearchRedirectOnUserFeedLink(t *testing.T) { assert.Equal(resp.StatusCode, 302) assert.Equal(resp.Header.Get("Location"), "/agsdf") + // "With Replies" page + resp = do_request(httptest.NewRequest("GET", fmt.Sprintf("/search/%s", url.PathEscape("https://twitter.com/agsdf/with_replies")), nil)) + assert.Equal(resp.StatusCode, 302) + assert.Equal(resp.Header.Get("Location"), "/agsdf") + // Mobile URL resp = do_request(httptest.NewRequest("GET", fmt.Sprintf("/search/%s", url.PathEscape("https://mobile.twitter.com/agsdfhh")), nil)) assert.Equal(resp.StatusCode, 302)