71 lines
2.1 KiB
Go
71 lines
2.1 KiB
Go
package admin
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/mattnite/forgejo-tickets/internal/auth"
|
|
"github.com/mattnite/forgejo-tickets/internal/config"
|
|
"github.com/mattnite/forgejo-tickets/internal/email"
|
|
"github.com/mattnite/forgejo-tickets/internal/forgejo"
|
|
"github.com/mattnite/forgejo-tickets/internal/middleware"
|
|
"github.com/mattnite/forgejo-tickets/internal/templates"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Dependencies struct {
|
|
DB *gorm.DB
|
|
Renderer *templates.Renderer
|
|
Auth *auth.Service
|
|
SessionStore *auth.PGStore
|
|
EmailClient *email.Client
|
|
ForgejoClient *forgejo.Client
|
|
Config *config.Config
|
|
}
|
|
|
|
func NewRouter(deps Dependencies) *gin.Engine {
|
|
r := gin.New()
|
|
|
|
r.Use(middleware.RequestID)
|
|
r.Use(middleware.Logging)
|
|
r.Use(middleware.Recovery)
|
|
|
|
tsAuth := &TailscaleAuth{allowedUsers: deps.Config.TailscaleAllowedUsers}
|
|
r.Use(tsAuth.Middleware)
|
|
|
|
csrfSecret := []byte(deps.Config.SessionSecret)
|
|
isSecure := strings.HasPrefix(deps.Config.BaseURL, "https")
|
|
csrfMiddleware := middleware.CSRF(csrfSecret, isSecure)
|
|
|
|
csrf := r.Group("/")
|
|
csrf.Use(csrfMiddleware)
|
|
{
|
|
dashboardHandler := &DashboardHandler{deps: deps}
|
|
csrf.GET("/", dashboardHandler.Index)
|
|
|
|
userHandler := &UserHandler{deps: deps}
|
|
csrf.GET("/users", userHandler.List)
|
|
csrf.GET("/users/pending", userHandler.PendingList)
|
|
csrf.GET("/users/new", userHandler.NewForm)
|
|
csrf.GET("/users/:id", userHandler.Detail)
|
|
csrf.POST("/users", userHandler.Create)
|
|
csrf.POST("/users/:id/approve", userHandler.Approve)
|
|
csrf.POST("/users/:id/reject", userHandler.Reject)
|
|
csrf.POST("/users/:id/repos", userHandler.UpdateRepos)
|
|
|
|
ticketHandler := &TicketHandler{deps: deps}
|
|
csrf.GET("/tickets", ticketHandler.List)
|
|
csrf.GET("/tickets/:id", ticketHandler.Detail)
|
|
csrf.POST("/tickets/:id/status", ticketHandler.UpdateStatus)
|
|
|
|
repoHandler := &RepoHandler{deps: deps}
|
|
csrf.GET("/repos", repoHandler.List)
|
|
csrf.GET("/repos/new", repoHandler.NewForm)
|
|
csrf.POST("/repos", repoHandler.Create)
|
|
csrf.GET("/repos/:id/edit", repoHandler.EditForm)
|
|
csrf.POST("/repos/:id", repoHandler.Update)
|
|
}
|
|
|
|
return r
|
|
}
|