74 lines
2 KiB
Go
74 lines
2 KiB
Go
package v2
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/IceWhaleTech/CasaOS-Common/utils"
|
|
"github.com/IceWhaleTech/CasaOS/codegen"
|
|
"github.com/IceWhaleTech/CasaOS/common"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/httper"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/tidwall/gjson"
|
|
)
|
|
|
|
func (s *CasaOS) SetZerotierNetworkStatus(ctx echo.Context, networkId string) error {
|
|
ip := `,"via":"10.147.19.0"`
|
|
m := make(map[string]string)
|
|
ctx.Bind(&m)
|
|
status := m["status"]
|
|
if status == "online" {
|
|
ip = `,"via":""`
|
|
}
|
|
body := `{
|
|
"routes": [
|
|
{
|
|
"target": "10.147.20.0/24"` + ip + `
|
|
}
|
|
]
|
|
}`
|
|
res, err := httper.ZTPost("/controller/network/"+networkId, body)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return ctx.JSON(http.StatusInternalServerError, codegen.BaseResponse{Message: utils.Ptr(err.Error())})
|
|
}
|
|
info := codegen.GetZTInfoOK{}
|
|
via := gjson.GetBytes(res, "routes.0.via").Str
|
|
info.Id = utils.Ptr(gjson.GetBytes(res, "id").Str)
|
|
info.Name = utils.Ptr(gjson.GetBytes(res, "name").Str)
|
|
if len(via) == 0 {
|
|
info.Status = utils.Ptr("online")
|
|
} else {
|
|
info.Status = utils.Ptr("offline")
|
|
}
|
|
return ctx.JSON(http.StatusOK, info)
|
|
}
|
|
func (s *CasaOS) GetZerotierInfo(ctx echo.Context) error {
|
|
info := codegen.GetZTInfoOK{}
|
|
respBody, err := httper.ZTGet("/controller/network")
|
|
if err != nil {
|
|
return ctx.JSON(http.StatusInternalServerError, codegen.BaseResponse{Message: utils.Ptr(err.Error())})
|
|
}
|
|
|
|
networkNames := gjson.ParseBytes(respBody).Array()
|
|
for _, v := range networkNames {
|
|
res, err := httper.ZTGet("/controller/network/" + v.Str)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return ctx.JSON(http.StatusInternalServerError, codegen.BaseResponse{Message: utils.Ptr(err.Error())})
|
|
}
|
|
name := gjson.GetBytes(res, "name").Str
|
|
if name == common.RANW_NAME {
|
|
via := gjson.GetBytes(res, "routes.0.via").Str
|
|
info.Id = utils.Ptr(gjson.GetBytes(res, "id").Str)
|
|
info.Name = &name
|
|
if len(via) != 0 {
|
|
info.Status = utils.Ptr("online")
|
|
} else {
|
|
info.Status = utils.Ptr("offline")
|
|
}
|
|
break
|
|
}
|
|
}
|
|
return ctx.JSON(http.StatusOK, info)
|
|
}
|