@@ -341,6 +341,7 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
341
341
}
342
342
343
343
var ownerID sql.NullInt64
344
+ var collectionID sql.NullInt64
344
345
var title string
345
346
var content string
346
347
var font string
@@ -356,7 +357,7 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
356
357
return impart.HTTPError {http .StatusFound , fmt .Sprintf ("/%s%s" , fixedID , ext )}
357
358
}
358
359
359
- err := app .db .QueryRow ("SELECT owner_id, title, content, text_appearance, view_count, language, rtl FROM posts WHERE id = ?" , friendlyID ).Scan (& ownerID , & title , & content , & font , & views , & language , & rtl )
360
+ err := app .db .QueryRow ("SELECT owner_id, collection_id, title, content, text_appearance, view_count, language, rtl FROM posts WHERE id = ?" , friendlyID ).Scan (& ownerID , & collectionID , & title , & content , & font , & views , & language , & rtl )
360
361
switch {
361
362
case err == sql .ErrNoRows :
362
363
found = false
@@ -426,6 +427,16 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
426
427
}
427
428
}
428
429
430
+ var protectDraft bool
431
+ if found && collectionID .Valid {
432
+ collection , err := app .db .GetCollectionByID (collectionID .Int64 )
433
+ if err != nil {
434
+ log .Error ("view post: %v" , err )
435
+ }
436
+
437
+ protectDraft = collection .IsPrivate () || collection .IsProtected ()
438
+ }
439
+
429
440
// Check if post has been unpublished
430
441
if title == "" && content == "" {
431
442
gone = true
@@ -490,6 +501,10 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
490
501
if ! page .IsOwner && silenced {
491
502
return ErrPostNotFound
492
503
}
504
+
505
+ if ! page .IsOwner && protectDraft {
506
+ return ErrPostNotFound
507
+ }
493
508
page .Silenced = silenced
494
509
err = templates ["post" ].ExecuteTemplate (w , "post" , page )
495
510
if err != nil {
0 commit comments