routing update, about, readme
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
fcb49aa38c
commit
b5d112fc74
6 changed files with 205 additions and 17 deletions
35
README.md
35
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)
|
[![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
60
main.go
|
@ -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
59
templates/en/about.gmi
Normal 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
|
||||||
|
|
|
@ -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
59
templates/sgs/about.gmi
Normal 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ė
|
||||||
|
|
|
@ -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ē
|
||||||
|
|
Loading…
Reference in a new issue