Commit 4c561ae4 authored by 贾浩@五瓣科技's avatar 贾浩@五瓣科技

Initial commit

parents
Pipeline #623 canceled with stages
.idea
*.iml
out
gen
*.sol
*.txt
.DS_Store
*.exe
vertex_api
\ No newline at end of file
```
curl -X POST http://127.0.0.1:8080/api/v1/subscribe -d '{"email": "12@qq.com"}'
{"code":0,"error":""}
```
```
curl -X POST http://127.0.0.1:8080/api/v1/concat -d '{"email": "12@qq.com", "name": "bob", "message": "testmessage"}'
{"code":0,"error":""}
```
\ No newline at end of file
package main
import (
"io"
"net/mail"
"github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus"
"github.com/tidwall/gjson"
)
func userSubscribe(c *gin.Context) {
body, err := io.ReadAll(c.Request.Body)
if err != nil {
c.JSON(200, gin.H{"error": "request parameter error", "code": 1})
return
}
email := gjson.Get(string(body), "email").String()
if _, err = mail.ParseAddress(email); err != nil {
c.JSON(200, gin.H{"error": "request parameter error", "code": 1})
return
}
go func() {
if err = sendSubscribeEmail(email); err != nil {
log.WithField("email", email).Error("send subscribe email error", err.Error())
return
}
log.WithField("email", email).Info("send subscribe email success")
}()
c.JSON(200, gin.H{"error": "", "code": 0})
}
func userContactUs(c *gin.Context) {
body, err := io.ReadAll(c.Request.Body)
if err != nil {
c.JSON(200, gin.H{"error": "request parameter error", "code": 1})
return
}
name := gjson.Get(string(body), "name").String()
email := gjson.Get(string(body), "email").String()
message := gjson.Get(string(body), "message").String()
if len(name) == 0 || len(email) == 0 || len(message) == 0 {
c.JSON(200, gin.H{"error": "request parameter error", "code": 1})
return
}
if _, err = mail.ParseAddress(email); err != nil {
c.JSON(200, gin.H{"error": "request parameter error", "code": 1})
return
}
go func() {
baseLog := log.WithFields(log.Fields{
"email": email,
"name": name,
"message": message,
})
if err = sendContactEmail(name, email, message); err != nil {
baseLog.Error("send contact us email error", err.Error())
return
}
baseLog.Info("send contact us email success")
}()
c.JSON(200, gin.H{"error": "", "code": 0})
}
package main
import (
"flag"
"github.com/BurntSushi/toml"
)
type Config struct {
Listen string `toml:"listen"`
Receiver string `toml:"receiver"`
Email Email `toml:"email"`
}
type Email struct {
Host string `toml:"host"`
Port int `toml:"port"`
Sender string `toml:"sender"`
User string `toml:"user"`
Password string `toml:"password"`
}
var confPath = flag.String("c", "config.toml", "config file path")
func NewConfig() (config *Config, err error) {
config = new(Config)
_, err = toml.DecodeFile(*confPath, config)
return
}
listen = "0.0.0.0:8080"
receiver = "info@vertexnetwork.com"
[email]
host = "smtp.gmail.com"
port = 465
sender = "noreply"
user = "service@cmpscan.io"
password = "nsgonwihymyvbyeg"
\ No newline at end of file
package main
import (
"crypto/tls"
"fmt"
"gopkg.in/gomail.v2"
)
func sendEmail(subject string, body string) error {
m := gomail.NewMessage()
m.SetHeader("From", fmt.Sprintf("%s <%s>", config.Email.Sender, config.Email.User))
m.SetHeader("To", config.Receiver)
m.SetHeader("Subject", subject)
m.SetBody("text/plain", body)
d := gomail.NewDialer(config.Email.Host, config.Email.Port, config.Email.User, config.Email.Password)
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
return d.DialAndSend(m)
}
func sendSubscribeEmail(email string) error {
subject := "User Subscription Request"
content := `Dear team:
A user has subscribed to an email, and his/her email address is: %s
Kind regards,
VertexNetwork Website System
`
content = fmt.Sprintf(content, email)
return sendEmail(subject, content)
}
func sendContactEmail(name, email, message string) error {
subject := "User Contact Us"
content := `Dear team:
A user has sent us a message with the following content:
Name: %s
Email: %s
Message: %s
Kind regards,
VertexNetwork Website System`
content = fmt.Sprintf(content, name, email, message)
return sendEmail(subject, content)
}
module vertex_api
go 1.19
require gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
require (
github.com/BurntSushi/toml v1.3.2 // indirect
github.com/bytedance/sonic v1.10.0-rc2 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/cors v1.4.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.9.1 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.14.1 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.9 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/tidwall/gjson v1.14.4 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.1 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/arch v0.4.0 // indirect
golang.org/x/crypto v0.11.0 // indirect
golang.org/x/net v0.12.0 // indirect
golang.org/x/sys v0.10.0 // indirect
golang.org/x/text v0.11.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
This diff is collapsed.
package main
import (
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
var config *Config
func main() {
_conf, err := NewConfig()
if err != nil {
panic(err)
}
config = _conf
gin.SetMode(gin.ReleaseMode)
e := gin.Default()
_cors := cors.DefaultConfig()
_cors.AllowAllOrigins = true
e.Use(cors.New(_cors))
e.POST("/api/v1/subscribe", userSubscribe)
e.POST("/api/v1/concat", userContactUs)
e.Run(config.Listen)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment