Code cleanup
This commit is contained in:
+3
-11
@@ -1,8 +1,6 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
@@ -17,17 +15,11 @@ var (
|
||||
AdminMutex = sync.RWMutex{}
|
||||
)
|
||||
|
||||
func GenToken() (string, error) {
|
||||
bytes := make([]byte, 32)
|
||||
_, err := rand.Read(bytes)
|
||||
if err != nil {
|
||||
return "", err
|
||||
func IsAdminSessionValid(token string) bool {
|
||||
if DevMode {
|
||||
return true
|
||||
}
|
||||
|
||||
return hex.EncodeToString(bytes), nil
|
||||
}
|
||||
|
||||
func IsAdminSessionValid(token string) bool {
|
||||
AdminMutex.RLock()
|
||||
session, exists := AdminSessions[token]
|
||||
AdminMutex.RUnlock()
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
@@ -19,12 +14,8 @@ var CooldownMutex sync.RWMutex
|
||||
|
||||
const POST_COOLDOWN = 15 * time.Second
|
||||
|
||||
// const POST_COOLDOWN = 0 * time.Second
|
||||
|
||||
const THREAD_COOLDOWN = 2 * time.Minute
|
||||
|
||||
// const THREAD_COOLDOWN = 0 * time.Minute
|
||||
|
||||
func GetRemainingCooldown(ip string, m map[string]time.Time, duration time.Duration) time.Duration {
|
||||
CooldownMutex.RLock()
|
||||
last, exists := m[ip]
|
||||
@@ -44,22 +35,3 @@ func BeginCooldown(ip string, m map[string]time.Time, duration time.Duration) {
|
||||
m[ip] = time.Now()
|
||||
}
|
||||
}
|
||||
|
||||
func GetIP(r *http.Request) string {
|
||||
if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
|
||||
parts := strings.Split(xff, ",")
|
||||
return strings.TrimSpace(parts[0])
|
||||
}
|
||||
|
||||
// Fallback to RemoteAddr
|
||||
ip, _, err := net.SplitHostPort(r.RemoteAddr)
|
||||
if err != nil {
|
||||
return r.RemoteAddr
|
||||
}
|
||||
return ip
|
||||
}
|
||||
|
||||
func HashIp(ip string) string {
|
||||
checksum := sha256.Sum256([]byte(ip))
|
||||
return hex.EncodeToString(checksum[:])
|
||||
}
|
||||
|
||||
+1
-23
@@ -232,29 +232,7 @@ func GetPostFileInfo(mediaPath string) PostFileInfo {
|
||||
return result
|
||||
}
|
||||
|
||||
func FormatBytes(bytes int64) string {
|
||||
const (
|
||||
KB = 1 << 10 // 1024
|
||||
MB = 1 << 20
|
||||
GB = 1 << 30
|
||||
TB = 1 << 40
|
||||
)
|
||||
|
||||
switch {
|
||||
case bytes >= TB:
|
||||
return fmt.Sprintf("%.2f TB", float64(bytes)/float64(TB))
|
||||
case bytes >= GB:
|
||||
return fmt.Sprintf("%.2f GB", float64(bytes)/float64(GB))
|
||||
case bytes >= MB:
|
||||
return fmt.Sprintf("%.2f MB", float64(bytes)/float64(MB))
|
||||
case bytes >= KB:
|
||||
return fmt.Sprintf("%.2f KB", float64(bytes)/float64(KB))
|
||||
default:
|
||||
return fmt.Sprintf("%d B", bytes)
|
||||
}
|
||||
}
|
||||
|
||||
func FormatFileInfo(fileInfo PostFileInfo) string {
|
||||
func FormatPostFileInfo(fileInfo PostFileInfo) string {
|
||||
humanSize := FormatBytes(fileInfo.Size)
|
||||
if fileInfo.IsVideo {
|
||||
return fmt.Sprintf("(%s)", humanSize)
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const DevMode = false
|
||||
|
||||
func FormatBytes(bytes int64) string {
|
||||
const (
|
||||
KB = 1 << 10 // 1024
|
||||
MB = 1 << 20
|
||||
GB = 1 << 30
|
||||
TB = 1 << 40
|
||||
)
|
||||
|
||||
switch {
|
||||
case bytes >= TB:
|
||||
return fmt.Sprintf("%.2f TB", float64(bytes)/float64(TB))
|
||||
case bytes >= GB:
|
||||
return fmt.Sprintf("%.2f GB", float64(bytes)/float64(GB))
|
||||
case bytes >= MB:
|
||||
return fmt.Sprintf("%.2f MB", float64(bytes)/float64(MB))
|
||||
case bytes >= KB:
|
||||
return fmt.Sprintf("%.2f KB", float64(bytes)/float64(KB))
|
||||
default:
|
||||
return fmt.Sprintf("%d B", bytes)
|
||||
}
|
||||
}
|
||||
|
||||
func GetIP(r *http.Request) string {
|
||||
if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
|
||||
parts := strings.Split(xff, ",")
|
||||
return strings.TrimSpace(parts[0])
|
||||
}
|
||||
|
||||
// Fallback to RemoteAddr
|
||||
ip, _, err := net.SplitHostPort(r.RemoteAddr)
|
||||
if err != nil {
|
||||
return r.RemoteAddr
|
||||
}
|
||||
return ip
|
||||
}
|
||||
|
||||
func HashIp(ip string) string {
|
||||
checksum := sha256.Sum256([]byte(ip))
|
||||
return hex.EncodeToString(checksum[:])
|
||||
}
|
||||
|
||||
func GenToken() (string, error) {
|
||||
bytes := make([]byte, 32)
|
||||
_, err := rand.Read(bytes)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return hex.EncodeToString(bytes), nil
|
||||
}
|
||||
+15
-14
@@ -4,15 +4,6 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/dominicf2001/comfychan/internal/database"
|
||||
"github.com/dominicf2001/comfychan/internal/util"
|
||||
"github.com/dominicf2001/comfychan/web/views"
|
||||
@@ -21,10 +12,16 @@ import (
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"io"
|
||||
"log"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var dev = true
|
||||
|
||||
func AdminOnlyMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := r.Cookie("comfy_admin")
|
||||
@@ -43,7 +40,7 @@ func AdminOnlyMiddleware(next http.Handler) http.Handler {
|
||||
}
|
||||
|
||||
func disableCacheInDevMode(next http.Handler) http.Handler {
|
||||
if !dev {
|
||||
if !util.DevMode {
|
||||
return next
|
||||
}
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -61,6 +58,10 @@ func SumUniquePostIps(posts []database.Post) int {
|
||||
}
|
||||
|
||||
func isAdmin(r *http.Request) bool {
|
||||
if util.DevMode {
|
||||
return true
|
||||
}
|
||||
|
||||
admin := false
|
||||
if c, err := r.Cookie("comfy_admin"); err == nil {
|
||||
admin = util.IsAdminSessionValid(c.Value)
|
||||
@@ -487,7 +488,7 @@ func main() {
|
||||
Name: "comfy_admin",
|
||||
Value: token,
|
||||
HttpOnly: true,
|
||||
Secure: !dev,
|
||||
Secure: !util.DevMode,
|
||||
Expires: tokenValidUntil,
|
||||
SameSite: http.SameSiteStrictMode,
|
||||
Path: "/",
|
||||
@@ -516,7 +517,7 @@ func main() {
|
||||
Name: "comfy_admin",
|
||||
Value: "",
|
||||
HttpOnly: true,
|
||||
Secure: !dev,
|
||||
Secure: !util.DevMode,
|
||||
Expires: time.Now(),
|
||||
SameSite: http.SameSiteStrictMode,
|
||||
Path: "/",
|
||||
|
||||
@@ -76,7 +76,7 @@ templ PostOriginal(post database.Post, thread database.Thread) {
|
||||
{ post.MediaPath }
|
||||
</a>
|
||||
<div class="post-img-info">
|
||||
<span>{ util.FormatFileInfo(util.GetPostFileInfo(post.MediaPath)) }</span>
|
||||
<span>{ util.FormatPostFileInfo(util.GetPostFileInfo(post.MediaPath)) }</span>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
@@ -146,7 +146,7 @@ templ PostReply(post database.Post, threadContext ThreadContext) {
|
||||
{ post.MediaPath }
|
||||
</a>
|
||||
<div class="post-img-info">
|
||||
<span>{ util.FormatFileInfo(util.GetPostFileInfo(post.MediaPath)) }</span>
|
||||
<span>{ util.FormatPostFileInfo(util.GetPostFileInfo(post.MediaPath)) }</span>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
|
||||
Reference in New Issue
Block a user