mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[feature] Debug admin endpoint to clear caches (#2940)
* [feature] Debug admin endpoint to clear caches * go fmt
This commit is contained in:
@@ -23,6 +23,7 @@ import (
|
||||
"codeberg.org/gruf/go-debug"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/processing"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/state"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -56,6 +57,7 @@ const (
|
||||
InstanceRulesPathWithID = InstanceRulesPath + "/:" + IDKey
|
||||
DebugPath = BasePath + "/debug"
|
||||
DebugAPUrlPath = DebugPath + "/apurl"
|
||||
DebugClearCachesPath = DebugPath + "/caches/clear"
|
||||
|
||||
IDKey = "id"
|
||||
FilterQueryKey = "filter"
|
||||
@@ -73,11 +75,13 @@ const (
|
||||
|
||||
type Module struct {
|
||||
processor *processing.Processor
|
||||
state *state.State
|
||||
}
|
||||
|
||||
func New(processor *processing.Processor) *Module {
|
||||
func New(state *state.State, processor *processing.Processor) *Module {
|
||||
return &Module{
|
||||
processor: processor,
|
||||
state: state,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,5 +149,6 @@ func (m *Module) Route(attachHandler func(method string, path string, f ...gin.H
|
||||
// debug stuff
|
||||
if debug.DEBUG {
|
||||
attachHandler(http.MethodGet, DebugAPUrlPath, m.DebugAPUrlHandler)
|
||||
attachHandler(http.MethodPost, DebugClearCachesPath, m.DebugClearCachesHandler)
|
||||
}
|
||||
}
|
||||
|
@@ -105,7 +105,7 @@ func (suite *AdminStandardTestSuite) SetupTest() {
|
||||
suite.sentEmails = make(map[string]string)
|
||||
suite.emailSender = testrig.NewEmailSender("../../../../web/template/", suite.sentEmails)
|
||||
suite.processor = testrig.NewTestProcessor(&suite.state, suite.federator, suite.emailSender, suite.mediaManager)
|
||||
suite.adminModule = admin.New(suite.processor)
|
||||
suite.adminModule = admin.New(&suite.state, suite.processor)
|
||||
testrig.StandardDBSetup(suite.db, nil)
|
||||
testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media")
|
||||
}
|
||||
|
@@ -73,3 +73,35 @@ import (
|
||||
// '500':
|
||||
// description: internal server error
|
||||
func (m *Module) DebugAPUrlHandler(c *gin.Context) {}
|
||||
|
||||
// DebugClearCachesHandler swagger:operation POST /api/v1/admin/debug/caches/clear debugClearCaches
|
||||
//
|
||||
// Sweep/clear all in-memory caches.
|
||||
//
|
||||
// Only enabled / exposed if GoToSocial was built and is running with flag DEBUG=1.
|
||||
//
|
||||
// ---
|
||||
// tags:
|
||||
// - debug
|
||||
//
|
||||
// produces:
|
||||
// - application/json
|
||||
//
|
||||
// security:
|
||||
// - OAuth2 Bearer:
|
||||
// - admin
|
||||
//
|
||||
// responses:
|
||||
// '200':
|
||||
// description: All good baby!
|
||||
// '400':
|
||||
// description: bad request
|
||||
// '401':
|
||||
// description: unauthorized
|
||||
// '404':
|
||||
// description: not found
|
||||
// '406':
|
||||
// description: not acceptable
|
||||
// '500':
|
||||
// description: internal server error
|
||||
func (m *Module) DebugClearCachesHandler(c *gin.Context) {}
|
||||
|
@@ -56,3 +56,27 @@ func (m *Module) DebugAPUrlHandler(c *gin.Context) {
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
func (m *Module) DebugClearCachesHandler(c *gin.Context) {
|
||||
authed, err := oauth.Authed(c, true, true, true, true)
|
||||
if err != nil {
|
||||
apiutil.ErrorHandler(c, gtserror.NewErrorUnauthorized(err, err.Error()), m.processor.InstanceGetV1)
|
||||
return
|
||||
}
|
||||
|
||||
if !*authed.User.Admin {
|
||||
err := fmt.Errorf("user %s not an admin", authed.User.ID)
|
||||
apiutil.ErrorHandler(c, gtserror.NewErrorForbidden(err, err.Error()), m.processor.InstanceGetV1)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := apiutil.NegotiateAccept(c, apiutil.JSONAcceptHeaders...); err != nil {
|
||||
apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1)
|
||||
return
|
||||
}
|
||||
|
||||
// Sweep all caches down to 0 (empty).
|
||||
m.state.Caches.Sweep(0)
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"status": "OK"})
|
||||
}
|
||||
|
Reference in New Issue
Block a user