From b5d112fc74a1e1d357de422f1957d3de9139fb27 Mon Sep 17 00:00:00 2001 From: Arnas Udovicius Date: Fri, 19 Aug 2022 11:17:27 +0300 Subject: [PATCH] routing update, about, readme --- README.md | 35 +++++++++++++++++++++++- main.go | 60 ++++++++++++++++++++++++++++++++--------- templates/en/about.gmi | 59 ++++++++++++++++++++++++++++++++++++++++ templates/en/index.gmi | 3 ++- templates/sgs/about.gmi | 59 ++++++++++++++++++++++++++++++++++++++++ templates/sgs/index.gmi | 6 ++--- 6 files changed, 205 insertions(+), 17 deletions(-) create mode 100644 templates/en/about.gmi create mode 100644 templates/sgs/about.gmi diff --git a/README.md b/README.md index 00c2a75..6c9e95f 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,37 @@ [![Build Status](https://drone.arns.lt/api/badges/zordsdavini/arns-lt-gemini/status.svg)](https://drone.arns.lt/zordsdavini/arns-lt-gemini) -My capsule in Gemini space. Built with zord-tree support \ No newline at end of file +My capsule in Gemini space. Built with zord-tree support + + +## URL plan + +* / - redirect to /sgs +* /sgs or /en - index template by language. Links to other language, about, search, root categories, all tags, last 10 post, link to all posts +* /[sgs|en]/a - about page +* /[sgs|en]/s - search +* /[sgs|en]/f/ - display files, subcategories, subtags. If exists index.gmi - display its text +* /[sgs|en]/f/// - display category path as: +``` +=> /sgs/f/c1 c1 +=> /sgs/f/c1/c2 └─ c2 +=> /sgs/f/c1/c2/c3 , └─ c3 +--- +> c1 +> └─ c2 +> , └─ c3 +``` +display tags, date, copyright + + +## TODO + +* routing, not found +* migrate to gRPC +* add category view +* add tag view +* add file view +* add image or other file not `gmi` download +* feed +* about +* citata from some file diff --git a/main.go b/main.go index 54d2325..ce8a350 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "fmt" "log" "os" + "regexp" "strings" "time" @@ -40,9 +41,12 @@ func main() { mux := &gemini.Mux{} mux.HandleFunc("/favicon.txt", processFavicon) + // security + // feed mux.HandleFunc("/", process) server := &gemini.Server{ + Addr: ":" + port, Handler: mux, ReadTimeout: 30 * time.Second, WriteTimeout: 1 * time.Minute, @@ -56,20 +60,46 @@ func main() { } func processFavicon(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) { - fmt.Fprintf(w, "\u263d") + w.SetMediaType("text/plain") + w.Write([]byte("\U0001F31B")) } func process(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) { - fmt.Println(ctx, r, r.URL, r.Host) + log.Println("-> " + r.URL.Path) - renderIndex("en", w) + lang := regexp.MustCompile(`^/(sgs|en)`).FindString(r.URL.Path) + if lang != "" { + lang = lang[1:] + } + + switch { + case "/" == r.URL.Path: + w.WriteHeader(gemini.StatusPermanentRedirect, "/sgs") + case regexp.MustCompile(`^/(sgs|en)$`).MatchString(r.URL.Path): + renderIndex(lang, w) + case regexp.MustCompile(`^/(sgs|en)/a$`).MatchString(r.URL.Path): + renderAbout(lang, w) + default: + w.WriteHeader(gemini.StatusNotFound, "Out of space") + } +} + +func renderAbout(lang string, w gemini.ResponseWriter) { + w.SetMediaType("text/gemini") + content, err := os.ReadFile(fmt.Sprintf("templates/%s/about.gmi", lang)) + if err != nil { + w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error") + return + } + + _, err = w.Write(content) + if err != nil { + w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error") + return + } } func renderIndex(lang string, w gemini.ResponseWriter) { - langPath := lang + "/" - if lang == "sgs" { - langPath = "" - } w.SetMediaType("text/gemini") content, err := os.ReadFile(fmt.Sprintf("templates/%s/index.gmi", lang)) if err != nil { @@ -90,22 +120,28 @@ func renderIndex(lang string, w gemini.ResponseWriter) { categories := "" for c, count := range tree.Categories { - fmt.Println(c, count) - categories = categories + fmt.Sprintf("=> /%s%s/%s %s (%d)\n", langPath, "tree/path", c, c, count) + categories = categories + fmt.Sprintf("=> /%s/f/%s %s (%d)\n", lang, c, c, count) } page = strings.Replace(page, "{{categories}}", categories, 1) tags := "" for t, count := range tree.Tags { - tags = tags + fmt.Sprintf("=> /t/%s %s (%d)\n", t, t, count) + tags = tags + fmt.Sprintf("=> /%s/t/%s %s (%d)\n", lang, t, t, count) } page = strings.Replace(page, "{{tags}}", tags, 1) lastFiles := "" for _, f := range GetLastFiles(tree.Files) { - lastFiles = lastFiles + fmt.Sprintf("=> /%s/%s %s (%s)\n", strings.Join(f.Category, "/"), f.Id, f.Description, f.Created) + lastFiles = lastFiles + fmt.Sprintf( + "=> /%s/f/%s/%s/%s %s (%s)\n", + lang, strings.Join(f.Category, "/"), f.Id, strings.Replace(f.Name, ".md", ".gmi", 1), f.Description, f.Created, + ) } page = strings.Replace(page, "{{last_posts}}", lastFiles, 1) - fmt.Fprintf(w, page) + _, err = w.Write([]byte(page)) + if err != nil { + w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error") + return + } } diff --git a/templates/en/about.gmi b/templates/en/about.gmi new file mode 100644 index 0000000..6e393b9 --- /dev/null +++ b/templates/en/about.gmi @@ -0,0 +1,59 @@ +# Arna alkierios :: About + +I am Arns Udovič, also you can find me by Zordsdavini. + +Kraujė žemaitėška, bet laikaus Vėlniou. Pagrindėnės mėslės sokas aple žemaitiu kalbuos keravuojėma, anuos skleidėma ė pritaikīmus kompioterems. Daug darbū dėrbo, ka žėmaitē galietom rašītė bėndrinie rašībuo. + +Karto eso puogramoutuos ė baisē miegsto Linux'us. + +Tāp pat eso gomtuos mīlietuos ė mėslėjo, ka Žemė ī gīva. + +### Contact me + +=> mailto:zordsdavini@arns.lt E-mail +=> https://mastodon.social/@zordsdavini @zordsdavini@mastodon.social + +## About capsule + +Alkierios korts, ka būtom vėita, kor galietiuo talpintė sava mėslės, pastebiejėmus a kažkon, kon nanuorietiuo pamėrštė. + +Būdams pruogramoutuojo nuoriejau pramuoktė naujū dalīku, ta tudie pasirinkau, ka mona alkierios turietom turietė ė gemini versėjė, karto līgegretē sokūriau ėr īprasta http versėjė. + +### Aple teknuoluogėjė + +Tekstus rašau i paprastiausius failiokus ėr anus talpėno sava „cloud'ė“ vagol somėslīta stroktūra. Tumet sokas tū failu makliavuonės servėsos, katras parašīts ont Go pruogramavėma kalbuos ėr ont mona parašītas bėbliuotekas `zord-tree`. + +Jau ėš makliavuonės servėsa pajemo i gemini servėsa, katras parašīts ėrgė so Go, arba i http servėsa (backend's ont Go REST, frontend's ont Vue.js). Ruodā nauduojo gRPC pruotuokuola. + +=> https://g.arns.lt/zordsdavini/zord-tree zord-tree bėbliuoteka sokortė miedi ėš failu +=> https://g.arns.lt/zordsdavini/arns-lt-tree-push-service servėsos ont zord-tree somakliavuotė failus ėr anus padoutė tuoliau +=> https://g.arns.lt/zordsdavini/arns-lt-gemini gemini servėsos +=> https://arns.lt Arna alkierios HTTP versėjuo + +## Other projects + +### Samogitian + +Eso Žemaitiu koltūras draugėjės narīs. Ka „legalėzoutiuo“ sava darba žemaitiu kalbā, ikūriau Žemaitiu kalbuos instėtota. Instėtota vardo dėrėno vairius standartus IT ertie. Siekmingiausė bėngtė pruojektā: +=> https://bat-smg.wikipedia.org/wiki/P%C4%97rms_poslapis Vikipedėjė žemaitėška +=> https://iso639-3.sil.org/code/sgs ISO 639 kuods žemaitiu kalbā „sgs“ + +Kėtas nūruodas darbū so žemaitēs: +=> https://žemaitėjė.lt Žemaitiu kalbuos instėtota alkierios +=> https://ruoda.lt laikraštis „Ruoda“ +=> https://zkz.lt žemaitiu kalbuos žuodīns + +### IT + +=> https://kplaner.arns.lt Planoutuos parašīts ont python'a karto so sava patė +=> https://odysee.com/@qtile-tv:0 + +### future plans + +=> https://karmagiai.lt „Kariai ir magai“ internetėnė versėjė (arba gižielis skaitliavėmams) +=> https://vytines.lt vītėniu joustu vījėms ruoboto +=> https://sieps.lt helper app for inventorization +=> https://preferansas.lt internetėnė preferansa lietovėška versėjė + +=> /en ← back + diff --git a/templates/en/index.gmi b/templates/en/index.gmi index 0840be0..923323f 100644 --- a/templates/en/index.gmi +++ b/templates/en/index.gmi @@ -1,4 +1,4 @@ -# Arns' capsule +# Arna alkierios Welcome to my capsule in Gemini space. @@ -24,3 +24,4 @@ Main themes are spreaded by categories. Each file may have tags what can filter {{last_posts}} +=> /f all texts diff --git a/templates/sgs/about.gmi b/templates/sgs/about.gmi new file mode 100644 index 0000000..b80a35b --- /dev/null +++ b/templates/sgs/about.gmi @@ -0,0 +1,59 @@ +# Arna alkierios :: Aple + +Eso Udovič Arns, dā vadėnamo Zordsdavini arba Ousėnio. + +Kraujė žemaitėška, bet laikaus Vėlniou. Pagrindėnės mėslės sokas aple žemaitiu kalbuos keravuojėma, anuos skleidėma ė pritaikīmus kompioterems. Daug darbū dėrbo, ka žėmaitē galietom rašītė bėndrinie rašībuo. + +Karto eso puogramoutuos ė baisē miegsto Linux'us. + +Tāp pat eso gomtuos mīlietuos ė mėslėjo, ka Žemė ī gīva. + +### parašīk mon + +=> mailto:zordsdavini@arns.lt pašta skrabėkė +=> https://mastodon.social/@zordsdavini @zordsdavini@mastodon.social + +## Aple alkierio + +Alkierios korts, ka būtom vėita, kor galietiuo talpintė sava mėslės, pastebiejėmus a kažkon, kon nanuorietiuo pamėrštė. + +Būdams pruogramoutuojo nuoriejau pramuoktė naujū dalīku, ta tudie pasirinkau, ka mona alkierios turietom turietė ė gemini versėjė, karto līgegretē sokūriau ėr īprasta http versėjė. + +### Aple teknuoluogėjė + +Tekstus rašau i paprastiausius failiokus ėr anus talpėno sava „cloud'ė“ vagol somėslīta stroktūra. Tumet sokas tū failu makliavuonės servėsos, katras parašīts ont Go pruogramavėma kalbuos ėr ont mona parašītas bėbliuotekas `zord-tree`. + +Jau ėš makliavuonės servėsa pajemo i gemini servėsa, katras parašīts ėrgė so Go, arba i http servėsa (backend's ont Go REST, frontend's ont Vue.js). Ruodā nauduojo gRPC pruotuokuola. + +=> https://g.arns.lt/zordsdavini/zord-tree zord-tree bėbliuoteka sokortė miedi ėš failu +=> https://g.arns.lt/zordsdavini/arns-lt-tree-push-service servėsos ont zord-tree somakliavuotė failus ėr anus padoutė tuoliau +=> https://g.arns.lt/zordsdavini/arns-lt-gemini gemini servėsos +=> https://arns.lt Arna alkierios HTTP versėjuo + +## Kėtė pruojektā + +### Žemaitėškė + +Eso Žemaitiu koltūras draugėjės narīs. Ka „legalėzoutiuo“ sava darba žemaitiu kalbā, ikūriau Žemaitiu kalbuos instėtota. Instėtota vardo dėrėno vairius standartus IT ertie. Siekmingiausė bėngtė pruojektā: +=> https://bat-smg.wikipedia.org/wiki/P%C4%97rms_poslapis Vikipedėjė žemaitėška +=> https://iso639-3.sil.org/code/sgs ISO 639 kuods žemaitiu kalbā „sgs“ + +Kėtas nūruodas darbū so žemaitēs: +=> https://žemaitėjė.lt Žemaitiu kalbuos instėtota alkierios +=> https://ruoda.lt laikraštis „Ruoda“ +=> https://zkz.lt žemaitiu kalbuos žuodīns + +### IT + +=> https://kplaner.arns.lt Planoutuos parašīts ont python'a karto so sava patė +=> https://odysee.com/@qtile-tv:0 + +### planūs + +=> https://karmagiai.lt „Kariai ir magai“ internetėnė versėjė (arba gižielis skaitliavėmams) +=> https://vytines.lt vītėniu joustu vījėms ruoboto +=> https://sieps.lt gižielis inventuorėzacėjē +=> https://preferansas.lt internetėnė preferansa lietovėška versėjė + +=> /sgs ← grīžtė + diff --git a/templates/sgs/index.gmi b/templates/sgs/index.gmi index f979fb5..08f1cab 100644 --- a/templates/sgs/index.gmi +++ b/templates/sgs/index.gmi @@ -9,8 +9,8 @@ Sveikė atvīkėn i mona kapsolė Gemini ertie. Pagrindėnės temas paskėrstītas par kateguorėjės. Kuožnos fails gal turietė žīmas, katruos gal atsėjuotė miedi. -=> /s ėiškuok -=> /a aple +=> /sgs/s ėiškuok +=> /sgs/a aple ### Kateguorėjės @@ -24,4 +24,4 @@ Pagrindėnės temas paskėrstītas par kateguorėjės. Kuožnos fails gal turie {{last_posts}} -=> /x vėsė straipsnē +=> /sgs/f vėsė straipsnē