custom flags
Ted Unangst tedu@tedunangst.com
Mon, 11 May 2020 16:24:18 -0400
4 files changed,
82 insertions(+),
2 deletions(-)
M
activity.go
→
activity.go
@@ -1035,8 +1035,6 @@ mentions = bunchofgrapes(h.Noise)
} translate(h) redoimages(h) - jo["summary"] = html.EscapeString(h.Precis) - jo["content"] = h.Noise if h.Precis != "" { jo["sensitive"] = true }@@ -1070,6 +1068,18 @@ t["name"] = o
tags = append(tags, t) } for _, e := range herdofemus(h.Noise) { + t := junk.New() + t["id"] = e.ID + t["type"] = "Emoji" + t["name"] = e.Name + i := junk.New() + i["type"] = "Image" + i["mediaType"] = "image/png" + i["url"] = e.ID + t["icon"] = i + tags = append(tags, t) + } + for _, e := range bloat_fixupflags(h) { t := junk.New() t["id"] = e.ID t["type"] = "Emoji"@@ -1123,6 +1133,8 @@ }
if len(atts) > 0 { jo["attachment"] = atts } + jo["summary"] = html.EscapeString(h.Precis) + jo["content"] = h.Noise j["object"] = jo case "bonk": j["type"] = "Announce"
M
bloat.go
→
bloat.go
@@ -14,3 +14,68 @@ // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. package main + +import ( + "fmt" + "regexp" + "image" + "image/png" + "net/http" + "strconv" + "strings" + + "github.com/gorilla/mux" +) + +func bloat_showflag(writer http.ResponseWriter, req *http.Request) { + code := mux.Vars(req)["code"] + colors := strings.Split(code, ",") + numcolors := len(colors) + h := (128 / numcolors) * numcolors + w := h * 3 / 2 + img := image.NewRGBA(image.Rect(0, 0, w, h)) + for i := 0; i < h; i++ { + hex := colors[i*numcolors/h] + if len(hex) == 3 { + hex = fmt.Sprintf("%c%c%c%c%c%c", + hex[0], hex[0], hex[1], hex[1], hex[2], hex[2]) + } + c, _ := strconv.ParseUint(hex, 16, 32) + r := byte(c >> 16 & 0xff) + g := byte(c >> 8 & 0xff) + b := byte(c >> 0 & 0xff) + for j := 0; j < w; j++ { + p := i*img.Stride + j*4 + img.Pix[p+0] = r + img.Pix[p+1] = g + img.Pix[p+2] = b + img.Pix[p+3] = 255 + } + } + png.Encode(writer, img) +} + +var re_flags = regexp.MustCompile("flag:[[:alnum:],]+") + +func bloat_fixupflags(h *Honk) []Emu { + var emus []Emu + count := 0 + h.Noise = re_flags.ReplaceAllStringFunc(h.Noise, func(m string) string { + count++ + var e Emu + e.Name = fmt.Sprintf(":flag%d:", count) + e.ID = fmt.Sprintf("https://%s/flag/%s", serverName, m[5:]) + emus = append(emus, e) + return e.Name + }) + return emus +} + +func bloat_renderflags(h *Honk) { + h.Noise = re_flags.ReplaceAllStringFunc(h.Noise, func(m string) string { + code := m[5:] + src := fmt.Sprintf("https://%s/flag/%s", serverName, code) + return fmt.Sprintf(`<img class="emu" title="%s" src="%s">`, "flag", src) + }) +} +
M
web.go
→
web.go
@@ -2418,6 +2418,8 @@ getters.HandleFunc("/emu/{emu:[^.]*[^/]+}", serveemu)
getters.HandleFunc("/meme/{meme:[^.]*[^/]+}", servememe) getters.HandleFunc("/.well-known/webfinger", fingerlicker) + getters.HandleFunc("/flag/{code:.+}", bloat_showflag) + getters.HandleFunc("/server", serveractor) posters.HandleFunc("/server/inbox", serverinbox) posters.HandleFunc("/inbox", serverinbox)