diff --git a/dict.go b/dict.go index 1e8062e..4208f88 100644 --- a/dict.go +++ b/dict.go @@ -1,21 +1,24 @@ package main type dict struct { - hostname string - languageEn string - searchStr string + hostname string + languageEn string + searchStr string + newSentence string } var EN = dict{ - hostname: "en.arns.lt", - languageEn: "English", - searchStr: "Input searching tag, created date or word in description", + hostname: "en.arns.lt", + languageEn: "English", + searchStr: "Input searching tag, created date or word in description", + newSentence: "New sentence", } var SGS = dict{ - hostname: "en.arns.lt", - languageEn: "Samogitian", - searchStr: "Ivesk ėiškuoma žīma, sokūrėma data arba žuodi ėš aprašīma", + hostname: "en.arns.lt", + languageEn: "Samogitian", + searchStr: "Ivesk ėiškuoma žīma, sokūrėma data arba žuodi ėš aprašīma", + newSentence: "Naujė ėšmintės", } func Dict() dict { diff --git a/go.mod b/go.mod index a0abb2e..4d7101d 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( require g.arns.lt/zordsdavini/abcex/v4 v4.0.4 // indirect require ( - g.arns.lt/zordsdavini/zordfsdb v1.0.5 + g.arns.lt/zordsdavini/zordfsdb v1.0.7 github.com/golang/protobuf v1.5.2 // indirect golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect diff --git a/go.sum b/go.sum index 7f514d9..cb4e8d7 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= g.arns.lt/zordsdavini/abcex/v4 v4.0.4 h1:idjvgkCjrjZfDxLyOcX7lCIdIndISDAkj77VCvhu8/c= g.arns.lt/zordsdavini/abcex/v4 v4.0.4/go.mod h1:/+//gYSUtJrdsmTtWNoffRO4xD1BuPRUMGW4ynet7iE= -g.arns.lt/zordsdavini/zordfsdb v1.0.4 h1:jtM9sXAh5kLatHyrkbky7XO2z9wgfz0fjYBg5NHVCrk= -g.arns.lt/zordsdavini/zordfsdb v1.0.4/go.mod h1:CpFWjby+GB/+mrJFTsCDJHS5UCWHty6Y7Pf/Ui7IR90= -g.arns.lt/zordsdavini/zordfsdb v1.0.5 h1:8HoKqkQM3u9GzkCl+Bco1ctBr+Uz/J+tSxyyfMShbvA= -g.arns.lt/zordsdavini/zordfsdb v1.0.5/go.mod h1:CpFWjby+GB/+mrJFTsCDJHS5UCWHty6Y7Pf/Ui7IR90= +g.arns.lt/zordsdavini/zordfsdb v1.0.6 h1:N42qGkb0XBzSC58E5QLGMop4W9GlvUfgduuWtkUSrVk= +g.arns.lt/zordsdavini/zordfsdb v1.0.6/go.mod h1:CpFWjby+GB/+mrJFTsCDJHS5UCWHty6Y7Pf/Ui7IR90= +g.arns.lt/zordsdavini/zordfsdb v1.0.7 h1:uzm9m4xORpFz9aWmvGEmTsSNPzXqVCI1A5G2szpzPAo= +g.arns.lt/zordsdavini/zordfsdb v1.0.7/go.mod h1:CpFWjby+GB/+mrJFTsCDJHS5UCWHty6Y7Pf/Ui7IR90= git.sr.ht/~adnano/go-gemini v0.2.3 h1:oJ+Y0/mheZ4Vg0ABjtf5dlmvq1yoONStiaQvmWWkofc= git.sr.ht/~adnano/go-gemini v0.2.3/go.mod h1:hQ75Y0i5jSFL+FQ7AzWVAYr5LQsaFC7v3ZviNyj46dY= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= diff --git a/main.go b/main.go index 896848a..b8aedb4 100644 --- a/main.go +++ b/main.go @@ -161,6 +161,8 @@ func process(_ context.Context, w gemini.ResponseWriter, r *gemini.Request) { renderAbout(w) case regexp.MustCompile(`^/s/?$`).MatchString(r.URL.Path): renderSearch(w, r, client) + case regexp.MustCompile(`^/admin/sentence$`).MatchString(r.URL.Path): + renderAdminSentence(w, r, client) case regexp.MustCompile(`^/t/?$`).MatchString(r.URL.Path): renderTags(w, client) case regexp.MustCompile(`^/f/?$`).MatchString(r.URL.Path): @@ -258,6 +260,13 @@ func renderIndex(w gemini.ResponseWriter, client TreeManagerClient, r *gemini.Re db.Save("admin_cert", "xxx") } + sentence := "" + sentenceCount, _ := db.Length("sentences_" + defaultLang) + if sentenceCount > 0 { + sentenceNode, _ := db.GetRandomNode("sentences_" + defaultLang) + sentence, _ = sentenceNode.Get("sentence") + } + w.SetMediaType("text/gemini") tpl := pongo2.Must(pongo2.FromFile(fmt.Sprintf("templates/%s/index.gmi", defaultLang))) page, err := tpl.Execute( @@ -268,6 +277,7 @@ func renderIndex(w gemini.ResponseWriter, client TreeManagerClient, r *gemini.Re "lastRebuild": lastRebuild, "pageCounter": pageCounter, "admin": adminCert == getCertFingerprint(r), + "sentence": sentence, }, ) if err != nil { @@ -384,6 +394,46 @@ func renderAbout(w gemini.ResponseWriter) { } } +func renderAdminSentence( + w gemini.ResponseWriter, + r *gemini.Request, + client TreeManagerClient, +) { + db, err := zordfsdb.InitDB("./db") + if err != nil { + w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error") + log.Fatal(err) + return + } + + adminCert, found := db.Get("admin_cert") + if !found || adminCert != getCertFingerprint(r) { + w.WriteHeader(gemini.StatusNotFound, "Out of space") + return + } + + q, err := gemini.QueryUnescape(r.URL.RawQuery) + if err != nil || q == "" { + w.WriteHeader(gemini.StatusInput, Dict().newSentence) + return + } + + _, found = db.Get("sentences_" + defaultLang) + if !found { + db.CreateNode("sentences_" + defaultLang) + _, _ = db.Get("sentences_" + defaultLang) + } + id, err := db.AddObject("sentences_" + defaultLang) + if err != nil { + w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error") + log.Fatal(err) + return + } + db.Save("sentences_"+defaultLang+"."+id+".sentence", q) + + w.WriteHeader(gemini.StatusPermanentRedirect, "/") +} + func renderSearch( w gemini.ResponseWriter, r *gemini.Request, diff --git a/templates/en/index.gmi b/templates/en/index.gmi index 8212bb2..2464d4b 100644 --- a/templates/en/index.gmi +++ b/templates/en/index.gmi @@ -1,8 +1,10 @@ {% import "../macros.tpl" category_url, tag_url, text_url, logo %} # Arna alkierios [EN] - +{% if sentence %} +> {{ sentence }} +{% else %} Welcome to my capsule in Gemini space. {{ logo() }} - +{% endif %} => gemini://arns.lt Žemaitėška versėjė => https://arns.lt http version @@ -23,3 +25,9 @@ Welcome to my capsule in Gemini space. {{ logo() }} Last build: {{lastRebuild}} Total page counter: {{pageCounter}} ``` + +{% if admin %} +### Keravuotuojė sekcėjė +=> /admin/sentence ivestė naujė ėšmintė +=> /mail misfin pašta skrabėkė +{% endif %} diff --git a/templates/sgs/index.gmi b/templates/sgs/index.gmi index 980c078..19e51ba 100644 --- a/templates/sgs/index.gmi +++ b/templates/sgs/index.gmi @@ -1,8 +1,10 @@ {% import "../macros.tpl" category_url, tag_url, text_url, logo %} # Arna alkierios - +{% if sentence %} +> {{ sentence }} +{% else %} Sveikė atvīkėn i mona kapsolė Gemini ertie. {{ logo() }} - +{% endif %} => gemini://en.arns.lt English version => https://arns.lt http versėjė @@ -14,7 +16,6 @@ Sveikė atvīkėn i mona kapsolė Gemini ertie. {{ logo() }} => /t 🏷 Žīmas ({{ tree.Tags|length }}) {% if lastFiles %}### Paskotėnē īrašā - {% for file in lastFiles %}{{ text_url(file) }}{% endfor %} {% endif %} @@ -26,4 +27,8 @@ Last build: {{lastRebuild}} Total page counter: {{pageCounter}} ``` -{% if admin %}ADMIN{% endif %} +{% if admin %} +### Keravuotuojė sekcėjė +=> /admin/sentence ivestė naujė ėšmintė +=> /mail misfin pašta skrabėkė +{% endif %}