mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-21 17:21:09 +01:00
加入API Token后端
This commit is contained in:
@@ -275,6 +275,12 @@ func main() {
|
||||
authGroup.PUT("/actions", routes.PutAction) // 新增操作
|
||||
//authGroup.POST("/actions/:id", routes.PostAction) // 修改操作
|
||||
}
|
||||
// API Token
|
||||
{
|
||||
authGroup.GET("/tokens", routes.GetTokens) // 获取 Tokens
|
||||
authGroup.PUT("/tokens", routes.PutToken) // 添加 Token
|
||||
authGroup.DELETE("/tokens/:id", routes.DeleteToken) // 删除 Token
|
||||
}
|
||||
// 统计数据
|
||||
authGroup.GET("/stats/home", routes.GetHomeStats) // 首页统计数据
|
||||
// 文件
|
||||
|
||||
@@ -11,14 +11,6 @@ import (
|
||||
|
||||
func AuthorizationMiddleware() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
// 如果为登录或注册,不用校验
|
||||
//if c.Request.URL.Path == "/login" ||
|
||||
// (c.Request.URL.Path == "/users" && c.Request.Method == "PUT") ||
|
||||
// strings.HasSuffix(c.Request.URL.Path, "download") {
|
||||
// c.Next()
|
||||
// return
|
||||
//}
|
||||
|
||||
// 获取token string
|
||||
tokenStr := c.GetHeader("Authorization")
|
||||
|
||||
@@ -46,6 +38,8 @@ func AuthorizationMiddleware() gin.HandlerFunc {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 设置用户
|
||||
c.Set(constants.ContextUser, &user)
|
||||
|
||||
// 校验成功
|
||||
|
||||
80
backend/model/token.go
Normal file
80
backend/model/token.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"crawlab/database"
|
||||
"github.com/apex/log"
|
||||
"github.com/globalsign/mgo/bson"
|
||||
"runtime/debug"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Token struct {
|
||||
Id bson.ObjectId `json:"_id" bson:"_id"`
|
||||
Token string `json:"token" bson:"token"`
|
||||
UserId bson.ObjectId `json:"user_id" bson:"user_id"`
|
||||
CreateTs time.Time `json:"create_ts" bson:"create_ts"`
|
||||
UpdateTs time.Time `json:"update_ts" bson:"update_ts"`
|
||||
}
|
||||
|
||||
func (t *Token) Add() error {
|
||||
s, c := database.GetCol("tokens")
|
||||
defer s.Close()
|
||||
|
||||
if err := c.Insert(t); err != nil {
|
||||
log.Errorf("insert token error: " + err.Error())
|
||||
debug.PrintStack()
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *Token) Delete() error {
|
||||
s, c := database.GetCol("tokens")
|
||||
defer s.Close()
|
||||
|
||||
if err := c.RemoveId(t.Id); err != nil {
|
||||
log.Errorf("insert token error: " + err.Error())
|
||||
debug.PrintStack()
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetTokenById(id bson.ObjectId) (t Token, err error) {
|
||||
s, c := database.GetCol("tokens")
|
||||
defer s.Close()
|
||||
|
||||
if err = c.FindId(id).One(&t); err != nil {
|
||||
return t, err
|
||||
}
|
||||
|
||||
return t, nil
|
||||
}
|
||||
|
||||
func GetTokensByUserId(uid bson.ObjectId) (tokens []Token, err error) {
|
||||
s, c := database.GetCol("tokens")
|
||||
defer s.Close()
|
||||
|
||||
if err = c.Find(bson.M{"user_id": uid}).All(&tokens); err != nil {
|
||||
log.Errorf("find tokens error: " + err.Error())
|
||||
debug.PrintStack()
|
||||
return tokens, err
|
||||
}
|
||||
|
||||
return tokens, nil
|
||||
}
|
||||
|
||||
func DeleteTokenById(id bson.ObjectId) error {
|
||||
t, err := GetTokenById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := t.Delete(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
68
backend/routes/token.go
Normal file
68
backend/routes/token.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"crawlab/model"
|
||||
"crawlab/services"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/globalsign/mgo/bson"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func GetTokens(c *gin.Context) {
|
||||
u := services.GetCurrentUser(c)
|
||||
|
||||
tokens, err := model.GetTokensByUserId(u.Id)
|
||||
if err != nil {
|
||||
HandleError(http.StatusInternalServerError, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, Response{
|
||||
Status: "ok",
|
||||
Message: "success",
|
||||
Data: tokens,
|
||||
})
|
||||
}
|
||||
|
||||
func PutToken(c *gin.Context) {
|
||||
u := services.GetCurrentUser(c)
|
||||
|
||||
tokenStr, err := services.MakeToken(u)
|
||||
if err != nil {
|
||||
HandleError(http.StatusInternalServerError, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
t := model.Token{
|
||||
Id: bson.NewObjectId(),
|
||||
Token: tokenStr,
|
||||
UserId: u.Id,
|
||||
CreateTs: time.Now(),
|
||||
UpdateTs: time.Now(),
|
||||
}
|
||||
|
||||
if err := t.Add(); err != nil {
|
||||
HandleError(http.StatusInternalServerError, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, Response{
|
||||
Status: "ok",
|
||||
Message: "success",
|
||||
})
|
||||
}
|
||||
|
||||
func DeleteToken(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
|
||||
if err := model.DeleteTokenById(bson.ObjectIdHex(id)); err != nil {
|
||||
HandleError(http.StatusInternalServerError, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, Response{
|
||||
Status: "ok",
|
||||
Message: "success",
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user