mirror of
https://github.com/sipeed/NanoKVM.git
synced 2026-09-11 00:22:56 -05:00
88 lines
1.6 KiB
Go
88 lines
1.6 KiB
Go
package tailscale
|
|
|
|
import (
|
|
"NanoKVM-Server/proto"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func Login(c *gin.Context) {
|
|
var rsp proto.Response
|
|
|
|
// check tailscale status
|
|
cli := NewCli()
|
|
status, err := cli.Status()
|
|
if err != nil {
|
|
_ = cli.Start()
|
|
status, err = cli.Status()
|
|
}
|
|
|
|
if err != nil {
|
|
log.Errorf("failed to get tailscale status: %s", err)
|
|
rsp.ErrRsp(c, -1, "unknown status")
|
|
return
|
|
}
|
|
|
|
if status.BackendState == "Running" {
|
|
rsp.OkRspWithData(c, &proto.LoginTailscaleRsp{})
|
|
return
|
|
}
|
|
|
|
// get login url
|
|
url, err := cli.Login()
|
|
if err != nil {
|
|
log.Errorf("failed to run tailscale login: %s", err)
|
|
rsp.ErrRsp(c, -2, "login failed")
|
|
return
|
|
}
|
|
|
|
rsp.OkRspWithData(c, &proto.LoginTailscaleRsp{
|
|
Url: url,
|
|
})
|
|
|
|
log.Debugf("tailscale login url: %s", url)
|
|
}
|
|
|
|
func Logout(c *gin.Context) {
|
|
var rsp proto.Response
|
|
|
|
err := NewCli().Logout()
|
|
if err != nil {
|
|
rsp.ErrRsp(c, -1, "logout failed")
|
|
log.Errorf("failed to run tailscale logout: %s", err)
|
|
return
|
|
}
|
|
|
|
rsp.OkRsp(c)
|
|
log.Debugf("tailscale logout successfully")
|
|
}
|
|
|
|
func Restart(c *gin.Context) {
|
|
var rsp proto.Response
|
|
|
|
err := NewCli().Restart()
|
|
if err != nil {
|
|
rsp.ErrRsp(c, -1, "restart failed")
|
|
log.Errorf("failed to run tailscale restart: %s", err)
|
|
return
|
|
}
|
|
|
|
rsp.OkRsp(c)
|
|
log.Debugf("tailscale restart successfully")
|
|
}
|
|
|
|
func Stop(c *gin.Context) {
|
|
var rsp proto.Response
|
|
|
|
err := NewCli().Stop()
|
|
if err != nil {
|
|
rsp.ErrRsp(c, -1, "stop failed")
|
|
log.Errorf("failed to run tailscale stop: %s", err)
|
|
return
|
|
}
|
|
|
|
rsp.OkRsp(c)
|
|
log.Debugf("tailscale stop successfully")
|
|
}
|