![Jackson Taylor](/assets/img/avatar_default.png)
Serves a page including the album name, artist, track list, and credits. Each of the tracks have links to the lyrics page, provided there is one available.
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/allegro/bigcache/v3"
|
|
"github.com/gorilla/mux"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var logger = logrus.New()
|
|
|
|
func main() {
|
|
c, err := bigcache.NewBigCache(bigcache.DefaultConfig(time.Hour * 24))
|
|
if err != nil {
|
|
logger.Fatalln("can't initialize caching")
|
|
}
|
|
cache = c
|
|
|
|
r := mux.NewRouter()
|
|
|
|
r.Use(securityHeaders)
|
|
|
|
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { render("home", w, nil) })
|
|
r.HandleFunc("/search", searchHandler).Methods("GET")
|
|
r.HandleFunc("/{id}-lyrics", lyricsHandler)
|
|
r.HandleFunc("/images/{filename}.{ext}", proxyHandler)
|
|
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
|
|
r.HandleFunc("/albums/{artist}/{albumName}", albumHandler)
|
|
r.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusNotFound)
|
|
render("error", w, map[string]string{
|
|
"Status": "404",
|
|
"Error": "page not found",
|
|
})
|
|
|
|
})
|
|
|
|
server := &http.Server{
|
|
Handler: r,
|
|
WriteTimeout: 25 * time.Second,
|
|
ReadTimeout: 25 * time.Second,
|
|
}
|
|
|
|
port, _ := strconv.Atoi(os.Getenv("PORT"))
|
|
|
|
if port == 0 {
|
|
port = 5555
|
|
}
|
|
|
|
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
|
|
if err != nil {
|
|
logger.Fatalln(err)
|
|
}
|
|
|
|
logger.Infof("server is listening on port %d\n", port)
|
|
|
|
logger.Fatalln(server.Serve(l))
|
|
}
|