1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-02-15 01:03:16 +02:00
pocketbase/apis/settings.go

140 lines
3.8 KiB
Go
Raw Normal View History

2022-07-07 00:19:05 +03:00
package apis
import (
"net/http"
validation "github.com/go-ozzo/ozzo-validation/v4"
2022-07-07 00:19:05 +03:00
"github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/forms"
2024-09-29 19:23:19 +03:00
"github.com/pocketbase/pocketbase/tools/router"
2022-07-07 00:19:05 +03:00
)
2022-10-30 10:28:14 +02:00
// bindSettingsApi registers the settings api endpoints.
2024-09-29 19:23:19 +03:00
func bindSettingsApi(app core.App, rg *router.RouterGroup[*core.RequestEvent]) {
subGroup := rg.Group("/settings").Bind(RequireSuperuserAuth())
subGroup.GET("", settingsList)
subGroup.PATCH("", settingsSet)
subGroup.POST("/test/s3", settingsTestS3)
subGroup.POST("/test/email", settingsTestEmail)
subGroup.POST("/apple/generate-client-secret", settingsGenerateAppleClientSecret)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
func settingsList(e *core.RequestEvent) error {
clone, err := e.App.Settings().Clone()
2022-07-07 00:19:05 +03:00
if err != nil {
2024-09-29 19:23:19 +03:00
return e.InternalServerError("", err)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
event := new(core.SettingsListRequestEvent)
event.RequestEvent = e
event.Settings = clone
2023-07-20 10:40:03 +03:00
2024-09-29 19:23:19 +03:00
return e.App.OnSettingsListRequest().Trigger(event, func(e *core.SettingsListRequestEvent) error {
return e.JSON(http.StatusOK, e.Settings)
2022-07-07 00:19:05 +03:00
})
}
2024-09-29 19:23:19 +03:00
func settingsSet(e *core.RequestEvent) error {
event := new(core.SettingsUpdateRequestEvent)
event.RequestEvent = e
2024-09-29 19:23:19 +03:00
if clone, err := e.App.Settings().Clone(); err == nil {
event.OldSettings = clone
} else {
return e.BadRequestError("", err)
}
if clone, err := e.App.Settings().Clone(); err == nil {
event.NewSettings = clone
} else {
return e.BadRequestError("", err)
}
if err := e.BindBody(&event.NewSettings); err != nil {
return e.BadRequestError("An error occurred while loading the submitted data.", err)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
return e.App.OnSettingsUpdateRequest().Trigger(event, func(e *core.SettingsUpdateRequestEvent) error {
err := e.App.Save(e.NewSettings)
if err != nil {
return e.BadRequestError("An error occurred while saving the new settings.", err)
}
2024-09-29 19:23:19 +03:00
appSettings, err := e.App.Settings().Clone()
if err != nil {
return e.InternalServerError("Failed to clone app settings.", err)
}
return e.JSON(http.StatusOK, appSettings)
2022-07-07 00:19:05 +03:00
})
}
2024-09-29 19:23:19 +03:00
func settingsTestS3(e *core.RequestEvent) error {
form := forms.NewTestS3Filesystem(e.App)
2023-05-13 22:10:14 +03:00
// load request
2024-09-29 19:23:19 +03:00
if err := e.BindBody(form); err != nil {
return e.BadRequestError("An error occurred while loading the submitted data.", err)
}
2023-05-13 22:10:14 +03:00
// send
if err := form.Submit(); err != nil {
// form error
if fErr, ok := err.(validation.Errors); ok {
2024-09-29 19:23:19 +03:00
return e.BadRequestError("Failed to test the S3 filesystem.", fErr)
2023-05-13 22:10:14 +03:00
}
2023-05-13 22:10:14 +03:00
// mailer error
2024-09-29 19:23:19 +03:00
return e.BadRequestError("Failed to test the S3 filesystem. Raw error: \n"+err.Error(), nil)
}
2024-09-29 19:23:19 +03:00
return e.NoContent(http.StatusNoContent)
}
2024-09-29 19:23:19 +03:00
func settingsTestEmail(e *core.RequestEvent) error {
form := forms.NewTestEmailSend(e.App)
// load request
2024-09-29 19:23:19 +03:00
if err := e.BindBody(form); err != nil {
return e.BadRequestError("An error occurred while loading the submitted data.", err)
}
// send
if err := form.Submit(); err != nil {
2023-03-01 23:29:45 +02:00
// form error
if fErr, ok := err.(validation.Errors); ok {
2024-09-29 19:23:19 +03:00
return e.BadRequestError("Failed to send the test email.", fErr)
}
// mailer error
2024-09-29 19:23:19 +03:00
return e.BadRequestError("Failed to send the test email. Raw error: \n"+err.Error(), nil)
}
2024-09-29 19:23:19 +03:00
return e.NoContent(http.StatusNoContent)
}
2023-03-01 23:29:45 +02:00
2024-09-29 19:23:19 +03:00
func settingsGenerateAppleClientSecret(e *core.RequestEvent) error {
form := forms.NewAppleClientSecretCreate(e.App)
2023-03-01 23:29:45 +02:00
// load request
2024-09-29 19:23:19 +03:00
if err := e.BindBody(form); err != nil {
return e.BadRequestError("An error occurred while loading the submitted data.", err)
2023-03-01 23:29:45 +02:00
}
// generate
secret, err := form.Submit()
if err != nil {
// form error
if fErr, ok := err.(validation.Errors); ok {
2024-09-29 19:23:19 +03:00
return e.BadRequestError("Invalid client secret data.", fErr)
2023-03-01 23:29:45 +02:00
}
// secret generation error
2024-09-29 19:23:19 +03:00
return e.BadRequestError("Failed to generate client secret. Raw error: \n"+err.Error(), nil)
2023-03-01 23:29:45 +02:00
}
2024-09-29 19:23:19 +03:00
return e.JSON(http.StatusOK, map[string]string{
2023-03-01 23:29:45 +02:00
"secret": secret,
})
}