package controller import ( "errors" "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" "github.com/taoshihan1991/imaptool/common" "github.com/taoshihan1991/imaptool/models" "github.com/taoshihan1991/imaptool/tools" "github.com/taoshihan1991/imaptool/ws" "io/ioutil" "log" "os" "strings" ) func PostInstall(c *gin.Context) { notExist, _ := tools.IsFileNotExist("./install.lock") if !notExist { c.JSON(200, gin.H{ "code": 400, "msg": "系统已经安装过了", }) return } server := c.PostForm("server") port := c.PostForm("port") database := c.PostForm("database") username := c.PostForm("username") password := c.PostForm("password") dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, server, port, database) _, err := gorm.Open("mysql", dsn) if err != nil { log.Println(err) tools.Logger().Println(err) c.JSON(200, gin.H{ "code": 400, "msg": "数据库连接失败:" + err.Error(), }) return } isExist, _ := tools.IsFileExist(common.Dir) if !isExist { os.Mkdir(common.Dir, os.ModePerm) } fileConfig := common.MysqlConf file, _ := os.OpenFile(fileConfig, os.O_RDWR|os.O_CREATE, os.ModePerm) format := `{ "Server":"%s", "Port":"%s", "Database":"%s", "Username":"%s", "Password":"%s" } ` data := fmt.Sprintf(format, server, port, database, username, password) file.WriteString(data) models.Connect() installFile, _ := os.OpenFile("./install.lock", os.O_RDWR|os.O_CREATE, os.ModePerm) installFile.WriteString("gofly live chat") ok, err := install() if !ok { c.JSON(200, gin.H{ "code": 200, "msg": err.Error(), }) return } c.JSON(200, gin.H{ "code": 200, "msg": "安装成功", }) } func install() (bool, error) { sqlFile := common.Dir + "go-fly.sql" isExit, _ := tools.IsFileExist(common.MysqlConf) dataExit, _ := tools.IsFileExist(sqlFile) if !isExit || !dataExit { return false, errors.New("config/mysql.json 数据库配置文件或者数据库文件go-fly.sql不存在") } sqls, _ := ioutil.ReadFile(sqlFile) sqlArr := strings.Split(string(sqls), "|") for _, sql := range sqlArr { if sql == "" { continue } err := models.Execute(sql) if err == nil { log.Println(sql, "\t success!") } else { log.Println(sql, err, "\t failed!") } } return true, nil } func MainCheckAuth(c *gin.Context) { id, _ := c.Get("kefu_id") userinfo := models.FindUserRole("user.avator,user.name,user.id, role.name role_name", id) c.JSON(200, gin.H{ "code": 200, "msg": "验证成功", "result": gin.H{ "avator": userinfo.Avator, "name": userinfo.Name, "role_name": userinfo.RoleName, }, }) } func GetStatistics(c *gin.Context) { visitors := models.CountVisitors() message := models.CountMessage() session := len(ws.ClientList) kefuNum := 0 for _, kefus := range ws.KefuList { kefuNum += len(kefus) } c.JSON(200, gin.H{ "code": 200, "msg": "ok", "result": gin.H{ "visitors": visitors, "message": message, "session": session + kefuNum, }, }) }