提交 3627eb5a 编写于 作者: J Jason

将session中间件 和 basic auth中间件移到 api 中

上级 1bc177e5
......@@ -5,6 +5,7 @@ import (
"git.zgwit.com/zgwit/iot-admin/conf"
"git.zgwit.com/zgwit/iot-admin/models"
"github.com/gorilla/mux"
"github.com/quasoft/memstore"
"net/http"
"reflect"
)
......@@ -31,6 +32,7 @@ type paramId2 struct {
Id int64 `uri:"id"`
Id2 int64 `uri:"id2"`
}
//
//var (
// cookieNameForSessionID = "iot-admin"
......@@ -53,15 +55,40 @@ type paramId2 struct {
func RegisterRoutes(app *mux.Router) {
if conf.Config.SysAdmin.Enable {
//启用session
store := memstore.NewMemStore([]byte("iot-admin"), []byte("iot-admin"))
app.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
sess, err := store.Get(request, "iot-admin")
if err != nil {
http.Error(writer, err.Error(), http.StatusInternalServerError)
return
}
if sess.IsNew {
_ = sess.Save(request, writer)
}
//TODO 检查session,及权限
next.ServeHTTP(writer, request)
})
})
//检查 session,必须登录
//app.Use(mustLogin)
} else if conf.Config.BaseAuth.Enable {
//检查HTTP认证
app.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
if username, password, ok := request.BasicAuth(); ok {
if pass, ok := conf.Config.BaseAuth.Users[username]; ok && password == pass {
next.ServeHTTP(writer, request)
return
}
}
writer.Header().Set("WWW-Authenticate", `Basic realm="Please enter your username and password for this site"`)
http.Error(writer, "Unauthorised", http.StatusUnauthorized)
})
})
//app.Use(gin.BasicAuth(gin.Accounts(conf.Config.BaseAuth.Users)))
//authConfig := basicauth.Config{
// Users: conf.Config.BaseAuth.Users,
//}
//app.Use(basicauth.New(authConfig))
} else {
//支持匿名访问
}
......@@ -75,7 +102,7 @@ func RegisterRoutes(app *mux.Router) {
"disabled"}
app.HandleFunc("/project/{id}/tunnels", curdApiListById(mod, "project_id")).Methods("POST")
app.HandleFunc("/tunnels", curdApiList(mod)).Methods("POST")
app.HandleFunc("/tunnel", curdApiCreate(mod, nil)).Methods("POST") //TODO 启动
app.HandleFunc("/tunnel", curdApiCreate(mod, nil)).Methods("POST") //TODO 启动
app.HandleFunc("/tunnel/{id}", curdApiDelete(mod, nil)).Methods("DELETE") //TODO 停止
app.HandleFunc("/tunnel/{id}", curdApiModify(mod, fields, nil)).Methods("PUT") //TODO 重新启动
app.HandleFunc("/tunnel/{id}", curdApiGet(mod)).Methods("GET")
......@@ -90,7 +117,7 @@ func RegisterRoutes(app *mux.Router) {
fields = []string{"name"}
app.HandleFunc("/tunnel/{id}/links", curdApiListById(mod, "tunnel_id")).Methods("POST")
app.HandleFunc("/links", curdApiList(mod)).Methods("POST")
app.HandleFunc("/link/{id}", curdApiDelete(mod, nil)).Methods("DELETE") //TODO 停止
app.HandleFunc("/link/{id}", curdApiDelete(mod, nil)).Methods("DELETE") //TODO 停止
app.HandleFunc("/link/{id}", curdApiModify(mod, fields, nil)).Methods("PUT")
app.HandleFunc("/link/{id}", curdApiGet(mod)).Methods("GET")
......@@ -130,12 +157,6 @@ func RegisterRoutes(app *mux.Router) {
app.HandleFunc("/project/{id}", curdApiModify(mod, fields, nil)).Methods("PUT")
app.HandleFunc("/project/{id}", curdApiGet(mod)).Methods("GET")
//app.HandleFunc("/project/{id}/tunnels", nop)
//app.HandleFunc("/project/{id}/variables", nop)
//app.HandleFunc("/project/{id}/batches", nop)
//app.HandleFunc("/project/{id}/jobs", nop)
//app.HandleFunc("/project/{id}/strategies", nop)
//app.HandleFunc("/project/import", projectImport).Methods("POST")
//app.HandleFunc("/project/{id}/export", projectExport).Methods("GET")
//app.HandleFunc("/project/{id}/deploy", projectDeploy).Methods("GET")
......
......@@ -6,7 +6,6 @@ import (
"git.zgwit.com/zgwit/iot-admin/web/open"
wwwFiles "git.zgwit.com/zgwit/iot-admin/web/www"
"github.com/gorilla/mux"
"github.com/quasoft/memstore"
"log"
"net/http"
"time"
......@@ -20,12 +19,6 @@ func Serve() {
app := mux.NewRouter()
//GIN初始化
//app := gin.Default()
//app := iris.New()
//加入swagger会增加10MB多体积,使用github.com/zgwit/swagger-files,去除Map文件,可以节省7MB左右
//Swagger文档,需要先执行swag init生成文档
//app.Get("/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
......@@ -38,23 +31,6 @@ func Serve() {
//开放接口
open.RegisterRoutes(app.PathPrefix("/open").Subrouter())
//启用session
store := memstore.NewMemStore([]byte("iot-admin"), []byte("iot-admin"))
app.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
//sess.ID
sess, err := store.Get(request, "iot-admin")
if err != nil {
http.Error(writer, err.Error(), http.StatusInternalServerError)
return
}
if sess.IsNew {
_ = sess.Save(request, writer)
}
next.ServeHTTP(writer, request)
})
})
//授权检查,启用了SysAdmin的OAuth2,就不能再使用基本HTTP认证了
//if conf.Config.SysAdmin.Enable {
// //注册OAuth2相关接口
......@@ -83,23 +59,17 @@ func Serve() {
}
//前端静态文件
//app.Get("/*any", func(c iris.Context) {
app.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
if request.Method == http.MethodGet {
//支持前端框架的无“#”路由
if request.RequestURI == "/" {
request.URL.Path = "index.html"
} else if _, err := wwwFiles.FS.Stat(wwwFiles.CTX, request.RequestURI); err != nil {
request.URL.Path = "index.html"
}
//TODO 如果未登录,则跳转SysAdmin OAuth2自动授权页面
//文件失效期已经在Handler中处理
wwwFiles.Handler.ServeHTTP(writer, request)
}
})
})
//app.PathPrefix("/").Handler(wwwFiles.Handler).Methods("GET")
app.PathPrefix("/").HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
//支持前端框架的无“#”路由
if request.RequestURI == "/" {
request.URL.Path = "index.html"
} else if _, err := wwwFiles.FS.Stat(wwwFiles.CTX, request.RequestURI); err != nil {
request.URL.Path = "index.html"
}
//文件失效期已经在Handler中处理
wwwFiles.Handler.ServeHTTP(writer, request)
}).Methods("GET")
//监听HTTP
srv := &http.Server{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册