Skip to content

Commit

Permalink
实现服务器添加、编辑和删除
Browse files Browse the repository at this point in the history
  • Loading branch information
lifei6671 committed Mar 7, 2017
1 parent a98392a commit 359dbb2
Show file tree
Hide file tree
Showing 16 changed files with 979 additions and 109 deletions.
2 changes: 1 addition & 1 deletion commands/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"fmt"
"strings"
)

// go-git-webhook install -account=admin -password=123456 [email protected]
func Install() {

if len(os.Args) > 2 && os.Args[1] == "install" {
Expand Down
54 changes: 54 additions & 0 deletions controllers/home.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package controllers

import (
"strings"
"go-git-webhook/models"
)

type HomeController struct {
BaseController
}
Expand All @@ -9,4 +14,53 @@ func (c *HomeController) Index() {

c.Layout = ""
c.TplName = "home/index.html"


}

func (c *HomeController) Edit() {
c.Prepare()
c.Layout = ""
c.TplName = "home/edit.html"

if c.Ctx.Input.IsPost() {
id,_ := c.GetInt("id",0)
name := strings.TrimSpace(c.GetString("name",""))
branch := strings.TrimSpace(c.GetString("branch",""))
tag := strings.TrimSpace(c.GetString("tag",""))
shell := strings.TrimSpace(c.GetString("shell",""))

if name == "" {
c.JsonResult(500,"Repository Name is require.")
}
if branch == "" {
branch = "master"
}
if tag == "" {
c.JsonResult(500,"Server Tag is require.")
}
if shell == "" {
c.JsonResult(500,"Callback Shell Script is require.")
}

webHook := models.NewWebHook()

if id > 0 {
if err := webHook.Find(id);err != nil {
c.JsonResult(500,err.Error())
}
if webHook.CreateAt != c.Member.MemberId {
c.JsonResult(403,"Permission denied")
}
}

webHook.RepositoryName = name
webHook.BranchName = branch
webHook.Tag = tag
webHook.Shell = shell
}
}

func (c *HomeController) Delete() {

}
179 changes: 179 additions & 0 deletions controllers/server.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,191 @@
package controllers

import (
"strings"
"go-git-webhook/models"
"go-git-webhook/modules/pager"
"strconv"
"fmt"
"github.com/astaxie/beego/orm"
)

type ServerController struct {
BaseController
}

func (c *ServerController) Index() {
c.Prepare()

c.Layout = ""
c.TplName = "server/index.html"


pageIndex, _ := c.GetInt("page", 1)

var servers []models.Server

pageOptions := pager.PageOptions{
TableName: models.NewServer().TableName(),
EnableFirstLastLink : true,
CurrentPage : pageIndex,
ParamName : "page",
Conditions : " AND create_at = " + strconv.Itoa(c.Member.MemberId) + " order by server_id desc",
}



//返回分页信息,
//第一个:为返回的当前页面数据集合,ResultSet类型
//第二个:生成的分页链接
//第三个:返回总记录数
//第四个:返回总页数
totalItem, totalCount, rs, pageHtml := pager.GetPagerLinks(&pageOptions, c.Ctx)

_,err := rs.QueryRows(&servers) //把当前页面的数据序列化进一个切片内

if err != nil {
fmt.Println(err)
}
fmt.Println(servers)

c.Data["lists"] = servers
c.Data["html"] = pageHtml
c.Data["totalItem"] = totalItem
c.Data["totalCount"] = totalCount

}


func (c *ServerController) Edit() {
c.Prepare()
c.Layout = ""
c.TplName = "server/edit.html"

if c.Ctx.Input.IsPost() {
id,_ := c.GetInt("id",0)
account := c.GetString("account", "")
serverName := c.GetString("name", "");
ipAddress := c.GetString("ip", "")
port, err := c.GetInt("port", 22)
serverType := c.GetString("type", "ssh")
status,_ := c.GetInt("status",0)

if status !=0 && status != 1 {
status = 0
}

if err != nil {
c.JsonResult(500, "端口号错误");
}
tag := c.GetString("tag", "")

key := c.GetString("key", "")

if serverName == "" {
c.JsonResult(500, "Server Name is require.")
}
if ipAddress == "" {
c.JsonResult(500, "Server Ip is require.")
}
if port <= 0 {
c.JsonResult(500, "Port is require.")
}
if tag != "" {

}
if key == "" {
c.JsonResult(500, "SSH Private Key or Account Password is require.")
}

if !strings.EqualFold(serverType, "ssh") && !strings.EqualFold(serverType, "client") {
c.JsonResult(500, "Server Type error.")
}
server := models.NewServer()

if id > 0{
if err := server.Find(id);err != nil {
c.JsonResult(500,err.Error())
}
//如果不是本人创建则返回403
if server.CreateAt != c.Member.MemberId {
c.Abort("403")
}
}

server.Account = account
server.CreateAt = c.Member.MemberId
server.IpAddress = ipAddress
server.Name = serverName
server.Port = port
server.Tag = tag
server.PrivateKey = key
server.Type = serverType
server.Status = status

if err := server.Save(); err != nil {
c.JsonResult(500, "Save failed:" + err.Error())
} else {
data := make(map[string]interface{}, 1)

data["server_id"] = server.ServerId
data["ip_address"] = server.IpAddress
data["port"] = server.Port
data["account"] = server.Account
data["name"] = server.Name
data["type"] = server.Type
data["time"] = server.CreateTime.Format("2006-01-02 15:04:05")
data["status"] = server.Status


c.JsonResult(0, "ok", data)
}
}

id,err := strconv.Atoi(c.Ctx.Input.Param(":id"))
if err != nil {
c.Abort("404")
}
server := models.NewServer()

if err := server.Find(id); err != nil {
c.Abort("404")
}
//如果不是本人创建则返回403
if server.CreateAt != c.Member.MemberId {
c.Abort("403")
}
if c.Ctx.Input.IsAjax() {

c.JsonResult(0,"ok",*server)
}
c.Data["Server"] = server



}

//删除一个Server
func (c *ServerController) Delete() {
id,_ := c.GetInt("id",0)

if id <= 0 {
c.JsonResult(500,"Server ID is require.")
}
server := models.NewServer()

if err := server.Find(id);err != nil {
c.JsonResult(500,err.Error())
}
if server.CreateAt != c.Member.MemberId {
c.JsonResult(403,"Permission denied")
}
if err := server.Delete();err != nil {
c.JsonResult(500,err.Error())
}

webHook := models.NewWebHook()

webHook.DeleteForServerId(id)

c.JsonResult(0,"ok")
}
45 changes: 34 additions & 11 deletions models/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ import (
)

type Server struct {
ServerId int `orm:"pk;auto;unique;column(server_id)"`
Name string `orm:"size(255);column(name);not null"`
Type string `orm:"size(255);column(type);not null;default(ssh)"`
IpAddress string `orm:"size(255);column(ip_address);not null"`
Port int `orm:"type(int);column(port);not null"`
Account string `orm:"size(255);column(account);not null"`
PrivateKey string `orm:"type(text);column(private_key);not null"`
Tag string `orm:"size(1000);column(tag)"`
Status int `orm:"type(int);column(status);default(0)"`
CreateTime time.Time `orm:"type(datetime);column(create_time);auto_now_add"`
CreateAt int `orm:"type(int);column(create_at)"`
ServerId int `orm:"pk;auto;unique;column(server_id)" json:"server_id"`
Name string `orm:"size(255);column(name);not null" json:"name"`
Type string `orm:"size(255);column(type);not null;default(ssh)" json:"type"`
IpAddress string `orm:"size(255);column(ip_address);not null" json:"ip_address"`
Port int `orm:"type(int);column(port);not null" json:"port"`
Account string `orm:"size(255);column(account);not null" json:"account"`
PrivateKey string `orm:"type(text);column(private_key);not null" json:"private_key"`
Tag string `orm:"size(1000);column(tag)" json:"tag"`
Status int `orm:"type(int);column(status);default(0)" json:"status"`
CreateTime time.Time `orm:"type(datetime);column(create_time);auto_now_add" json:"create_time"`
CreateAt int `orm:"type(int);column(create_at)" json:"-"`
}


Expand All @@ -28,6 +28,10 @@ func (m *Server) TableEngine() string {
return "INNODB"
}

func NewServer() *Server {
return &Server{}
}

//根据ID查找对象
func (m *Server) Find(id int) (error) {
o := orm.NewOrm()
Expand Down Expand Up @@ -60,4 +64,23 @@ func (m *Server) GetServerList(pageIndex int,pageSize int) ([]Server,int64,error
return list,0,err
}
return list,count,nil
}

func (m *Server) Save() error {
o := orm.NewOrm()
var err error;

if m.ServerId > 0 {
_,err = o.Update(m)
}else{
_,err = o.Insert(m)
}

return err
}
func (m *Server) Delete() error {
o := orm.NewOrm()
_,err := o.Delete(m)

return err
}
Loading

0 comments on commit 359dbb2

Please sign in to comment.