apps/og/handlers.go 1.3 K raw
1
package main
2
3
import (
4
	"net/http"
5
	"slices"
6
	"strings"
7
)
8
9
var commonTags = []string{"og:title", "og:description", "og:image", "og:url", "og:type"}
10
11
func (a *App) indexHandler(w http.ResponseWriter, r *http.Request) {
12
	a.renderPage(w, "index.html", nil)
13
}
14
15
func (a *App) checkHandler(w http.ResponseWriter, r *http.Request) {
16
	if err := r.ParseForm(); err != nil {
17
		a.renderPage(w, "results.html", resultsData{Error: "Bad request"})
18
		return
19
	}
20
	u := strings.TrimSpace(r.FormValue("url"))
21
	if u == "" {
22
		a.renderPage(w, "results.html", resultsData{Error: "Please enter a URL"})
23
		return
24
	}
25
	if !strings.HasPrefix(u, "http://") && !strings.HasPrefix(u, "https://") {
26
		u = "https://" + u
27
	}
28
29
	res, err := fetchOGData(r.Context(), u)
30
	if err != nil {
31
		a.renderPage(w, "results.html", resultsData{URL: u, Error: err.Error()})
32
		return
33
	}
34
35
	data := resultsData{URL: u, OGImage: res.OGTags["og:image"], Favicon: res.Favicon}
36
	for _, tag := range commonTags {
37
		if v, ok := res.OGTags[tag]; ok {
38
			data.FoundTags = append(data.FoundTags, tagKV{Key: tag, Value: v})
39
		} else {
40
			data.MissingTags = append(data.MissingTags, tag)
41
		}
42
	}
43
	for _, key := range res.OGOrder {
44
		if slices.Contains(commonTags, key) {
45
			continue
46
		}
47
		data.FoundTags = append(data.FoundTags, tagKV{Key: key, Value: res.OGTags[key]})
48
	}
49
	data.LinkTags = res.LinkTags
50
	a.renderPage(w, "results.html", data)
51
}