Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"http.go",
"item.go",
"pro.go",
"sitemap.go",
],
importpath = "go-common/app/interface/openplatform/seo/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/openplatform/seo/conf:go_default_library",
"//app/interface/openplatform/seo/model:go_default_library",
"//app/interface/openplatform/seo/service:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,99 @@
package http
import (
"crypto/sha1"
"fmt"
"net/http"
"strings"
"go-common/app/interface/openplatform/seo/conf"
"go-common/app/interface/openplatform/seo/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
srv *service.Service
vfy *verify.Verify
)
// Init init seo service
func Init(c *conf.Config) {
srv = service.New(c)
vfy = verify.New(c.Verify)
engine := bm.DefaultServer(c.BM)
router(engine)
if err := engine.Start(); err != nil {
log.Error("innerEngine.Start() error(%v)", err)
panic(err)
}
}
func router(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
g := e.Group("/platform")
{
g.GET("/home.html", proList)
g.GET("/detail.html", proInfo)
}
e.GET("/detail.html", itemInfo)
e.GET("/sitemap.xml", sitemap)
}
func ping(c *bm.Context) {
if err := srv.Ping(c); err != nil {
log.Error("ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}
func register(c *bm.Context) {
c.JSON(map[string]interface{}{}, nil)
}
// isBot check if user-agent is bot
func isBot(c *bm.Context) bool {
ua := c.Request.Header.Get("User-Agent")
ua = strings.ToLower(ua)
for _, bot := range conf.Conf.Seo.BotList {
if strings.Contains(ua, strings.ToLower(bot)) {
return true
}
}
return false
}
// FullUrl get request full url
func FullUrl(c *bm.Context) string {
return c.Request.Host + c.Request.RequestURI
}
func setCache(c *bm.Context, res []byte) bool {
h := c.Writer.Header()
h.Set("Content-Type", "text/html; charset=utf8")
h.Set("Cache-Control", fmt.Sprintf("max-age=%d", conf.Conf.Seo.MaxAge))
etag := ETag(res)
h.Set("ETag", etag)
if etag == c.Request.Header.Get("If-None-Match") {
c.Writer.WriteHeader(http.StatusNotModified)
return true
}
return false
}
// ETag get etag for cache
func ETag(res []byte) string {
return fmt.Sprintf(`W/"%x-%x"`, len(res), sha1.Sum(res))
}
// logUA log User-Agent and Url
func logUA(c *bm.Context) {
log.Infov(c,
log.KV("ua", c.Request.Header.Get("User-Agent")),
log.KV("url", fmt.Sprintf("%s%s", c.Request.Host, c.Request.URL)),
)
}

View File

@@ -0,0 +1,27 @@
package http
import (
"go-common/app/interface/openplatform/seo/model"
bm "go-common/library/net/http/blademaster"
)
func itemInfo(c *bm.Context) {
logUA(c)
arg := new(model.ArgItemID)
if err := c.Bind(arg); err != nil {
return
}
bot := isBot(c)
res, err := srv.GetItem(c, arg.ID, bot)
if err != nil {
c.String(0, "%v", err)
return
}
if setCache(c, res) {
return
}
c.String(0, string(res))
}

View File

@@ -0,0 +1,31 @@
package http
import (
"go-common/app/interface/openplatform/seo/model"
bm "go-common/library/net/http/blademaster"
)
func proList(c *bm.Context) {
c.String(0, "project list")
}
func proInfo(c *bm.Context) {
logUA(c)
arg := new(model.ArgProID)
if err := c.Bind(arg); err != nil {
return
}
bot := isBot(c)
res, err := srv.GetPro(c, arg.ID, bot)
if err != nil {
c.String(0, "%v", err)
return
}
if setCache(c, res) {
return
}
c.String(0, string(res))
}

View File

@@ -0,0 +1,20 @@
package http
import (
"net/http"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func sitemap(c *bm.Context) {
logUA(c)
res, err := srv.Sitemap(c, c.Request.Host)
if err != nil {
log.Error(err.Error())
return
}
c.Writer.Header().Set("Content-Type", "text/xml;charset=utf-8")
c.String(http.StatusOK, string(res))
}