Files
crawlab/core/controllers/token.go
2024-06-14 15:42:50 +08:00

85 lines
2.0 KiB
Go

package controllers
import (
"github.com/crawlab-team/crawlab/core/container"
"github.com/crawlab-team/crawlab/core/interfaces"
"github.com/crawlab-team/crawlab/core/models/delegate"
"github.com/crawlab-team/crawlab/core/models/models"
"github.com/crawlab-team/crawlab/core/models/service"
"github.com/gin-gonic/gin"
)
var TokenController *tokenController
var TokenActions []Action
type tokenController struct {
ListActionControllerDelegate
d ListActionControllerDelegate
ctx *tokenContext
}
func (ctr *tokenController) Post(c *gin.Context) {
var err error
var t models.Token
if err := c.ShouldBindJSON(&t); err != nil {
HandleErrorBadRequest(c, err)
return
}
u, err := ctr.ctx.userSvc.GetCurrentUser(c)
if err != nil {
HandleErrorUnauthorized(c, err)
return
}
t.Token, err = ctr.ctx.userSvc.MakeToken(u)
if err != nil {
HandleErrorInternalServerError(c, err)
return
}
if err := delegate.NewModelDelegate(&t, GetUserFromContext(c)).Add(); err != nil {
HandleErrorInternalServerError(c, err)
return
}
HandleSuccess(c)
}
type tokenContext struct {
modelSvc service.ModelService
userSvc interfaces.UserService
}
func newTokenContext() *tokenContext {
// context
ctx := &tokenContext{}
// dependency injection
if err := container.GetContainer().Invoke(func(
modelSvc service.ModelService,
userSvc interfaces.UserService,
) {
ctx.modelSvc = modelSvc
ctx.userSvc = userSvc
}); err != nil {
panic(err)
}
return ctx
}
func newTokenController() *tokenController {
modelSvc, err := service.GetService()
if err != nil {
panic(err)
}
ctr := NewListPostActionControllerDelegate(ControllerIdToken, modelSvc.GetBaseService(interfaces.ModelIdToken), TokenActions)
d := NewListPostActionControllerDelegate(ControllerIdToken, modelSvc.GetBaseService(interfaces.ModelIdToken), TokenActions)
ctx := newTokenContext()
return &tokenController{
ListActionControllerDelegate: *ctr,
d: *d,
ctx: ctx,
}
}