Index page and post pages ready
This commit is contained in:
78
cetgemini/cetgemini.go
Normal file
78
cetgemini/cetgemini.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package cetgemini
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/a-h/gemini"
|
||||
"github.com/a-h/gemini/mux"
|
||||
"github.com/senaduka/cetvorke/database"
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func StartServer(waitgroup *sync.WaitGroup) {
|
||||
defer waitgroup.Done()
|
||||
|
||||
// Create the handlers for a domain (a.gemini).
|
||||
index := gemini.HandlerFunc(indexHandler)
|
||||
post := gemini.HandlerFunc(postHandler)
|
||||
|
||||
// Create a router for gemini://a.gemini/require_cert and gemini://a.gemini/public
|
||||
routerA := mux.NewMux()
|
||||
routerA.AddRoute("/clanak/{postID}/*", post)
|
||||
routerA.AddRoute("/", index)
|
||||
|
||||
// Set up the domain handlers.
|
||||
ctx := context.Background()
|
||||
a, err := gemini.NewDomainHandlerFromFiles("localhost", "server.crt", "server.key", routerA)
|
||||
if err != nil {
|
||||
log.Fatal("error creating domain handler A:", err)
|
||||
}
|
||||
|
||||
err = gemini.ListenAndServe(ctx, ":1965", a)
|
||||
if err != nil {
|
||||
log.Fatal("error:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// write a gemini handler function
|
||||
func indexHandler(w gemini.ResponseWriter, r *gemini.Request) {
|
||||
|
||||
links, err := database.GetRecentLinks()
|
||||
if err != nil {
|
||||
w.Write([]byte(fmt.Sprintf("Error: %s", err)))
|
||||
return
|
||||
}
|
||||
|
||||
response := "# Najnoviji članci\n\n"
|
||||
|
||||
for _, link := range links {
|
||||
// append links to response in gemini feed format
|
||||
response += link.GemtextLink()
|
||||
}
|
||||
|
||||
fmt.Println(response)
|
||||
|
||||
w.Write([]byte(response))
|
||||
}
|
||||
|
||||
func postHandler(w gemini.ResponseWriter, r *gemini.Request) {
|
||||
post_id_str := strings.Split(r.URL.Path, "/")[2]
|
||||
post_id, err := strconv.Atoi(post_id_str)
|
||||
|
||||
if err != nil {
|
||||
w.Write([]byte(fmt.Sprintf("Error: %s", err)))
|
||||
return
|
||||
}
|
||||
|
||||
post, err := database.GetPost(post_id)
|
||||
if err != nil {
|
||||
w.Write([]byte(fmt.Sprintf("Error: %s", err)))
|
||||
return
|
||||
}
|
||||
|
||||
response := post.GemtextPage()
|
||||
w.Write([]byte(response))
|
||||
}
|
||||
Reference in New Issue
Block a user