dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit d37e8f058e772c0932fdd2d90c530e3ca80e2ad8
parent ce3411ebc6d4ee630d3abd133adbaa34a98ea8f9
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun,  4 Dec 2022 20:50:50 -0500

configurable silent self-kick

Diffstat:
Mpkg/actions/actions.go | 1+
Mpkg/config/config.go | 1+
Mpkg/database/tableSettings.go | 2++
Apkg/migrations/115.sql | 4++++
Mpkg/web/handlers/api/v1/spamInterceptor.go | 3++-
Mpkg/web/handlers/data.go | 9+++++----
Mpkg/web/handlers/handlers.go | 6+++++-
Mpkg/web/public/views/pages/settings/website.gohtml | 4++++
8 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/pkg/actions/actions.go b/pkg/actions/actions.go @@ -69,6 +69,7 @@ func Start(c *cli.Context) error { config.SignupFakeEnabled.Store(settings.SignupFakeEnabled) config.DownloadsEnabled.Store(settings.DownloadsEnabled) config.ForumEnabled.Store(settings.ForumEnabled) + config.SilentSelfKick.Store(settings.SilentSelfKick) config.MaybeAuthEnabled.Store(settings.MaybeAuthEnabled) config.CaptchaDifficulty.Store(settings.CaptchaDifficulty) diff --git a/pkg/config/config.go b/pkg/config/config.go @@ -53,6 +53,7 @@ var ( IsFirstUse = atom.NewBool(true) // either or not we need to set up root account MaybeAuthEnabled = atom.NewBool(true) // either or not unauthenticated users can access the "maybe auth" pages ForumEnabled = atom.NewBool(true) // either or not people can use the forum features + SilentSelfKick = atom.NewBool(true) // either or not self kick are silent SignupEnabled = atom.NewBool(true) // either or not people can sign up SignupFakeEnabled = atom.NewBool(true) // either or not signup is faked to be enabled ProtectHome = atom.NewBool(true) // enable "dynamic login url" to prevent ddos on the login page diff --git a/pkg/database/tableSettings.go b/pkg/database/tableSettings.go @@ -6,6 +6,7 @@ import "github.com/sirupsen/logrus" type Settings struct { ID int64 MaybeAuthEnabled bool // either or not unauthenticated users can access the "maybe auth" pages + SilentSelfKick bool // either or not people can use the forum features ForumEnabled bool // either or not people can use the forum features SignupEnabled bool // either or not people can sign up SignupFakeEnabled bool // either or not signup is faked to be enabled @@ -20,6 +21,7 @@ type Settings struct { func GetSettings() (out Settings) { if err := DB.Model(Settings{}).First(&out).Error; err != nil { out.SignupEnabled = true + out.SilentSelfKick = true out.ForumEnabled = true out.MaybeAuthEnabled = true out.DownloadsEnabled = true diff --git a/pkg/migrations/115.sql b/pkg/migrations/115.sql @@ -0,0 +1,4 @@ +-- +migrate Up +ALTER TABLE settings ADD COLUMN silent_self_kick TINYINT(1) NOT NULL DEFAULT 1; + +-- +migrate Down diff --git a/pkg/web/handlers/api/v1/spamInterceptor.go b/pkg/web/handlers/api/v1/spamInterceptor.go @@ -1,6 +1,7 @@ package v1 import ( + "dkforest/pkg/config" "dkforest/pkg/database" dutils "dkforest/pkg/database/utils" "dkforest/pkg/utils" @@ -29,7 +30,7 @@ var ErrSpamFilterTriggered = errors.New("spam filter triggered") func checkSpam(origMessage string, authUser *database.User) error { lowerCaseMessage := strings.ToLower(origMessage) - silentSelfKick := false + silentSelfKick := config.SilentSelfKick.Load() // Kick retard new users if time.Since(authUser.CreatedAt) < 5*time.Hour { diff --git a/pkg/web/handlers/data.go b/pkg/web/handlers/data.go @@ -738,10 +738,11 @@ type settingsInvitationsData struct { } type settingsWebsiteData struct { - ActiveTab string - SignupEnabled bool - ForumEnabled bool - Error string + ActiveTab string + SignupEnabled bool + SilentSelfKick bool + ForumEnabled bool + Error string } type adminEditUsereData struct { diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -2883,13 +2883,17 @@ func SettingsWebsiteHandler(c echo.Context) error { settings := database.GetSettings() data.SignupEnabled = settings.SignupEnabled data.ForumEnabled = settings.ForumEnabled + data.SilentSelfKick = settings.SilentSelfKick if c.Request().Method == http.MethodPost { settings.SignupEnabled = utils.DoParseBool(c.Request().PostFormValue("signupEnabled")) settings.ForumEnabled = utils.DoParseBool(c.Request().PostFormValue("forumEnabled")) + settings.SilentSelfKick = utils.DoParseBool(c.Request().PostFormValue("silentSelfKick")) _ = settings.Save() config.SignupEnabled.Store(settings.SignupEnabled) config.ForumEnabled.Store(settings.ForumEnabled) - database.NewAudit(*authUser, fmt.Sprintf("website settings, signup: %t, forum: %t", settings.SignupEnabled, settings.ForumEnabled)) + config.SilentSelfKick.Store(settings.SilentSelfKick) + database.NewAudit(*authUser, fmt.Sprintf("website settings, signup: %t, forum: %t, sk: %t", + settings.SignupEnabled, settings.ForumEnabled, settings.SilentSelfKick)) return c.Redirect(http.StatusFound, c.Request().Referer()) } diff --git a/pkg/web/public/views/pages/settings/website.gohtml b/pkg/web/public/views/pages/settings/website.gohtml @@ -20,6 +20,10 @@ <input class="form-check-input" id="forumEnabled" type="checkbox" value="1" name="forumEnabled"{{ if .Data.ForumEnabled }} checked{{ end }}> <label class="form-check-label" for="forumEnabled">Forum enabled</label> </div> + <div class="form-check"> + <input class="form-check-input" id="silentSelfKick" type="checkbox" value="1" name="silentSelfKick"{{ if .Data.SilentSelfKick }} checked{{ end }}> + <label class="form-check-label" for="silentSelfKick">Silent Self-Kick</label> + </div> </div> <div class="form-group"> <input type="submit" value="{{ t "Save" . }}" class="btn btn-primary" />