commit ea5318ae9b2a8642a4786496fa5a9f6b46314942
parent 53946d961463268336a1ed8ad53114076e26b186
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sat, 10 Jun 2023 21:49:28 -0700
dynamic external links
Diffstat:
3 files changed, 61 insertions(+), 44 deletions(-)
diff --git a/pkg/database/utils/processMessage.go b/pkg/database/utils/processMessage.go
@@ -14,6 +14,7 @@ import (
"github.com/microcosm-cc/bluemonday"
html2 "html"
"math"
+ "net/url"
"regexp"
"strings"
"time"
@@ -421,6 +422,34 @@ func splitQuote(in string) (string, string) {
return in[:idx], in[idx:]
}
+var LibredditURLs = []string{
+ "http://spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion",
+ "http://fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion",
+ "http://kphht2jcflojtqte4b4kyx7p2ahagv4debjj32nre67dxz7y57seqwyd.onion",
+ "http://inytumdgnri7xsqtvpntjevaelxtgbjqkuqhtf6txxhwbll2fwqtakqd.onion",
+ "http://liredejj74h5xjqr2dylnl5howb2bpikfowqoveub55ru27x43357iid.onion",
+ "http://kzhfp3nvb4qp575vy23ccbrgfocezjtl5dx66uthgrhu7nscu6rcwjyd.onion",
+ "http://ecue64ybzvn6vjzl37kcsnwt4ycmbsyf74nbttyg7rkc3t3qwnj7mcyd.onion",
+ "http://ledditqo2mxfvlgobxnlhrkq4dh34jss6evfkdkb2thlvy6dn4f4gpyd.onion",
+ "http://ol5begilptoou34emq2sshf3may3hlblvipdjtybbovpb7c7zodxmtqd.onion",
+ "http://lbrdtjaj7567ptdd4rv74lv27qhxfkraabnyphgcvptl64ijx2tijwid.onion",
+}
+
+var InvidiousURLs = []string{
+ "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion",
+ "http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion",
+ "http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion"}
+
+var WikilessURLs = []string{
+ "http://c2pesewpalbi6lbfc5hf53q4g3ovnxe4s7tfa6k2aqkf7jd7a7dlz5ad.onion",
+ "http://dj2tbh2nqfxyfmvq33cjmhuw7nb6am7thzd3zsjvizeqf374fixbrxyd.onion"}
+
+var NitterURLs = []string{
+ "http://nitraeju2mipeziu2wtcrqsxg7h62v5y4eqgwi75uprynkj74gevvuqd.onion"}
+
+var RimgoURLs = []string{
+ "http://be7udfhmnzqyt7cxysg6c4pbawarvaofjjywp35nhd5qamewdfxl6sid.onion"}
+
func convertLinks(in string,
roomID database.RoomID,
getUserByUsername func(database.Username) (database.User, error),
@@ -428,34 +457,6 @@ func convertLinks(in string,
getChatMessageByUUID func(string) (database.ChatMessage, error)) string {
quote, rest := splitQuote(in)
- libredditURLs := []string{
- "http://spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion",
- "http://fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion",
- "http://kphht2jcflojtqte4b4kyx7p2ahagv4debjj32nre67dxz7y57seqwyd.onion",
- "http://inytumdgnri7xsqtvpntjevaelxtgbjqkuqhtf6txxhwbll2fwqtakqd.onion",
- "http://liredejj74h5xjqr2dylnl5howb2bpikfowqoveub55ru27x43357iid.onion",
- "http://kzhfp3nvb4qp575vy23ccbrgfocezjtl5dx66uthgrhu7nscu6rcwjyd.onion",
- "http://ecue64ybzvn6vjzl37kcsnwt4ycmbsyf74nbttyg7rkc3t3qwnj7mcyd.onion",
- "http://ledditqo2mxfvlgobxnlhrkq4dh34jss6evfkdkb2thlvy6dn4f4gpyd.onion",
- "http://ol5begilptoou34emq2sshf3may3hlblvipdjtybbovpb7c7zodxmtqd.onion",
- "http://lbrdtjaj7567ptdd4rv74lv27qhxfkraabnyphgcvptl64ijx2tijwid.onion",
- }
-
- invidiousURLs := []string{
- "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion",
- "http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion",
- "http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion"}
-
- wikilessURLs := []string{
- "http://c2pesewpalbi6lbfc5hf53q4g3ovnxe4s7tfa6k2aqkf7jd7a7dlz5ad.onion",
- "http://dj2tbh2nqfxyfmvq33cjmhuw7nb6am7thzd3zsjvizeqf374fixbrxyd.onion"}
-
- nitterURLs := []string{
- "http://nitraeju2mipeziu2wtcrqsxg7h62v5y4eqgwi75uprynkj74gevvuqd.onion"}
-
- rimgoURLs := []string{
- "http://be7udfhmnzqyt7cxysg6c4pbawarvaofjjywp35nhd5qamewdfxl6sid.onion"}
-
knownOnions := [][]string{
{"http://dkfgit.onion", config.DkfGitOnion},
{"http://dread.onion", config.DreadOnion},
@@ -491,20 +492,18 @@ func convertLinks(in string,
// Handle reddit links
if strings.HasPrefix(link, "https://www.reddit.com/") {
old := strings.Replace(link, "https://www.reddit.com/", "https://old.reddit.com/", 1)
- libredditLink := utils.RandChoice(libredditURLs)
- libredditLink = strings.Replace(link, "https://www.reddit.com", libredditLink, 1)
+ libredditLink := "/external-link/libreddit/" + url.PathEscape(strings.TrimPrefix(link, "https://www.reddit.com/"))
oldHtmlLink := makeHtmlLink("old", old)
libredditHtmlLink := makeHtmlLink("libredditLink", libredditLink)
htmlLink := makeHtmlLink(link, link)
return htmlLink + ` (` + oldHtmlLink + ` | ` + libredditHtmlLink + `)`
} else if strings.HasPrefix(link, "https://old.reddit.com/") {
- libredditLink := utils.RandChoice(libredditURLs)
- libredditLink = strings.Replace(link, "https://old.reddit.com", libredditLink, 1)
+ libredditLink := "/external-link/libreddit/" + url.PathEscape(strings.TrimPrefix(link, "https://old.reddit.com/"))
libredditHtmlLink := makeHtmlLink("libredditLink", libredditLink)
htmlLink := makeHtmlLink(link, link)
return htmlLink + ` (` + libredditHtmlLink + `)`
}
- for _, libredditURL := range libredditURLs {
+ for _, libredditURL := range LibredditURLs {
if strings.HasPrefix(link, libredditURL) {
newPrefix := strings.Replace(link, libredditURL, "http://reddit.onion", 1)
old := strings.Replace(link, libredditURL, "https://old.reddit.com", 1)
@@ -515,7 +514,7 @@ func convertLinks(in string,
}
// Append YouTube link to invidious link
- for _, invidiousURL := range invidiousURLs {
+ for _, invidiousURL := range InvidiousURLs {
if strings.HasPrefix(link, invidiousURL) {
if strings.Contains(link, ".onion/watch?v=") {
newPrefix := strings.Replace(link, invidiousURL, "http://invidious.onion", 1)
@@ -544,13 +543,12 @@ func convertLinks(in string,
// Append wikiless link to wikipedia link
if strings.HasPrefix(link, "https://en.wikipedia.org/") {
- wikilessLink := utils.RandChoice(wikilessURLs)
- wikilessLink = strings.Replace(link, "https://en.wikipedia.org", wikilessLink, 1)
+ wikilessLink := "/external-link/nitter/" + url.PathEscape(strings.TrimPrefix(link, "https://en.wikipedia.org/"))
wikilessHtmlLink := makeHtmlLink("Wikiless", wikilessLink)
htmlLink := makeHtmlLink(link, link)
return htmlLink + ` (` + wikilessHtmlLink + `)`
}
- for _, wikilessURL := range wikilessURLs {
+ for _, wikilessURL := range WikilessURLs {
if strings.HasPrefix(link, wikilessURL) {
newPrefix := strings.Replace(link, wikilessURL, "http://wikiless.onion", 1)
wikipediaPrefix := strings.Replace(link, wikilessURL, "https://en.wikipedia.org", 1)
@@ -562,13 +560,12 @@ func convertLinks(in string,
// Append nitter link to twitter link
if strings.HasPrefix(link, "https://twitter.com/") {
- nitterLink := utils.RandChoice(nitterURLs)
- nitterLink = strings.Replace(link, "https://twitter.com", nitterLink, 1)
+ nitterLink := "/external-link/nitter/" + url.PathEscape(strings.TrimPrefix(link, "https://twitter.com/"))
nitterHtmlLink := makeHtmlLink("Nitter", nitterLink)
htmlLink := makeHtmlLink(link, link)
return htmlLink + ` (` + nitterHtmlLink + `)`
}
- for _, nitterURL := range nitterURLs {
+ for _, nitterURL := range NitterURLs {
if strings.HasPrefix(link, nitterURL) {
newPrefix := strings.Replace(link, nitterURL, "http://nitter.onion", 1)
twitterPrefix := strings.Replace(link, nitterURL, "https://twitter.com", 1)
@@ -580,13 +577,12 @@ func convertLinks(in string,
// Append rimgo link to imgur link
if strings.HasPrefix(link, "https://imgur.com/") {
- rimgoLink := utils.RandChoice(rimgoURLs)
- rimgoLink = strings.Replace(link, "https://imgur.com", rimgoLink, 1)
+ rimgoLink := "/external-link/rimgo/" + url.PathEscape(strings.TrimPrefix(link, "https://imgur.com/"))
rimgoHtmlLink := makeHtmlLink("Rimgo", rimgoLink)
htmlLink := makeHtmlLink(link, link)
return htmlLink + ` (` + rimgoHtmlLink + `)`
}
- for _, rimgoURL := range rimgoURLs {
+ for _, rimgoURL := range RimgoURLs {
if strings.HasPrefix(link, rimgoURL) {
newPrefix := strings.Replace(link, rimgoURL, "http://rimgo.onion", 1)
imgurPrefix := strings.Replace(link, rimgoURL, "https://imgur.com", 1)
@@ -615,7 +611,7 @@ func convertLinks(in string,
videoID = m[1]
}
if videoID != "" {
- invidiousLink := utils.RandChoice(invidiousURLs) + "/watch?v=" + videoID + "&local=true"
+ invidiousLink := "/external-link/invidious/" + url.PathEscape("watch?v="+videoID+"&local=true")
invidiousHtmlLink := makeHtmlLink("Invidious", invidiousLink)
htmlLink := makeHtmlLink(link, link)
youtubeLink := "https://www.youtube.com/watch?v=" + videoID
diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go
@@ -2448,6 +2448,26 @@ func RoomChatSettingsHandler(c echo.Context) error {
return c.Render(http.StatusOK, "chat-room-settings", data)
}
+func ExternalLinkHandler(c echo.Context) error {
+ service := c.Param("service")
+ original, _ := url.PathUnescape(c.Param("original"))
+ baseURL := "/"
+ if service == "invidious" {
+ baseURL = utils.RandChoice(dutils.InvidiousURLs)
+ } else if service == "libreddit" {
+ baseURL = utils.RandChoice(dutils.LibredditURLs)
+ } else if service == "wikiless" {
+ baseURL = utils.RandChoice(dutils.WikilessURLs)
+ } else if service == "nitter" {
+ baseURL = utils.RandChoice(dutils.NitterURLs)
+ } else if service == "rimgo" {
+ baseURL = utils.RandChoice(dutils.RimgoURLs)
+ } else {
+ return c.String(http.StatusNotFound, "Not found")
+ }
+ return c.Redirect(http.StatusFound, baseURL+"/"+original)
+}
+
func ChatCreateRoomHandler(c echo.Context) error {
authUser := c.Get("authUser").(*database.User)
db := c.Get("database").(*database.DkfDB)
diff --git a/pkg/web/web.go b/pkg/web/web.go
@@ -229,6 +229,7 @@ func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Te
authGroup.POST("/chat/:roomName/delete", handlers.ChatDeleteHandler)
authGroup.GET("/chat/:roomName/settings", handlers.RoomChatSettingsHandler)
authGroup.POST("/chat/:roomName/settings", handlers.RoomChatSettingsHandler)
+ authGroup.GET("/external-link/:service/:original", handlers.ExternalLinkHandler)
moderatorGroup := e.Group("", middlewares.IsModeratorMiddleware)
moderatorGroup.POST("/api/v1/users/:userID/hellban", v1.UserHellbanHandler)
moderatorGroup.POST("/api/v1/users/:userID/unhellban", v1.UserUnHellbanHandler)