提交 e3071f67 编写于 作者: J Jason

二种

上级 1c47a267
......@@ -14,3 +14,5 @@
# Dependency directories (remove the comment below to include it)
# vendor/
/.idea
/data
/config.yaml
......@@ -17,7 +17,6 @@ type _web struct {
Desc string `yaml:"desc"`
Addr string `yaml:"addr"`
Debug bool `yaml:"debug"`
Cors bool `yaml:"cors"`
}
type _config struct {
......@@ -32,10 +31,9 @@ var Config = _config{
false,
},
_web{
"HTTP服务配置",
"Web服务配置",
":8080",
false,
false,
},
}
......
......@@ -24,7 +24,7 @@ func Connections() *sync.Map {
func Recovery() error {
var cs []storage.Channel
err := storage.ChannelDB().All(&cs)
err := storage.DB("channel").All(&cs)
if err != nil {
return err
}
......@@ -47,7 +47,7 @@ func startChannel(c *storage.Channel) (*Channel, error) {
}
func CreateChannel(c *storage.Channel) (*Channel, error) {
err := storage.ChannelDB().Save(c)
err := storage.DB("channel").Save(c)
if err != nil {
return nil, err
}
......
......@@ -4,7 +4,6 @@ import (
"github.com/zgwit/dtu-admin/conf"
"github.com/zgwit/dtu-admin/dtu"
"github.com/zgwit/dtu-admin/flag"
"github.com/zgwit/dtu-admin/storage"
"github.com/zgwit/dtu-admin/web"
"log"
)
......@@ -31,19 +30,12 @@ func main() {
//加载配置
conf.Load()
err := storage.Open()
if err != nil {
log.Println("数据库错误:", err)
return
}
//初始化
err = dtu.Recovery()
//恢复之前的链接
err := dtu.Recovery()
if err != nil {
log.Println("恢复链接:", err)
return
}
web.Serve()
}
......@@ -14,11 +14,11 @@ type HeartBeatConf struct {
}
type Channel struct {
ID int
ID int `storm:"increment"`
Name string
Tags []string
Serial string `storm:"index"`
Serial string `storm:"index"`
Net string
Addr string
......@@ -42,7 +42,7 @@ type Channel struct {
}
type User struct {
ID int
ID int `storm:"increment"`
Username string `storm:"index"`
Password string
Created time.Time
......
......@@ -3,32 +3,32 @@ package storage
import (
"github.com/asdine/storm/v3"
"github.com/zgwit/dtu-admin/conf"
"log"
"os"
"path/filepath"
"sync"
)
var (
channelDB *storm.DB
)
func Open() error {
var err error
var databases sync.Map
func DB(name string) *storm.DB {
if v, ok := databases.Load(name); ok {
return v.(*storm.DB)
}
path := conf.Config.Storage.Path
err = os.MkdirAll(path, 0755)
err := os.MkdirAll(path, 0755)
if err != nil && !os.IsExist(err) {
return err
log.Fatal(err)
}
channelDB, err = storm.Open(filepath.Join(path, "channels.db"))
db, err := storm.Open(filepath.Join(path, name+".db"))
if err != nil {
return err
log.Fatal(err)
}
return nil
}
func ChannelDB() *storm.DB {
return channelDB
databases.Store(name, db)
return db
}
package api
import "github.com/gin-gonic/gin"
func authLogin(ctx *gin.Context) {
import (
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"github.com/zgwit/dtu-admin/storage"
"time"
)
type loginObj struct {
Username string `json:"username"`
Password string `json:"password"`
Remember bool `json:"remember"`
}
func authLogin(ctx *gin.Context) {
session := sessions.Default(ctx)
var obj loginObj
err := ctx.ShouldBindJSON(&obj)
if err != nil {
responseError(ctx, "参数解析错误"+err.Error())
return
}
userDB := storage.DB("user")
var user storage.User
err = userDB.One("username", obj.Username, &user)
if err != nil {
//初始化root 账户
if obj.Username == "admin" {
user.Username = "admin"
user.Password = "123456"
user.Created = time.Now()
userDB.Save(&user)
} else {
responseError(ctx, "无此用户")
return
}
}
if obj.Password != user.Password {
responseError(ctx, "密码错误")
return
}
session.Set("user", user)
_ = session.Save()
responseOk(ctx, user)
}
func authLogout(ctx *gin.Context) {
func authLogout(ctx *gin.Context) {
}
func authPassword(ctx *gin.Context) {
func authPassword(ctx *gin.Context) {
}
\ No newline at end of file
}
package api
import (
"encoding/gob"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/memstore"
"github.com/gin-gonic/gin"
"log"
"github.com/zgwit/dtu-admin/storage"
"net/http"
)
......@@ -24,13 +26,22 @@ type paramId2 struct {
}
func RegisterRoutes(app *gin.RouterGroup) {
//注册 User类型
gob.Register(&storage.User{})
//启用session
app.Use(sessions.Sessions("dtu-admin", memstore.NewStore([]byte("dtu-admin-secret"))))
app.POST("/login", authLogin)
app.Use(func(ctx *gin.Context) {
//TODO 检查用户是否登录
log.Println("api", ctx.FullPath())
//检查登录
app.Use(func(c *gin.Context) {
session := sessions.Default(c)
if user := session.Get("user"); user != nil {
c.Next()
} else {
c.JSON(http.StatusUnauthorized, gin.H{"error": "Unauthorized"})
c.Abort()
}
})
app.DELETE("/logout", authLogout)
......@@ -52,7 +63,6 @@ func RegisterRoutes(app *gin.RouterGroup) {
app.GET("/channel/:id/connection/:id2/statistic")
app.GET("/channel/:id/connection/:id2/pipe") //转Websocket透传
}
func responseOk(ctx *gin.Context, data interface{}) {
......
package web
import (
"github.com/gin-contrib/cors"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
"github.com/swaggo/files"
......@@ -22,9 +21,6 @@ func Serve() {
//GIN初始化
app := gin.Default()
//跨域咨问题
app.Use(cors.Default())
//前端静态文件
app.Use(static.Serve("/", static.LocalFile("./www/", false)))
......
package open
import (
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"log"
)
func RegisterRoutes(app *gin.RouterGroup) {
//跨域咨问题
app.Use(cors.Default())
app.Use(func(ctx *gin.Context) {
//TODO 检查KEY
log.Println("open", ctx.FullPath())
//log.Println("open", ctx.FullPath())
})
app.GET("/channels")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册