routing update, about, readme
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Arnas Udovicius 2022-08-19 11:17:27 +03:00
parent fcb49aa38c
commit b5d112fc74
6 changed files with 205 additions and 17 deletions

View file

@ -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) [![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 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/<category/path> - display files, subcategories, subtags. If exists index.gmi - display its text
* /[sgs|en]/f/<category/path>/<id>/<name.gmi> - 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

60
main.go
View file

@ -7,6 +7,7 @@ import (
"fmt" "fmt"
"log" "log"
"os" "os"
"regexp"
"strings" "strings"
"time" "time"
@ -40,9 +41,12 @@ func main() {
mux := &gemini.Mux{} mux := &gemini.Mux{}
mux.HandleFunc("/favicon.txt", processFavicon) mux.HandleFunc("/favicon.txt", processFavicon)
// security
// feed
mux.HandleFunc("/", process) mux.HandleFunc("/", process)
server := &gemini.Server{ server := &gemini.Server{
Addr: ":" + port,
Handler: mux, Handler: mux,
ReadTimeout: 30 * time.Second, ReadTimeout: 30 * time.Second,
WriteTimeout: 1 * time.Minute, WriteTimeout: 1 * time.Minute,
@ -56,20 +60,46 @@ func main() {
} }
func processFavicon(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) { 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) { 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) { func renderIndex(lang string, w gemini.ResponseWriter) {
langPath := lang + "/"
if lang == "sgs" {
langPath = ""
}
w.SetMediaType("text/gemini") w.SetMediaType("text/gemini")
content, err := os.ReadFile(fmt.Sprintf("templates/%s/index.gmi", lang)) content, err := os.ReadFile(fmt.Sprintf("templates/%s/index.gmi", lang))
if err != nil { if err != nil {
@ -90,22 +120,28 @@ func renderIndex(lang string, w gemini.ResponseWriter) {
categories := "" categories := ""
for c, count := range tree.Categories { for c, count := range tree.Categories {
fmt.Println(c, count) categories = categories + fmt.Sprintf("=> /%s/f/%s %s (%d)\n", lang, c, c, count)
categories = categories + fmt.Sprintf("=> /%s%s/%s %s (%d)\n", langPath, "tree/path", c, c, count)
} }
page = strings.Replace(page, "{{categories}}", categories, 1) page = strings.Replace(page, "{{categories}}", categories, 1)
tags := "" tags := ""
for t, count := range tree.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) page = strings.Replace(page, "{{tags}}", tags, 1)
lastFiles := "" lastFiles := ""
for _, f := range GetLastFiles(tree.Files) { 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) 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
}
} }

59
templates/en/about.gmi Normal file
View file

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

View file

@ -1,4 +1,4 @@
# Arns' capsule # Arna alkierios
Welcome to my capsule in Gemini space. 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}} {{last_posts}}
=> /f all texts

59
templates/sgs/about.gmi Normal file
View file

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

View file

@ -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. 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 => /sgs/s ėiškuok
=> /a aple => /sgs/a aple
### Kateguorėjės ### 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}} {{last_posts}}
=> /x vėsė straipsnē => /sgs/f vėsė straipsnē