2025-03-29 15:11:25 -07:00
|
|
|
//go:build e2etest
|
|
|
|
|
|
2024-08-17 21:57:14 +02:00
|
|
|
package controller
|
|
|
|
|
|
|
|
|
|
import (
|
2024-08-23 17:04:19 +02:00
|
|
|
"net/http"
|
2025-02-05 18:08:01 +01:00
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
2025-03-29 15:11:25 -07:00
|
|
|
|
2025-02-05 18:08:01 +01:00
|
|
|
"github.com/pocket-id/pocket-id/backend/internal/service"
|
2024-08-17 21:57:14 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func NewTestController(group *gin.RouterGroup, testService *service.TestService) {
|
|
|
|
|
testController := &TestController{TestService: testService}
|
|
|
|
|
|
|
|
|
|
group.POST("/test/reset", testController.resetAndSeedHandler)
|
2025-06-09 12:17:55 -07:00
|
|
|
group.POST("/test/refreshtoken", testController.signRefreshToken)
|
2025-06-06 03:23:51 -07:00
|
|
|
|
|
|
|
|
group.GET("/externalidp/jwks.json", testController.externalIdPJWKS)
|
|
|
|
|
group.POST("/externalidp/sign", testController.externalIdPSignToken)
|
2024-08-17 21:57:14 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type TestController struct {
|
|
|
|
|
TestService *service.TestService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (tc *TestController) resetAndSeedHandler(c *gin.Context) {
|
2025-06-06 03:23:51 -07:00
|
|
|
var baseURL string
|
|
|
|
|
if c.Request.TLS != nil {
|
|
|
|
|
baseURL = "https://" + c.Request.Host
|
|
|
|
|
} else {
|
|
|
|
|
baseURL = "http://" + c.Request.Host
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
skipLdap := c.Query("skip-ldap") == "true"
|
2025-06-27 23:38:02 +02:00
|
|
|
skipSeed := c.Query("skip-seed") == "true"
|
2025-06-06 03:23:51 -07:00
|
|
|
|
2024-08-17 21:57:14 +02:00
|
|
|
if err := tc.TestService.ResetDatabase(); err != nil {
|
2025-03-27 16:48:36 +01:00
|
|
|
_ = c.Error(err)
|
2024-08-17 21:57:14 +02:00
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-26 10:38:15 +01:00
|
|
|
if err := tc.TestService.ResetLock(c.Request.Context()); err != nil {
|
|
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-27 06:34:23 +02:00
|
|
|
if err := tc.TestService.ResetApplicationImages(c.Request.Context()); err != nil {
|
2025-03-27 16:48:36 +01:00
|
|
|
_ = c.Error(err)
|
2024-08-17 21:57:14 +02:00
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-27 23:38:02 +02:00
|
|
|
if !skipSeed {
|
|
|
|
|
if err := tc.TestService.SeedDatabase(baseURL); err != nil {
|
|
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-08-17 21:57:14 +02:00
|
|
|
}
|
|
|
|
|
|
2025-04-10 04:41:22 -07:00
|
|
|
if err := tc.TestService.ResetAppConfig(c.Request.Context()); err != nil {
|
2025-03-27 16:48:36 +01:00
|
|
|
_ = c.Error(err)
|
2024-10-26 00:15:31 +02:00
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-06 03:23:51 -07:00
|
|
|
if !skipLdap {
|
|
|
|
|
if err := tc.TestService.SetLdapTestConfig(c.Request.Context()); err != nil {
|
|
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := tc.TestService.SyncLdap(c.Request.Context()); err != nil {
|
|
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
c.Status(http.StatusNoContent)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (tc *TestController) externalIdPJWKS(c *gin.Context) {
|
|
|
|
|
jwks, err := tc.TestService.GetExternalIdPJWKS()
|
|
|
|
|
if err != nil {
|
2025-05-07 09:38:02 -05:00
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-06 03:23:51 -07:00
|
|
|
c.JSON(http.StatusOK, jwks)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (tc *TestController) externalIdPSignToken(c *gin.Context) {
|
|
|
|
|
var input struct {
|
|
|
|
|
Aud string `json:"aud"`
|
|
|
|
|
Iss string `json:"iss"`
|
|
|
|
|
Sub string `json:"sub"`
|
|
|
|
|
}
|
|
|
|
|
err := c.ShouldBindJSON(&input)
|
|
|
|
|
if err != nil {
|
2025-05-07 09:38:02 -05:00
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-06 03:23:51 -07:00
|
|
|
token, err := tc.TestService.SignExternalIdPToken(input.Iss, input.Sub, input.Aud)
|
|
|
|
|
if err != nil {
|
|
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2025-02-14 17:09:27 +01:00
|
|
|
|
2025-06-06 03:23:51 -07:00
|
|
|
c.Writer.WriteString(token)
|
2024-08-17 21:57:14 +02:00
|
|
|
}
|
2025-06-09 12:17:55 -07:00
|
|
|
|
|
|
|
|
func (tc *TestController) signRefreshToken(c *gin.Context) {
|
|
|
|
|
var input struct {
|
|
|
|
|
UserID string `json:"user"`
|
|
|
|
|
ClientID string `json:"client"`
|
|
|
|
|
RefreshToken string `json:"rt"`
|
|
|
|
|
}
|
|
|
|
|
err := c.ShouldBindJSON(&input)
|
|
|
|
|
if err != nil {
|
|
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
token, err := tc.TestService.SignRefreshToken(input.UserID, input.ClientID, input.RefreshToken)
|
|
|
|
|
if err != nil {
|
|
|
|
|
_ = c.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
c.Writer.WriteString(token)
|
|
|
|
|
}
|