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 = [
"captcha.go",
"http.go",
"render_image.go",
],
importpath = "go-common/app/interface/main/captcha/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/captcha/conf:go_default_library",
"//app/interface/main/captcha/service:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/rate:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//vendor/github.com/pkg/errors: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,70 @@
package http
import (
"net/http"
bm "go-common/library/net/http/blademaster"
)
// get user get a image.
func get(c *bm.Context) {
var (
err error
v = new(struct {
Token string `form:"token" validate:"required"`
Bid string `form:"bid" validate:"required"`
})
img []byte
)
if err = c.Bind(v); err != nil {
return
}
if img, err = svr.CaptchaImg(c, v.Token, v.Bid); err != nil {
c.JSON(nil, err)
return
}
code := http.StatusOK
c.Render(code, Image{
Body: img,
})
}
// token third business get token.
func token(c *bm.Context) {
var (
err error
v = new(struct {
Bid string `form:"bid" validate:"required"`
})
token, url string
)
if err = c.Bind(v); err != nil {
return
}
if url, token, err = svr.Token(c, v.Bid); err != nil {
c.JSON(nil, err)
return
}
data := make(map[string]interface{}, 1)
data["data"] = map[string]string{
"token": token,
"url": url,
}
c.JSONMap(data, nil)
}
// verify third business verify.
func verify(c *bm.Context) {
var (
err error
v = new(struct {
Token string `form:"token" validate:"required"`
Code string `form:"code" validate:"required"`
})
)
if err = c.Bind(v); err != nil {
return
}
err = svr.VerifyCaptcha(c, v.Token, v.Code)
c.JSON(nil, err)
}

View File

@@ -0,0 +1,53 @@
package http
import (
"net/http"
"go-common/app/interface/main/captcha/conf"
"go-common/app/interface/main/captcha/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/rate"
verifyx "go-common/library/net/http/blademaster/middleware/verify"
)
var (
svr *service.Service
verifySvc *verifyx.Verify
)
// Init captcha http init.
func Init(c *conf.Config, s *service.Service) (err error) {
svr = s
verifySvc = verifyx.New(c.Verify)
rateLimit := rate.New(c.Rate)
engineOuter := bm.DefaultServer(c.BM.Outer)
engineOuter.Use(rateLimit)
outerRouter(engineOuter)
interRouter(engineOuter)
if err := engineOuter.Start(); err != nil {
log.Error("bm.DefaultServer error(%v)", err)
panic(err)
}
return
}
func outerRouter(e *bm.Engine) {
e.Ping(ping)
group := e.Group("/x/v1/captcha")
group.GET("/get", get)
}
func interRouter(e *bm.Engine) {
group := e.Group("/x/internal/v1/captcha")
group.GET("/token", verifySvc.Verify, token)
group.POST("/verify", verifySvc.Verify, verify)
}
func ping(c *bm.Context) {
if svr.Ping(c) != nil {
log.Error("captcha service ping error")
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,45 @@
package http
import (
"net/http"
"github.com/pkg/errors"
)
var (
imageContentType = []string{"image/jpeg"}
_ Render = Image{}
)
// Render http reponse render.
type Render interface {
// Render render it to http response writer.
Render(http.ResponseWriter) error
// WriteContentType write content-type to http response writer.
WriteContentType(w http.ResponseWriter)
}
// Image Image.
type Image struct {
Body []byte
}
// WriteContentType write json ContentType.
func (j Image) WriteContentType(w http.ResponseWriter) {
writeContentType(w, imageContentType)
}
func writeContentType(w http.ResponseWriter, value []string) {
header := w.Header()
if val := header["Content-Type"]; len(val) == 0 {
header["Content-Type"] = value
}
}
// Render (JSON) writes data with json ContentType.
func (j Image) Render(w http.ResponseWriter) (err error) {
if _, err = w.Write(j.Body); err != nil {
err = errors.WithStack(err)
}
return
}