diff options
Diffstat (limited to 'controllers')
| -rw-r--r-- | controllers/account.go | 17 | ||||
| -rw-r--r-- | controllers/constants.go | 48 | ||||
| -rw-r--r-- | controllers/home.go | 5 | ||||
| -rw-r--r-- | controllers/login.go | 26 | ||||
| -rw-r--r-- | controllers/logout.go | 11 | ||||
| -rw-r--r-- | controllers/posts.go | 36 | ||||
| -rw-r--r-- | controllers/register.go | 17 |
7 files changed, 70 insertions, 90 deletions
diff --git a/controllers/account.go b/controllers/account.go index 86b3ea4..fa3e0e7 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -1,6 +1,7 @@ package controllers import ( + "imageboard/config" "imageboard/database" "imageboard/models" "imageboard/utils/auth" @@ -10,38 +11,38 @@ import ( ) func renderVerifyEmailError(ctx *fiber.Ctx, errorMsg string, statusCode int) error { - return shortcuts.RenderWithStatus(ctx, TEMPLATE_VERIFY_EMAIL, fiber.Map{ + return shortcuts.RenderWithStatus(ctx, config.TEMPLATE_VERIFY_EMAIL, fiber.Map{ "Error": errorMsg, }, statusCode) } func VerifyEmailController(ctx *fiber.Ctx) error { - ctx.Locals("Title", PT_VERIFY_EMAIL) + ctx.Locals("Title", config.PT_VERIFY_EMAIL) if auth.IsAuthenticated(ctx) { return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther) } token := ctx.Query("token") if token == "" { - return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_MISSING_TOKEN, fiber.StatusBadRequest) + return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_MISSING_TOKEN, fiber.StatusBadRequest) } emailToken, err := database.VerifyToken(token, models.EmailTokenTypeVerification) if err != nil { - return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_INVALID_OR_EXPIRED_TOKEN, fiber.StatusBadRequest) + return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_INVALID_OR_EXPIRED_TOKEN, fiber.StatusBadRequest) } user, err := database.GetUserByID(emailToken.UserID) if err != nil { - return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_USER_NOT_FOUND, fiber.StatusInternalServerError) + return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_USER_NOT_FOUND, fiber.StatusInternalServerError) } user.Activate() if err := database.DB.Save(user).Error; err != nil { - return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_ACTIVATION_FAILED, fiber.StatusInternalServerError) + return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_ACTIVATION_FAILED, fiber.StatusInternalServerError) } - return shortcuts.Render(ctx, TEMPLATE_VERIFY_EMAIL, fiber.Map{ - "Success": SUCCESS_VERIFY_EMAIL, + return shortcuts.Render(ctx, config.TEMPLATE_VERIFY_EMAIL, fiber.Map{ + "Success": config.SUCCESS_VERIFY_EMAIL, "Username": user.Username, }) diff --git a/controllers/constants.go b/controllers/constants.go deleted file mode 100644 index 7417314..0000000 --- a/controllers/constants.go +++ /dev/null @@ -1,48 +0,0 @@ -package controllers - -const ( - // Page titles - PT_HOME = "Home Page" - PT_LOGIN = "Login" - PT_POSTS = "Posts" - PT_PREFERENCES = "Preferences" - PT_REGISTER = "Register" - PT_404 = "Page Not Found" - PT_VERIFY_EMAIL = "Verify Email" - - // Template names - TEMPLATE_HOME = "home" - TEMPLATE_LOGIN = "login" - TEMPLATE_POSTS = "posts" - TEMPLATE_PREFERENCES = "preferences" - TEMPLATE_REGISTER = "register" - TEMPLATE_404 = "404" - TEMPLATE_VERIFY_EMAIL = "account/verify_email" - - // URL constants for various routes - URL_HOME = "/" - URL_LOGIN = "/login" - URL_POSTS = "/posts" - URL_PREFERENCES = "/preferences" - URL_REGISTER = "/register" - URL_FORGOT_PASSWORD = "/account/forgot-password" - URL_RESEND_VERIFICATION = "/account/resend-verification" - - // Error messages - ERR_INVALID_FORM_DATA = "The submitted form data is invalid. Check your input and try again." - ERR_USER_NOT_FOUND = `User with that username not found. Maybe you want to <a href="` + URL_REGISTER + `">register</a>?` - ERR_LOGIN_INVALID_CREDENTIALS = `The credentials you provided are incorrect. Did you <a href="` + URL_FORGOT_PASSWORD + `">forget your password</a>?` - ERR_ACCOUNT_DISABLED = `Your account is disabled or banned. You can reach out to support for assistance.` - ERR_ACCOUNT_UNABLE_TO_LOGIN = `You cannot log in at this time. Verify your email or contact support. If you misplaced your verification email, you can <a href="` + URL_RESEND_VERIFICATION + `">request a new one</a>.` - ERR_PASSWORD_MISMATCH = "Entered passwords do not match. Ensure both fields are identical." - ERR_SESSION_FAILED_TO_CREATE = "Server failed to create a session. If this issue persists, contact support." - ERR_SESSION_FAILED_TO_SAVE = "Server failed to save session data. If this issue persists, contact support." - ERR_VERIFY_EMAIL_MISSING_TOKEN = `Verification token is missing. Check the link you clicked or request a <a href="` + URL_RESEND_VERIFICATION + `">new verification email</a>.` - ERR_VERIFY_EMAIL_INVALID_OR_EXPIRED_TOKEN = `The verification token is either invalid or has expired. Try requesting a <a href="` + URL_RESEND_VERIFICATION + `">new verification email</a>.` - ERR_VERIFY_EMAIL_USER_NOT_FOUND = `User not found for the provided verification token. If you think this is an error, contact support.` - ERR_VERIFY_EMAIL_ACTIVATION_FAILED = `Failed to activate your account. If this issue persists, contact support.` - - // Success messages - SUCCESS_USER_REGISTERED = "Your account has been created successfully. A verification email has been sent to your email address. You will only be able to log in after verifying your email. If you did not receive the email, you can <a href=\"" + URL_RESEND_VERIFICATION + "\">request a new one</a>." - SUCCESS_VERIFY_EMAIL = `Your email has been successfully verified. You can now <a href="` + URL_LOGIN + `">log in</a> to your account.` -) diff --git a/controllers/home.go b/controllers/home.go index 186ef24..9fd0d33 100644 --- a/controllers/home.go +++ b/controllers/home.go @@ -1,12 +1,13 @@ package controllers import ( + "imageboard/config" "imageboard/utils/shortcuts" "github.com/gofiber/fiber/v2" ) func HomePageController(ctx *fiber.Ctx) error { - ctx.Locals("Title", PT_HOME) - return shortcuts.Render(ctx, TEMPLATE_HOME, nil) + ctx.Locals("Title", config.PT_HOME) + return shortcuts.Render(ctx, config.TEMPLATE_HOME, nil) } diff --git a/controllers/login.go b/controllers/login.go index 6eb4996..aa02e0c 100644 --- a/controllers/login.go +++ b/controllers/login.go @@ -1,6 +1,7 @@ package controllers import ( + "imageboard/config" "imageboard/database" "imageboard/session" "imageboard/utils/auth" @@ -15,56 +16,59 @@ type LoginForm struct { } func renderLoginError(ctx *fiber.Ctx, errorMsg string, statusCode int) error { - return shortcuts.RenderWithStatus(ctx, TEMPLATE_LOGIN, fiber.Map{ + return shortcuts.RenderWithStatus(ctx, config.TEMPLATE_LOGIN, fiber.Map{ "Error": errorMsg, "Username": ctx.FormValue("username"), // Preserve username in form }, statusCode) } func LoginPageController(ctx *fiber.Ctx) error { - ctx.Locals("Title", PT_LOGIN) + ctx.Locals("Title", config.PT_LOGIN) if auth.IsAuthenticated(ctx) { return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther) } - return shortcuts.Render(ctx, TEMPLATE_LOGIN, nil) + next := ctx.Query("next") + return shortcuts.Render(ctx, config.TEMPLATE_LOGIN, fiber.Map{ + "Next": next, + }) } func LoginPostController(ctx *fiber.Ctx) error { - ctx.Locals("Title", PT_LOGIN) + ctx.Locals("Title", config.PT_LOGIN) var form LoginForm var err error if err = ctx.BodyParser(&form); err != nil { - return renderLoginError(ctx, ERR_INVALID_FORM_DATA, fiber.StatusBadRequest) + return renderLoginError(ctx, config.ERR_INVALID_FORM_DATA, fiber.StatusBadRequest) } user, err := database.GetUserByUsername(form.Username) if err != nil { - return renderLoginError(ctx, ERR_USER_NOT_FOUND, fiber.StatusUnauthorized) + return renderLoginError(ctx, config.ERR_USER_NOT_FOUND, fiber.StatusUnauthorized) } if !user.CheckPassword(form.Password) { - return renderLoginError(ctx, ERR_LOGIN_INVALID_CREDENTIALS, fiber.StatusUnauthorized) + return renderLoginError(ctx, config.ERR_LOGIN_INVALID_CREDENTIALS, fiber.StatusUnauthorized) } if !user.IsActive() { - return renderLoginError(ctx, ERR_ACCOUNT_DISABLED, fiber.StatusForbidden) + return renderLoginError(ctx, config.ERR_ACCOUNT_DISABLED, fiber.StatusForbidden) } if !user.CanLogin() { - return renderLoginError(ctx, ERR_ACCOUNT_UNABLE_TO_LOGIN, fiber.StatusForbidden) + return renderLoginError(ctx, config.ERR_ACCOUNT_UNABLE_TO_LOGIN, fiber.StatusForbidden) } sess, err := session.Store.Get(ctx) if err != nil { - return renderLoginError(ctx, ERR_SESSION_FAILED_TO_CREATE, fiber.StatusInternalServerError) + return renderLoginError(ctx, config.ERR_SESSION_FAILED_TO_CREATE, fiber.StatusInternalServerError) } sess.Set("user_id", user.ID) sess.Set("username", user.Username) if err := sess.Save(); err != nil { - return renderLoginError(ctx, ERR_SESSION_FAILED_TO_SAVE, fiber.StatusInternalServerError) + return renderLoginError(ctx, config.ERR_SESSION_FAILED_TO_SAVE, fiber.StatusInternalServerError) } user.UpdateLastUserLogin(database.DB) diff --git a/controllers/logout.go b/controllers/logout.go index 20c280d..58ff545 100644 --- a/controllers/logout.go +++ b/controllers/logout.go @@ -1,8 +1,8 @@ package controllers import ( + "imageboard/config" "imageboard/session" - "imageboard/utils/auth" "github.com/gofiber/fiber/v2" ) @@ -10,7 +10,7 @@ import ( func LogoutController(ctx *fiber.Ctx) error { sess, err := session.Store.Get(ctx) if err != nil { - return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther) + return ctx.Redirect(config.URL_HOME, fiber.StatusSeeOther) } if err := sess.Destroy(); err != nil { @@ -19,5 +19,10 @@ func LogoutController(ctx *fiber.Ctx) error { sess.Save() } - return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther) + next := ctx.Query("next") + if next != "" { + return ctx.Redirect(next, fiber.StatusSeeOther) + } + + return ctx.Redirect(config.URL_HOME, fiber.StatusSeeOther) } diff --git a/controllers/posts.go b/controllers/posts.go index 6fdcd26..03535c7 100644 --- a/controllers/posts.go +++ b/controllers/posts.go @@ -1,22 +1,38 @@ package controllers
import (
+ "imageboard/config"
+ "imageboard/database"
+ "imageboard/utils/auth"
"imageboard/utils/shortcuts"
"github.com/gofiber/fiber/v2"
)
-func PostsController(ctx *fiber.Ctx) error {
- ctx.Locals("Title", "Posts")
+func PostsPageController(ctx *fiber.Ctx) error {
+ ctx.Locals("Title", config.PT_POST_LIST)
+ preferences := ctx.Locals("Preferences")
+ prefs, ok := preferences.(config.SitePreferences)
+ if !ok {
+ return fiber.NewError(fiber.StatusInternalServerError, "Invalid preferences type")
+ }
+
+ posts, err := database.GetPosts(prefs.PostsPerPage)
- searchQuery := ctx.Query("tags", "")
+ return shortcuts.Render(ctx, config.TEMPLATE_POST_LIST, fiber.Map{
+ "Posts": posts,
+ "Error": err,
+ })
+}
- customdata := struct {
- SearchQuery string
- Posts []interface{}
- }{
- SearchQuery: searchQuery,
- Posts: []interface{}{},
+func PostsUploadPageController(ctx *fiber.Ctx) error {
+ ctx.Locals("Title", config.PT_POST_NEW)
+ if !auth.IsAuthenticated(ctx) {
+ loginURL := auth.GetLoginURLWithRedirect(ctx)
+ ctx.Set("Location", loginURL)
+ ctx.Status(fiber.StatusFound)
+ return nil
}
- return shortcuts.Render(ctx, "posts", customdata)
+
+ return shortcuts.Render(ctx, config.TEMPLATE_POST_NEW, nil)
}
diff --git a/controllers/register.go b/controllers/register.go index acadbc5..c52d6e5 100644 --- a/controllers/register.go +++ b/controllers/register.go @@ -1,6 +1,7 @@ package controllers import ( + "imageboard/config" "imageboard/database" "imageboard/models" "imageboard/utils/auth" @@ -20,7 +21,7 @@ type RegisterForm struct { } func renderRegisterError(ctx *fiber.Ctx, errorMsg string, statusCode int) error { - return shortcuts.RenderWithStatus(ctx, TEMPLATE_REGISTER, fiber.Map{ + return shortcuts.RenderWithStatus(ctx, config.TEMPLATE_REGISTER, fiber.Map{ "Error": errorMsg, "Username": ctx.FormValue("username"), "Email": ctx.FormValue("email"), @@ -28,17 +29,17 @@ func renderRegisterError(ctx *fiber.Ctx, errorMsg string, statusCode int) error } func RegisterPageController(ctx *fiber.Ctx) error { - ctx.Locals("Title", PT_REGISTER) + ctx.Locals("Title", config.PT_REGISTER) if auth.IsAuthenticated(ctx) { return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther) } - return shortcuts.Render(ctx, TEMPLATE_REGISTER, nil) + return shortcuts.Render(ctx, config.TEMPLATE_REGISTER, nil) } func RegisterPostController(ctx *fiber.Ctx) error { - ctx.Locals("Title", PT_REGISTER) + ctx.Locals("Title", config.PT_REGISTER) if auth.IsAuthenticated(ctx) { return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther) @@ -46,11 +47,11 @@ func RegisterPostController(ctx *fiber.Ctx) error { var form RegisterForm if err := ctx.BodyParser(&form); err != nil { - return renderRegisterError(ctx, ERR_INVALID_FORM_DATA, fiber.StatusBadRequest) + return renderRegisterError(ctx, config.ERR_INVALID_FORM_DATA, fiber.StatusBadRequest) } if form.Password != form.ConfirmPassword { - return renderRegisterError(ctx, ERR_PASSWORD_MISMATCH, fiber.StatusBadRequest) + return renderRegisterError(ctx, config.ERR_PASSWORD_MISMATCH, fiber.StatusBadRequest) } user := &models.User{ @@ -77,7 +78,7 @@ func RegisterPostController(ctx *fiber.Ctx) error { return renderRegisterError(ctx, "User created but failed to send verification email", fiber.StatusInternalServerError) } - return shortcuts.Render(ctx, TEMPLATE_REGISTER, fiber.Map{ - "Success": SUCCESS_USER_REGISTERED, + return shortcuts.Render(ctx, config.TEMPLATE_REGISTER, fiber.Map{ + "Success": config.SUCCESS_USER_REGISTERED, }) } |
