aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-07-18 18:38:57 +0530
committerBobby <[email protected]>2025-07-18 18:38:57 +0530
commit1d582861feab127bdd588430d4d8374cf1d54fd5 (patch)
treeeaf151e2555964370971ce404e912ae9271eea1a
parent7feec60d6ec8b2bb5eaa34dc59c15de38a647e12 (diff)
downloadimageboard-1d582861feab127bdd588430d4d8374cf1d54fd5.tar.xz
imageboard-1d582861feab127bdd588430d4d8374cf1d54fd5.zip
edit posts page prep
-rw-r--r--models/user.go22
-rw-r--r--router/routes.go1
-rw-r--r--templates/error.django (renamed from templates/404.django)6
-rw-r--r--templates/login.django2
-rw-r--r--templates/posts/edit.django4
-rw-r--r--templates/posts/single.django4
-rw-r--r--templates/register.django2
7 files changed, 23 insertions, 18 deletions
diff --git a/models/user.go b/models/user.go
index d918db7..6ed3270 100644
--- a/models/user.go
+++ b/models/user.go
@@ -45,7 +45,16 @@ func (u *User) BeforeCreate(tx *gorm.DB) error {
return fmt.Errorf("email cannot be empty")
}
- if len(u.Username) < 3 {
+ var userCount int64
+ if err := tx.Model(&User{}).Where("is_deleted = ?", false).Count(&userCount).Error; err != nil {
+ return fmt.Errorf("failed to count existing users: %v", err)
+ }
+
+ if userCount == 0 {
+ u.Level = config.UserLevelSuperAdmin // First user becomes Super Admin
+ }
+
+ if len(u.Username) < 3 && u.Level < config.UserLevelSuperAdmin {
return fmt.Errorf("username must be at least 3 characters long")
}
@@ -57,7 +66,7 @@ func (u *User) BeforeCreate(tx *gorm.DB) error {
return fmt.Errorf("username can only contain letters, numbers, underscores, and hyphens")
}
- if validators.IsReservedUsername(u.Username) {
+ if validators.IsReservedUsername(u.Username) && u.Level < config.UserLevelSuperAdmin {
return fmt.Errorf("username '%s' is reserved and cannot be used", u.Username)
}
@@ -71,15 +80,6 @@ func (u *User) BeforeCreate(tx *gorm.DB) error {
return fmt.Errorf("username '%s' is already taken", u.Username)
}
- var userCount int64
- if err := tx.Model(&User{}).Where("is_deleted = ?", false).Count(&userCount).Error; err != nil {
- return fmt.Errorf("failed to count existing users: %v", err)
- }
-
- if userCount == 0 {
- u.Level = config.UserLevelSuperAdmin // First user becomes Super Admin
- }
-
if len(u.Password) < config.Server.MinPasswordLength {
return fmt.Errorf("password must be at least %d characters long", config.Server.MinPasswordLength)
}
diff --git a/router/routes.go b/router/routes.go
index b573ad9..9d8c4fd 100644
--- a/router/routes.go
+++ b/router/routes.go
@@ -19,6 +19,7 @@ func Initialize(router *fiber.App) {
posts.Get("/new/ilinkfetch", controllers.PostsUploadImageLinkProxyController)
posts.Get("/:id", controllers.PostsSinglePostPageController)
posts.Post("/:id/favourite", controllers.PostsSinglePostFavouriteController)
+ posts.Get("/:id/edit", controllers.PostsSinglePostEditController)
login := router.Group("/login")
login.Get("/", controllers.LoginPageController)
diff --git a/templates/404.django b/templates/error.django
index 5f598b7..8a24f3b 100644
--- a/templates/404.django
+++ b/templates/error.django
@@ -1,8 +1,8 @@
{% extends 'layouts/main.django' %}
{% block content %}
<div class="centered-main">
- <img src="/static/images/54a1a92a6d78ed091071255803c7057e.webp" alt="404 Not Found" class="q-img" />
- <h1>404 - Page Not Found</h1>
- <p>The page you are looking for does not exist.</p>
+ <img src="/static/images/54a1a92a6d78ed091071255803c7057e.webp" class="q-img" />
+ <h1>{{ Title }}</h1>
+ <p>{{ Error|safe }}</p>
</div>
{% endblock %}
diff --git a/templates/login.django b/templates/login.django
index 4d23375..428c260 100644
--- a/templates/login.django
+++ b/templates/login.django
@@ -18,7 +18,7 @@
<label for="username">Username</label>
</div>
<div class="fg-sub">
- <input type="text" class="itext" id="username" name="username" required value="{{ Username }}" minlength="3" maxlength="72" autocomplete="username" pattern="[a-zA-Z0-9_-]+" />
+ <input type="text" class="itext" id="username" name="username" required value="{{ Username }}" maxlength="72" autocomplete="username" pattern="[a-zA-Z0-9_-]+" />
<small>3-72 characters, letters, numbers, underscores, and hyphens only</small>
</div>
</div>
diff --git a/templates/posts/edit.django b/templates/posts/edit.django
new file mode 100644
index 0000000..b4f13a4
--- /dev/null
+++ b/templates/posts/edit.django
@@ -0,0 +1,4 @@
+{% extends 'layouts/main.django' %}
+{% block content %}
+ Edit Post Page
+{% endblock %}
diff --git a/templates/posts/single.django b/templates/posts/single.django
index b805af8..ec788c3 100644
--- a/templates/posts/single.django
+++ b/templates/posts/single.django
@@ -82,8 +82,8 @@
<a href="javascript:void(0);" onclick="switchSize('medium');">Medium</a>
<a href="javascript:void(0);" onclick="switchSize('large');">Large</a>
<a href="javascript:void(0);" onclick="switchSize('original');">Original</a>
- {% if Post.Uploader.Username == User.Username or User.CanEditTags %}
- | <a href="/posts/edit/{{ Post.ID }}#tags">Edit Post</a>
+ {% if User and Post.Uploader.Username == User.Username or User.CanEditTags %}
+ | <a href="/posts/{{ Post.ID }}/edit#tags">Edit Post</a>
{% endif %}
</div>
</div>
diff --git a/templates/register.django b/templates/register.django
index 808f15a..b1c344f 100644
--- a/templates/register.django
+++ b/templates/register.django
@@ -18,7 +18,7 @@
<label for="username">Username</label>
</div>
<div class="fg-sub">
- <input type="text" class="itext" id="username" name="username" required value="{{ Username }}" minlength="3" maxlength="72" autocomplete="username" pattern="[a-zA-Z0-9_-]+" />
+ <input type="text" class="itext" id="username" name="username" required value="{{ Username }}" maxlength="72" autocomplete="username" pattern="[a-zA-Z0-9_-]+" />
<small>3-72 characters, letters, numbers, underscores, and hyphens only</small>
</div>
</div>