promote flag: feature out of the experimental sandbox
This commit is contained in:
parent
aa736d5b48
commit
c600581c90
|
@ -1151,7 +1151,7 @@ func jonkjonk(user *WhatAbout, h *Honk) (junk.Junk, junk.Junk) {
|
||||||
t["icon"] = i
|
t["icon"] = i
|
||||||
tags = append(tags, t)
|
tags = append(tags, t)
|
||||||
}
|
}
|
||||||
for _, e := range bloat_fixupflags(h) {
|
for _, e := range fixupflags(h) {
|
||||||
t := junk.New()
|
t := junk.New()
|
||||||
t["id"] = e.ID
|
t["id"] = e.ID
|
||||||
t["type"] = "Emoji"
|
t["type"] = "Emoji"
|
||||||
|
|
85
avatar.go
85
avatar.go
|
@ -19,11 +19,16 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/sha512"
|
"crypto/sha512"
|
||||||
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
"image/png"
|
"image/png"
|
||||||
"log"
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
var avatarcolors = [4][4]byte{
|
var avatarcolors = [4][4]byte{
|
||||||
|
@ -98,3 +103,83 @@ func genAvatar(name string) []byte {
|
||||||
png.Encode(&buf, img)
|
png.Encode(&buf, img)
|
||||||
return buf.Bytes()
|
return buf.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func showflag(writer http.ResponseWriter, req *http.Request) {
|
||||||
|
code := mux.Vars(req)["code"]
|
||||||
|
colors := strings.Split(code, ",")
|
||||||
|
numcolors := len(colors)
|
||||||
|
vert := false
|
||||||
|
if colors[0] == "vert" {
|
||||||
|
vert = true
|
||||||
|
colors = colors[1:]
|
||||||
|
numcolors--
|
||||||
|
if numcolors == 0 {
|
||||||
|
http.Error(writer, "bad flag", 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pixels := make([][4]byte, numcolors)
|
||||||
|
for i := 0; i < numcolors; i++ {
|
||||||
|
hex := colors[i]
|
||||||
|
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)
|
||||||
|
pixels[i][0] = r
|
||||||
|
pixels[i][1] = g
|
||||||
|
pixels[i][2] = b
|
||||||
|
pixels[i][3] = 255
|
||||||
|
}
|
||||||
|
|
||||||
|
h := 128
|
||||||
|
w := h * 3 / 2
|
||||||
|
img := image.NewRGBA(image.Rect(0, 0, w, h))
|
||||||
|
if vert {
|
||||||
|
for j := 0; j < w; j++ {
|
||||||
|
pix := pixels[j*numcolors/w][:]
|
||||||
|
for i := 0; i < h; i++ {
|
||||||
|
p := i*img.Stride + j*4
|
||||||
|
copy(img.Pix[p:], pix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for i := 0; i < h; i++ {
|
||||||
|
pix := pixels[i*numcolors/h][:]
|
||||||
|
for j := 0; j < w; j++ {
|
||||||
|
p := i*img.Stride + j*4
|
||||||
|
copy(img.Pix[p:], pix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.Header().Set("Cache-Control", "max-age="+somedays())
|
||||||
|
png.Encode(writer, img)
|
||||||
|
}
|
||||||
|
|
||||||
|
var re_flags = regexp.MustCompile("flag:[[:alnum:],]+")
|
||||||
|
|
||||||
|
func 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 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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
92
bloat.go
92
bloat.go
|
@ -14,95 +14,3 @@
|
||||||
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"image"
|
|
||||||
"image/png"
|
|
||||||
"net/http"
|
|
||||||
"regexp"
|
|
||||||
"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)
|
|
||||||
vert := false
|
|
||||||
if colors[0] == "vert" {
|
|
||||||
vert = true
|
|
||||||
colors = colors[1:]
|
|
||||||
numcolors--
|
|
||||||
if numcolors == 0 {
|
|
||||||
http.Error(writer, "bad flag", 400)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pixels := make([][4]byte, numcolors)
|
|
||||||
for i := 0; i < numcolors; i++ {
|
|
||||||
hex := colors[i]
|
|
||||||
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)
|
|
||||||
pixels[i][0] = r
|
|
||||||
pixels[i][1] = g
|
|
||||||
pixels[i][2] = b
|
|
||||||
pixels[i][3] = 255
|
|
||||||
}
|
|
||||||
|
|
||||||
h := 128
|
|
||||||
w := h * 3 / 2
|
|
||||||
img := image.NewRGBA(image.Rect(0, 0, w, h))
|
|
||||||
if vert {
|
|
||||||
for j := 0; j < w; j++ {
|
|
||||||
pix := pixels[j*numcolors/w][:]
|
|
||||||
for i := 0; i < h; i++ {
|
|
||||||
p := i*img.Stride + j*4
|
|
||||||
copy(img.Pix[p:], pix)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for i := 0; i < h; i++ {
|
|
||||||
pix := pixels[i*numcolors/h][:]
|
|
||||||
for j := 0; j < w; j++ {
|
|
||||||
p := i*img.Stride + j*4
|
|
||||||
copy(img.Pix[p:], pix)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.Header().Set("Cache-Control", "max-age="+somedays())
|
|
||||||
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)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
@ -104,6 +104,11 @@ operator followed by the file name.
|
||||||
A full list of emoji and memes may be found in the
|
A full list of emoji and memes may be found in the
|
||||||
.Pa funzone .
|
.Pa funzone .
|
||||||
.Pp
|
.Pp
|
||||||
|
Custom flag emoji may be generated on the fly by specifying comma separated
|
||||||
|
hexadecimal RGB values, one for each stripe.
|
||||||
|
.Dl flag:306,002,dcf
|
||||||
|
Vertical stripes may be selected by specfying "vert" for the first value.
|
||||||
|
.Pp
|
||||||
There are no length restrictions, but remember, somebody is going to have
|
There are no length restrictions, but remember, somebody is going to have
|
||||||
to read this noise.
|
to read this noise.
|
||||||
.Pp
|
.Pp
|
||||||
|
|
2
fun.go
2
fun.go
|
@ -139,7 +139,7 @@ func reverbolate(userid int64, honks []*Honk) {
|
||||||
}
|
}
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
bloat_renderflags(h)
|
renderflags(h)
|
||||||
h.Precis = re_emus.ReplaceAllStringFunc(h.Precis, emuxifier)
|
h.Precis = re_emus.ReplaceAllStringFunc(h.Precis, emuxifier)
|
||||||
h.Noise = re_emus.ReplaceAllStringFunc(h.Noise, emuxifier)
|
h.Noise = re_emus.ReplaceAllStringFunc(h.Noise, emuxifier)
|
||||||
|
|
||||||
|
|
2
web.go
2
web.go
|
@ -2477,7 +2477,7 @@ func serve() {
|
||||||
getters.HandleFunc("/meme/{meme:[^.]*[^/]+}", servememe)
|
getters.HandleFunc("/meme/{meme:[^.]*[^/]+}", servememe)
|
||||||
getters.HandleFunc("/.well-known/webfinger", fingerlicker)
|
getters.HandleFunc("/.well-known/webfinger", fingerlicker)
|
||||||
|
|
||||||
getters.HandleFunc("/flag/{code:.+}", bloat_showflag)
|
getters.HandleFunc("/flag/{code:.+}", showflag)
|
||||||
|
|
||||||
getters.HandleFunc("/server", serveractor)
|
getters.HandleFunc("/server", serveractor)
|
||||||
posters.HandleFunc("/server/inbox", serverinbox)
|
posters.HandleFunc("/server/inbox", serverinbox)
|
||||||
|
|
Loading…
Reference in New Issue