73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package main
|
||
|
||
import (
|
||
"bytes"
|
||
"fmt"
|
||
_ "git.rosy.net.cn/jx-print/controllers"
|
||
"git.rosy.net.cn/jx-print/globals"
|
||
"git.rosy.net.cn/jx-print/model"
|
||
"git.rosy.net.cn/jx-print/routers"
|
||
_ "git.rosy.net.cn/jx-print/services/api"
|
||
"git.rosy.net.cn/jx-print/services/misc"
|
||
_ "git.rosy.net.cn/jx-print/services/print_server"
|
||
"github.com/gin-contrib/sessions"
|
||
"github.com/gin-contrib/sessions/cookie"
|
||
"github.com/gin-gonic/gin"
|
||
"io"
|
||
"io/ioutil"
|
||
"os"
|
||
"time"
|
||
)
|
||
|
||
func main() {
|
||
gin.DisableConsoleColor()
|
||
globals.SugarLogger.Debug("print--------------main")
|
||
r := gin.New()
|
||
//r.Use(session(model.SessionKey))
|
||
f, _ := os.Create("jx-print.log")
|
||
//gin.DefaultWriter = io.MultiWriter(f)
|
||
// 如果需要同时将日志写入文件和控制台,请使用以下代码。
|
||
gin.DefaultWriter = io.MultiWriter(f, os.Stdout)
|
||
r.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
|
||
// your custom format
|
||
return fmt.Sprintf("%s - [%s] \"%s %s %d \" %s\"\n",
|
||
param.ClientIP,
|
||
param.TimeStamp.Format(time.RFC3339),
|
||
param.Method,
|
||
param.Path,
|
||
param.StatusCode,
|
||
param.ErrorMessage,
|
||
)
|
||
}))
|
||
r.Use(gin.Recovery()) //111
|
||
r.Use(middleware())
|
||
routers.Init(r)
|
||
misc.Init()
|
||
r.Run(":8999")
|
||
}
|
||
|
||
func middleware() gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
data, _ := ioutil.ReadAll(c.Request.Body)
|
||
globals.SugarLogger.Debugf("Begin API :%s, params: %v, ip: %s, method %s", c.Request.URL, string(data), c.ClientIP(), c.Request.Method)
|
||
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))
|
||
}
|
||
}
|
||
|
||
// 中间件,处理session
|
||
func session(keyPairs string) gin.HandlerFunc {
|
||
store := sessionConfig()
|
||
return sessions.Sessions(keyPairs, store)
|
||
}
|
||
func sessionConfig() sessions.Store {
|
||
sessionMaxAge := 3600
|
||
sessionSecret := model.SessionKey
|
||
var store sessions.Store
|
||
store = cookie.NewStore([]byte(sessionSecret))
|
||
store.Options(sessions.Options{
|
||
MaxAge: sessionMaxAge, //seconds
|
||
Path: "/",
|
||
})
|
||
return store
|
||
}
|