diff --git a/config/config.go b/config/config.go index 5f568c9..15982e4 100644 --- a/config/config.go +++ b/config/config.go @@ -21,7 +21,6 @@ type Config struct { SslKey string SslCacert string // mTLS for device Token string - FontSize int WhiteList map[string]bool DB string } @@ -77,7 +76,6 @@ func Parse(c *cli.Context) *Config { getConfigOpt(yamlCfg, "ssl-cacert", &cfg.SslCacert) getConfigOpt(yamlCfg, "token", &cfg.Token) getConfigOpt(yamlCfg, "db", &cfg.DB) - getConfigOpt(yamlCfg, "font-size", &cfg.FontSize) val, err := yamlCfg.Get("white-list") if err == nil { @@ -91,14 +89,6 @@ func Parse(c *cli.Context) *Config { } } - if cfg.FontSize == 0 { - cfg.FontSize = 16 - } - - if cfg.FontSize < 12 { - cfg.FontSize = 12 - } - if cfg.SslCert != "" && cfg.SslKey != "" { _, err := os.Lstat(cfg.SslCert) if err != nil { diff --git a/http.go b/http.go index 65a385f..716ee47 100644 --- a/http.go +++ b/http.go @@ -3,9 +3,11 @@ package main import ( "database/sql" "embed" + "fmt" "net" "net/http" "path" + "strconv" "strings" "time" @@ -81,22 +83,9 @@ func httpAuth(c *gin.Context) bool { return true } -func initDb(cfg *config.Config) { - db, err := sql.Open("sqlite3", cfg.DB) - if err != nil { - log.Error().Msg(err.Error()) - return - } - defer db.Close() - - db.Exec("CREATE TABLE IF NOT EXISTS account(username TEXT PRIMARY KEY NOT NULL, password TEXT NOT NULL)") -} - func httpStart(br *broker) { cfg := br.cfg - initDb(cfg) - httpSessions = cache.New(30*time.Minute, 5*time.Second) gin.SetMode(gin.ReleaseMode) @@ -115,22 +104,54 @@ func httpStart(br *broker) { }) authorized.GET("/fontsize", func(c *gin.Context) { - c.JSON(http.StatusOK, gin.H{"size": cfg.FontSize}) + db, err := sql.Open("sqlite3", cfg.DB) + if err != nil { + log.Error().Msg(err.Error()) + c.Status(http.StatusInternalServerError) + return + } + defer db.Close() + + value := "16" + + db.QueryRow("SELECT value FROM config WHERE name = 'FontSize'").Scan(&value) + + FontSize, _ := strconv.Atoi(value) + + c.JSON(http.StatusOK, gin.H{"size": FontSize}) }) authorized.POST("/fontsize", func(c *gin.Context) { - type Resp struct { - Size int `json:"size"` - } - var r Resp - err := c.BindJSON(&r) + data := make(map[string]int) + + err := c.BindJSON(&data) if err != nil { c.Status(http.StatusBadRequest) return } - cfg.FontSize = r.Size - c.String(http.StatusOK, "OK") + size, ok := data["size"] + if !ok { + c.Status(http.StatusBadRequest) + return + } + + db, err := sql.Open("sqlite3", cfg.DB) + if err != nil { + log.Error().Msg(err.Error()) + c.Status(http.StatusInternalServerError) + return + } + defer db.Close() + + if size < 12 { + size = 12 + } + + db.Exec("DELETE FROM config WHERE name = 'FontSize'") + db.Exec("INSERT INTO config values('FontSize',?)", fmt.Sprintf("%d", size)) + + c.Status(http.StatusOK) }) authorized.GET("/connect/:devid", func(c *gin.Context) { diff --git a/main.go b/main.go index 9c9b006..17b5d12 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "database/sql" "fmt" "os" "runtime" @@ -13,6 +14,19 @@ import ( "github.com/zhaojh329/rttys/version" ) +func initDb(cfg *config.Config) { + db, err := sql.Open("sqlite3", cfg.DB) + if err != nil { + log.Error().Msg(err.Error()) + return + } + defer db.Close() + + db.Exec("CREATE TABLE IF NOT EXISTS config(name TEXT PRIMARY KEY NOT NULL, value TEXT NOT NULL)") + + db.Exec("CREATE TABLE IF NOT EXISTS account(username TEXT PRIMARY KEY NOT NULL, password TEXT NOT NULL)") +} + func runRttys(c *cli.Context) { rlog.SetPath(c.String("log")) @@ -34,6 +48,8 @@ func runRttys(c *cli.Context) { log.Info().Msg("Build Time: " + version.BuildTime()) } + initDb(cfg) + br := newBroker(cfg) go br.run() diff --git a/rttys.conf b/rttys.conf index 3ffbeec..2aa5206 100644 --- a/rttys.conf +++ b/rttys.conf @@ -8,8 +8,6 @@ #token: a1d4cdb1a3cd6a0e94aa3599afcddcf5 -# font-size: 16 - # No login required to connect device. # Values can be device IDs separated by spaces, # or a "*" indicates that all devices do not require login