fix bug of main.go
This commit is contained in:
parent
5d02ca9fca
commit
bcf80842b0
|
|
@ -1,5 +1,5 @@
|
|||
postgres:
|
||||
host: "192.168.2.103"
|
||||
host: "192.168.1.20"
|
||||
port: 5432
|
||||
database: "demo"
|
||||
user: "postgres"
|
||||
|
|
@ -38,14 +38,14 @@ ants:
|
|||
|
||||
# redis config
|
||||
locker_redis:
|
||||
addr: "192.168.2.104:6379"
|
||||
addr: "127.0.0.1:6379"
|
||||
password: ""
|
||||
db: 1
|
||||
poolsize: 50
|
||||
timeout: 10
|
||||
|
||||
storage_redis:
|
||||
addr: "192.168.2.104:6379"
|
||||
addr: "127.0.0.1:6379"
|
||||
password: ""
|
||||
db: 0
|
||||
poolsize: 50
|
||||
|
|
@ -60,7 +60,7 @@ base:
|
|||
# modelRT service config
|
||||
service:
|
||||
service_name: "modelRT"
|
||||
secret_key: "modelRT"
|
||||
secret_key: "modelrt_key"
|
||||
|
||||
# dataRT api config
|
||||
dataRT:
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ func AttrDeleteHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error(c, "Failed to unmarshal attribute delete request", "error", err)
|
||||
logger.Error(c, "failed to unmarshal attribute delete request", "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
|
|
@ -37,7 +37,7 @@ func AttrDeleteHandler(c *gin.Context) {
|
|||
|
||||
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
|
||||
if err := rs.GETDEL(request.AttrToken); err != nil {
|
||||
logger.Error(c, "Failed to delete attribute from Redis", "attr_token", request.AttrToken, "error", err)
|
||||
logger.Error(c, "failed to delete attribute from Redis", "attr_token", request.AttrToken, "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ func AttrGetHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error(c, "Failed to unmarshal attribute get request", "error", err)
|
||||
logger.Error(c, "failed to unmarshal attribute get request", "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
|
|
@ -42,7 +42,7 @@ func AttrGetHandler(c *gin.Context) {
|
|||
attrModel, err := database.ParseAttrToken(c, tx, request.AttrToken, clientToken)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
logger.Error(c, "Failed to parse attribute token", "attr_token", request.AttrToken, "error", err)
|
||||
logger.Error(c, "failed to parse attribute token", "attr_token", request.AttrToken, "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ func AttrSetHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error(c, "Failed to unmarshal attribute set request", "error", err)
|
||||
logger.Error(c, "failed to unmarshal attribute set request", "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
|
|
@ -39,7 +39,7 @@ func AttrSetHandler(c *gin.Context) {
|
|||
// The logic for handling Redis operations directly from the handler
|
||||
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
|
||||
if err := rs.Set(request.AttrToken, request.AttrValue); err != nil {
|
||||
logger.Error(c, "Failed to set attribute value in Redis", "attr_token", request.AttrToken, "error", err)
|
||||
logger.Error(c, "failed to set attribute value in Redis", "attr_token", request.AttrToken, "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ func MeasurementGetHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error(c, "Failed to unmarshal measurement get request", "error", err)
|
||||
logger.Error(c, "failed to unmarshal measurement get request", "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
|
|
|
|||
|
|
@ -15,6 +15,15 @@ import (
|
|||
func MeasurementRecommendHandler(c *gin.Context) {
|
||||
var request network.MeasurementRecommendRequest
|
||||
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error(c, "failed to unmarshal measurement recommend request", "error", err)
|
||||
c.JSON(http.StatusOK, network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
recommends, err := model.RedisSearchRecommend(c, request.Input)
|
||||
if err != nil {
|
||||
logger.Error(c, "failed to get recommend data from redis", "input", request.Input, "error", err)
|
||||
|
|
|
|||
83
main.go
83
main.go
|
|
@ -66,7 +66,7 @@ func main() {
|
|||
panic(err)
|
||||
}
|
||||
|
||||
serviceToken, err := util.GenerateClientToken(hostName, modelRTConfig.ServiceConfig.ServiceName)
|
||||
serviceToken, err := util.GenerateClientToken(hostName, modelRTConfig.ServiceConfig.ServiceName, modelRTConfig.ServiceConfig.SecretKey)
|
||||
if err != nil {
|
||||
logger.Error(ctx, "generate client token failed", "error", err)
|
||||
panic(err)
|
||||
|
|
@ -136,8 +136,46 @@ func main() {
|
|||
// TODO 暂时屏蔽完成 swagger 启动测试
|
||||
// go realtimedata.RealTimeDataComputer(ctx, nil, []string{}, "")
|
||||
|
||||
// use release mode in productio
|
||||
// gin.SetMode(gin.ReleaseMode)
|
||||
engine := gin.New()
|
||||
router.RegisterRoutes(engine, serviceToken)
|
||||
|
||||
// real time data api
|
||||
engine.GET("/ws/rtdatas", handler.RealTimeDataReceivehandler)
|
||||
|
||||
// anchor api
|
||||
engine.POST("/model/anchor_replace", handler.ComponentAnchorReplaceHandler)
|
||||
|
||||
// alert api
|
||||
engine.GET("/alert/events/query", handler.QueryAlertEventHandler)
|
||||
|
||||
// real time data api
|
||||
engine.GET("/rt/datas/query", handler.QueryRealTimeDataHandler)
|
||||
|
||||
// dashborad api
|
||||
dashboard := engine.Group("/dashboard", limiter.Middleware)
|
||||
{
|
||||
dashboard.GET("/load", nil)
|
||||
dashboard.GET("/query", nil)
|
||||
dashboard.POST("/create", nil)
|
||||
dashboard.POST("/update", nil)
|
||||
dashboard.POST("/delete", nil)
|
||||
}
|
||||
|
||||
// Swagger UI
|
||||
engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||
|
||||
// 注册 Swagger UI 路由
|
||||
// docs.SwaggerInfo.BasePath = "/model"
|
||||
// v1 := engine.Group("/api/v1")
|
||||
// {
|
||||
// eg := v1.Group("/example")
|
||||
// {
|
||||
// eg.GET("/helloworld", Helloworld)
|
||||
// }
|
||||
// }
|
||||
|
||||
server := http.Server{
|
||||
Addr: ":8080",
|
||||
Handler: engine,
|
||||
|
|
@ -164,47 +202,4 @@ func main() {
|
|||
logger.Error(ctx, "Server closed unexpected", "err", err)
|
||||
}
|
||||
}
|
||||
|
||||
// real time data api
|
||||
engine.GET("/ws/rtdatas", handler.RealTimeDataReceivehandler)
|
||||
|
||||
// anchor api
|
||||
engine.POST("/model/anchor_replace", handler.ComponentAnchorReplaceHandler)
|
||||
|
||||
// alert api
|
||||
engine.GET("/alert/events/query", handler.QueryAlertEventHandler)
|
||||
|
||||
// real time data api
|
||||
engine.GET("/rt/datas/query", handler.QueryRealTimeDataHandler)
|
||||
|
||||
// dashborad api
|
||||
dashboard := engine.Group("/dashboard", limiter.Middleware)
|
||||
{
|
||||
dashboard.GET("/load", nil)
|
||||
dashboard.GET("/query", nil)
|
||||
dashboard.POST("/create", nil)
|
||||
dashboard.POST("/update", nil)
|
||||
dashboard.POST("/delete", nil)
|
||||
}
|
||||
|
||||
// engine.Group()
|
||||
// Swagger UI
|
||||
engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||
|
||||
// 注册 Swagger UI 路由
|
||||
// docs.SwaggerInfo.BasePath = "/model"
|
||||
// v1 := engine.Group("/api/v1")
|
||||
// {
|
||||
// eg := v1.Group("/example")
|
||||
// {
|
||||
// eg.GET("/helloworld", Helloworld)
|
||||
// }
|
||||
// }
|
||||
|
||||
// start route with 8080 port
|
||||
engine.Run(":8080")
|
||||
|
||||
// Redis hashmap 母线模型、异步电动机模型
|
||||
|
||||
// kv key name value busx
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ var RecursiveSQL = `WITH RECURSIVE recursive_tree as (
|
|||
FROM "Topologic"
|
||||
WHERE uuid_from = ?
|
||||
UNION ALL
|
||||
SELECT t.uuid_from,t.uuid_to,t.page_id,t.flag
|
||||
SELECT t.uuid_from,t.uuid_to,t.flag
|
||||
FROM "Topologic" t
|
||||
JOIN recursive_tree rt ON t.uuid_from = rt.uuid_to
|
||||
)
|
||||
|
|
|
|||
|
|
@ -12,15 +12,20 @@ import (
|
|||
)
|
||||
|
||||
// GenerateClientToken define func of generate a secure token for client identification
|
||||
func GenerateClientToken(host string, serviceName string) (string, error) {
|
||||
uniqueID := fmt.Sprintf("%d", time.Now().UnixNano())
|
||||
clientInfo := fmt.Sprintf("host=%s;service=%s;id=%s", host, serviceName, uniqueID)
|
||||
secretKey := os.Getenv("TOKEN_SECRET_KEY")
|
||||
if secretKey == "" {
|
||||
return "", fmt.Errorf("TOKEN_SECRET_KEY environment variable not set")
|
||||
func GenerateClientToken(host string, serviceName string, secretKey string) (string, error) {
|
||||
finalSecretKey := secretKey
|
||||
if finalSecretKey == "" {
|
||||
finalSecretKey = os.Getenv("TOKEN_SECRET_KEY")
|
||||
}
|
||||
|
||||
mac := hmac.New(sha256.New, []byte(secretKey))
|
||||
if finalSecretKey == "" {
|
||||
return "", fmt.Errorf("TOKEN_SECRET_KEY environment variable not set and no key provided in parameters")
|
||||
}
|
||||
|
||||
uniqueID := fmt.Sprintf("%d", time.Now().UnixNano())
|
||||
clientInfo := fmt.Sprintf("host=%s;service=%s;id=%s", host, serviceName, uniqueID)
|
||||
|
||||
mac := hmac.New(sha256.New, []byte(finalSecretKey))
|
||||
mac.Write([]byte(clientInfo))
|
||||
signature := mac.Sum(nil)
|
||||
|
||||
|
|
@ -61,40 +66,3 @@ func verifyClientToken(token string, secretKey string) (bool, string, error) {
|
|||
clientInfo := string(clientInfoBytes)
|
||||
return true, clientInfo, nil
|
||||
}
|
||||
|
||||
// --- 示例使用 ---
|
||||
|
||||
func main() {
|
||||
// 模拟获取客户端信息
|
||||
// 实际应用中,host 可以通过获取本地主机名,serviceName 可以是当前服务的标识。
|
||||
host, err := os.Hostname()
|
||||
if err != nil {
|
||||
fmt.Println("Error getting hostname:", err)
|
||||
host = "unknown-host"
|
||||
}
|
||||
serviceName := "my-web-service" // 替换为你的服务名
|
||||
|
||||
// 设置一个示例密钥(在实际应用中,请从环境变量加载)
|
||||
// export TOKEN_SECRET_KEY="your-super-secret-key-here"
|
||||
os.Setenv("TOKEN_SECRET_KEY", "my-super-secret-and-long-key-for-hmac")
|
||||
|
||||
token, err := GenerateClientToken(host, serviceName)
|
||||
if err != nil {
|
||||
fmt.Println("Error generating token:", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("Generated Token:", token)
|
||||
|
||||
// --- 验证 Token (示例) ---
|
||||
// 在接收方,你需要实现一个验证函数
|
||||
isValid, clientInfo, err := verifyClientToken(token, os.Getenv("TOKEN_SECRET_KEY"))
|
||||
if err != nil {
|
||||
fmt.Println("Error verifying token:", err)
|
||||
} else if isValid {
|
||||
fmt.Println("Token is valid!")
|
||||
fmt.Println("Client Info:", clientInfo) // 包含 host, service, id
|
||||
} else {
|
||||
fmt.Println("Token is invalid.")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue