mirror of
https://github.com/hanzoai/base.git
synced 2026-10-21 03:41:50 +00:00
# Conflicts: # core/record_field_resolver_multi_match.go # ui/dist/assets/AuthMethodsDocs-ChShXLwE.js # ui/dist/assets/AuthMethodsDocs-Cqvl0T_l.js # ui/dist/assets/AuthMethodsDocs-DIqhS7qY.js # ui/dist/assets/AuthRefreshDocs-CHakkNnn.js # ui/dist/assets/AuthRefreshDocs-DLb1qree.js # ui/dist/assets/AuthRefreshDocs-DXgrlMdk.js # ui/dist/assets/AuthWithOAuth2Docs-Bl8VRxNv.js # ui/dist/assets/AuthWithOAuth2Docs-DVBOel22.js # ui/dist/assets/AuthWithOAuth2Docs-I213UiJ7.js # ui/dist/assets/AuthWithOtpDocs-B9tL6gIN.js # ui/dist/assets/AuthWithOtpDocs-C2PPm9-Z.js # ui/dist/assets/AuthWithOtpDocs-qEMoMG3D.js # ui/dist/assets/AuthWithPasswordDocs-B8JWDbPL.js # ui/dist/assets/AuthWithPasswordDocs-BTHeYJwE.js # ui/dist/assets/AuthWithPasswordDocs-D9rqgLpO.js # ui/dist/assets/BatchApiDocs-BV4PYYXn.js # ui/dist/assets/BatchApiDocs-DXa997am.js # ui/dist/assets/BatchApiDocs-Di2Qe2dV.js # ui/dist/assets/DeleteApiDocs-C3IINRwz.js # ui/dist/assets/DeleteApiDocs-LfmVp4Uf.js # ui/dist/assets/DeleteApiDocs-SU4XdGhJ.js # ui/dist/assets/EmailChangeDocs-COx1USU5.js # ui/dist/assets/EmailChangeDocs-D-qNHT_P.js # ui/dist/assets/EmailChangeDocs-DpfXIE_V.js # ui/dist/assets/FieldsQueryParam-BYe9ZK-G.js # ui/dist/assets/FieldsQueryParam-L8vpHeF4.js # ui/dist/assets/FieldsQueryParam-z0dGQ6uY.js # ui/dist/assets/ListApiDocs-BCTT-AOz.js # ui/dist/assets/ListApiDocs-C0_GwI7k.js # ui/dist/assets/ListApiDocs-T9_aO-pW.js # ui/dist/assets/PageInstaller-B22bivaN.js # ui/dist/assets/PageInstaller-C0BBhyBx.js # ui/dist/assets/PageInstaller-IYSwJhZW.js # ui/dist/assets/PageOAuth2RedirectFailure-BjbpqlFj.js # ui/dist/assets/PageOAuth2RedirectFailure-COyNF79R.js # ui/dist/assets/PageOAuth2RedirectFailure-DPmGG9zv.js # ui/dist/assets/PageOAuth2RedirectSuccess-6cMXLFAX.js # ui/dist/assets/PageOAuth2RedirectSuccess-CdkCarGH.js # ui/dist/assets/PageOAuth2RedirectSuccess-DSEIHeQL.js # ui/dist/assets/PageRecordConfirmEmailChange-BYW-6ASg.js # ui/dist/assets/PageRecordConfirmEmailChange-Bm1CIYvq.js # ui/dist/assets/PageRecordConfirmEmailChange-BpaqOT4u.js # ui/dist/assets/PageRecordConfirmPasswordReset--wx_u2lI.js # ui/dist/assets/PageRecordConfirmPasswordReset-CoeY2Z_C.js # ui/dist/assets/PageRecordConfirmPasswordReset-Ptya5bfe.js # ui/dist/assets/PageRecordConfirmVerification-6xjF3T0O.js # ui/dist/assets/PageRecordConfirmVerification-C1UTIIJh.js # ui/dist/assets/PageRecordConfirmVerification-C4LixXvA.js # ui/dist/assets/PageSuperuserConfirmPasswordReset-19z2IFg4.js # ui/dist/assets/PageSuperuserConfirmPasswordReset-DwNi0ugQ.js # ui/dist/assets/PageSuperuserConfirmPasswordReset-SMnDTRNi.js # ui/dist/assets/PageSuperuserRequestPasswordReset-BpDW217f.js # ui/dist/assets/PageSuperuserRequestPasswordReset-DK63qE6z.js # ui/dist/assets/PageSuperuserRequestPasswordReset-bG02qLIM.js # ui/dist/assets/PasswordResetDocs-CE67mLC0.js # ui/dist/assets/PasswordResetDocs-CHAK0vma.js # ui/dist/assets/PasswordResetDocs-Dap-N4rx.js # ui/dist/assets/RealtimeApiDocs-BooTSQCb.js # ui/dist/assets/RealtimeApiDocs-CoHmYVEx.js # ui/dist/assets/RealtimeApiDocs-D7ds3fHt.js # ui/dist/assets/VerificationDocs-B42AIoCQ.js # ui/dist/assets/VerificationDocs-BS7b11zH.js # ui/dist/assets/VerificationDocs-ZhkdFVIl.js # ui/dist/assets/ViewApiDocs-BXmRLHZ1.js # ui/dist/assets/ViewApiDocs-DM5JJQjh.js # ui/dist/assets/ViewApiDocs-DRpxcuJR.js # ui/public/fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700.woff2 # ui/public/fonts/ubuntu-mono/ubuntu-mono-v17-cyrillic_latin-700.woff2
144 lines
3.9 KiB
Go
144 lines
3.9 KiB
Go
package apis
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
validation "github.com/go-ozzo/ozzo-validation/v4"
|
|
"github.com/hanzoai/base/core"
|
|
"github.com/hanzoai/base/forms"
|
|
"github.com/hanzoai/base/tools/router"
|
|
)
|
|
|
|
// bindSettingsApi registers the settings api endpoints.
|
|
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)
|
|
}
|
|
|
|
func settingsList(e *core.RequestEvent) error {
|
|
clone, err := e.App.Settings().Clone()
|
|
if err != nil {
|
|
return e.InternalServerError("", err)
|
|
}
|
|
|
|
event := new(core.SettingsListRequestEvent)
|
|
event.RequestEvent = e
|
|
event.Settings = clone
|
|
|
|
return e.App.OnSettingsListRequest().Trigger(event, func(e *core.SettingsListRequestEvent) error {
|
|
return execAfterSuccessTx(true, e.App, func() error {
|
|
return e.JSON(http.StatusOK, e.Settings)
|
|
})
|
|
})
|
|
}
|
|
|
|
func settingsSet(e *core.RequestEvent) error {
|
|
event := new(core.SettingsUpdateRequestEvent)
|
|
event.RequestEvent = e
|
|
|
|
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)
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
appSettings, err := e.App.Settings().Clone()
|
|
if err != nil {
|
|
return e.InternalServerError("Failed to clone app settings.", err)
|
|
}
|
|
|
|
return execAfterSuccessTx(true, e.App, func() error {
|
|
return e.JSON(http.StatusOK, appSettings)
|
|
})
|
|
})
|
|
}
|
|
|
|
func settingsTestS3(e *core.RequestEvent) error {
|
|
form := forms.NewTestS3Filesystem(e.App)
|
|
|
|
// load request
|
|
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 {
|
|
// form error
|
|
if fErr, ok := err.(validation.Errors); ok {
|
|
return e.BadRequestError("Failed to test the S3 filesystem.", fErr)
|
|
}
|
|
|
|
// mailer error
|
|
return e.BadRequestError("Failed to test the S3 filesystem. Raw error: \n"+err.Error(), nil)
|
|
}
|
|
|
|
return e.NoContent(http.StatusNoContent)
|
|
}
|
|
|
|
func settingsTestEmail(e *core.RequestEvent) error {
|
|
form := forms.NewTestEmailSend(e.App)
|
|
|
|
// load request
|
|
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 {
|
|
// form error
|
|
if fErr, ok := err.(validation.Errors); ok {
|
|
return e.BadRequestError("Failed to send the test email.", fErr)
|
|
}
|
|
|
|
// mailer error
|
|
return e.BadRequestError("Failed to send the test email. Raw error: \n"+err.Error(), nil)
|
|
}
|
|
|
|
return e.NoContent(http.StatusNoContent)
|
|
}
|
|
|
|
func settingsGenerateAppleClientSecret(e *core.RequestEvent) error {
|
|
form := forms.NewAppleClientSecretCreate(e.App)
|
|
|
|
// load request
|
|
if err := e.BindBody(form); err != nil {
|
|
return e.BadRequestError("An error occurred while loading the submitted data.", err)
|
|
}
|
|
|
|
// generate
|
|
secret, err := form.Submit()
|
|
if err != nil {
|
|
// form error
|
|
if fErr, ok := err.(validation.Errors); ok {
|
|
return e.BadRequestError("Invalid client secret data.", fErr)
|
|
}
|
|
|
|
// secret generation error
|
|
return e.BadRequestError("Failed to generate client secret. Raw error: \n"+err.Error(), nil)
|
|
}
|
|
|
|
return e.JSON(http.StatusOK, map[string]string{
|
|
"secret": secret,
|
|
})
|
|
}
|