sentence
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Arnas Udovic 2025-03-16 21:29:37 +02:00
parent b15c976693
commit bd279a8808
6 changed files with 86 additions and 20 deletions

21
dict.go
View file

@ -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 {

2
go.mod
View file

@ -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

8
go.sum
View file

@ -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=

50
main.go
View file

@ -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,

View file

@ -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 %}

View file

@ -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 %}