Files
eiblog/router.go
2017-11-27 15:21:28 +08:00

138 lines
3.6 KiB
Go

// Package main provides ...
package main
import (
"fmt"
"text/template"
"time"
"github.com/eiblog/eiblog/setting"
"github.com/eiblog/utils/logd"
"github.com/eiblog/utils/tmpl"
"github.com/gin-gonic/autotls"
"github.com/gin-gonic/contrib/sessions"
"github.com/gin-gonic/gin"
)
var (
router *gin.Engine
Tmpl *template.Template
)
func init() {
// 运行模式
if setting.Conf.RunMode == setting.PROD {
gin.SetMode(gin.ReleaseMode)
logd.SetLevel(logd.Lerror)
}
router = gin.Default()
store := sessions.NewCookieStore([]byte("eiblog321"))
store.Options(sessions.Options{
MaxAge: 86400 * 7,
Path: "/",
Secure: setting.Conf.RunMode == setting.PROD,
HttpOnly: true,
})
router.Use(sessions.Sessions("su", store))
// 匹配模版
Tmpl = template.New("eiblog").Funcs(tmpl.TplFuncMap)
files := ReadDir("views", func(name string) bool {
if name == ".DS_Store" {
return true
}
return false
})
_, err := Tmpl.ParseFiles(files...)
if err != nil {
logd.Fatal(err)
}
// 开启静态文件
router.Static("/static", "./static")
router.Use(Filter())
router.NoRoute(HandleNotFound)
router.GET("/", HandleHomePage)
router.GET("/post/:slug", HandleArticlePage)
router.GET("/series.html", HandleSeriesPage)
router.GET("/archives.html", HandleArchivesPage)
router.GET("/search.html", HandleSearchPage)
router.GET("/beacon.html", HandleBeacon)
router.GET("/disqus/post-:slug", HandleDisqus)
router.GET("/disqus/form/post-:slug", HandleDisqusFrom)
router.POST("/disqus/create", HandleDisqusCreate)
router.GET("/rss.html", HandleFeed)
router.GET("/feed", HandleFeed)
router.GET("/opensearch.xml", HandleOpenSearch)
router.GET("/sitemap.xml", HandleSitemap)
router.GET("/robots.txt", HandleRobots)
router.GET("/crossdomain.xml", HandleCrossDomain)
router.GET("/favicon.ico", HandleFavicon)
// 后台相关
admin := router.Group("/admin")
admin.GET("/login", HandleLogin)
admin.POST("/login", HandleLoginPost)
auth := admin.Use(AuthFilter())
{
// console
auth.GET("/profile", HandleProfile)
// write
auth.GET("/write-post", HandlePost)
// manage
auth.GET("/manage-posts", HandlePosts)
auth.GET("/manage-series", HandleSeries)
auth.GET("/add-serie", HandleSerie)
auth.GET("/manage-tags", HandleTags)
auth.GET("/manage-draft", HandleDraft)
auth.GET("/manage-trash", HandleTrash)
auth.GET("/options-general", HandleGeneral)
auth.GET("/options-discussion", HandleDiscussion)
auth.GET("/draft-delete", HandleDraftDelete)
// api
auth.POST("/api/:action", HandleAPI)
}
}
// 开始运行
func Run() {
var (
endRunning = make(chan bool, 1)
err error
)
if setting.Conf.Mode.EnableHttp {
go func() {
logd.Printf("http server Running on %d\n", setting.Conf.Mode.HttpPort)
err = router.Run(fmt.Sprintf(":%d", setting.Conf.Mode.HttpPort))
if err != nil {
logd.Error("ListenAndServe: ", err)
time.Sleep(100 * time.Microsecond)
endRunning <- true
}
}()
}
if setting.Conf.Mode.EnableHttps {
if setting.Conf.Mode.AutoCert {
go func() {
logd.Print("https server Running on 443")
err = autotls.Run(router, setting.Conf.Mode.Domain)
if err != nil {
logd.Error("ListenAndServe: ", err)
time.Sleep(100 * time.Microsecond)
endRunning <- true
}
}()
} else {
go func() {
logd.Printf("https server Running on %d\n", setting.Conf.Mode.HttpsPort)
err = router.RunTLS(fmt.Sprintf(":%d", setting.Conf.Mode.HttpsPort),
setting.Conf.Mode.CertFile, setting.Conf.Mode.KeyFile)
if err != nil {
logd.Error("ListenAndServe: ", err)
time.Sleep(100 * time.Microsecond)
endRunning <- true
}
}()
}
}
<-endRunning
}