aboutsummaryrefslogtreecommitdiffstats
path: root/internal/store/blogs.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/store/blogs.go')
-rw-r--r--internal/store/blogs.go21
1 files changed, 19 insertions, 2 deletions
diff --git a/internal/store/blogs.go b/internal/store/blogs.go
index 3117154..579d73d 100644
--- a/internal/store/blogs.go
+++ b/internal/store/blogs.go
@@ -7,6 +7,7 @@ import (
"fmt"
"time"
+ "github.com/gramanas/blogspace/internal/config"
"github.com/gramanas/blogspace/internal/db"
"github.com/jackc/pgx/v5"
)
@@ -19,6 +20,8 @@ type Blog struct {
Subdomain string
DBName string
CreatedAt time.Time
+ // Per-file upload limit set by the superadmin; 0 means the server default.
+ MaxUploadBytes int64
// from the blog database
Title string
Tagline string
@@ -27,17 +30,25 @@ type Blog struct {
UpdatedAt time.Time
}
-const blogCols = `id, owner_id, subdomain, db_name, created_at`
+const blogCols = `id, owner_id, subdomain, db_name, created_at, COALESCE(max_upload_bytes, 0)`
func scanBlog(row interface{ Scan(...any) error }) (*Blog, error) {
var b Blog
- err := row.Scan(&b.ID, &b.OwnerID, &b.Subdomain, &b.DBName, &b.CreatedAt)
+ err := row.Scan(&b.ID, &b.OwnerID, &b.Subdomain, &b.DBName, &b.CreatedAt, &b.MaxUploadBytes)
if err != nil {
return nil, wrap(err)
}
return &b, nil
}
+// UploadLimit is the per-file limit that applies to this blog.
+func (b *Blog) UploadLimit(cfg *config.Config) int64 {
+ if b.MaxUploadBytes > 0 {
+ return b.MaxUploadBytes
+ }
+ return cfg.MaxUploadBytes
+}
+
func (bs *BlogStore) loadSettings(ctx context.Context, b *Blog) error {
err := bs.db.QueryRow(ctx, `SELECT title, tagline, language, theme, updated_at FROM settings`).Scan(&b.Title, &b.Tagline, &b.Language, &b.ThemeJSON, &b.UpdatedAt)
if errors.Is(err, pgx.ErrNoRows) { // registered, but the database is empty: not a 404
@@ -174,6 +185,12 @@ func (s *Store) DeleteBlog(ctx context.Context, b *Blog) error {
return s.cluster.DropBlogDB(ctx, b.DBName)
}
+// SetBlogUploadLimit overrides the upload limit of one blog; 0 restores the server default.
+func (s *Store) SetBlogUploadLimit(ctx context.Context, id int64, bytes int64) error {
+ _, err := s.db.Exec(ctx, `UPDATE blogs SET max_upload_bytes = NULLIF($2, 0) WHERE id=$1`, id, bytes)
+ return err
+}
+
func (bs *BlogStore) UpdateSettings(ctx context.Context, title, tagline, language string) error {
_, err := bs.db.Exec(ctx, `UPDATE settings SET title=$1, tagline=$2, language=$3, updated_at=now()`, title, tagline, language)
return err