Skip to content

Commit 3e7d236

Browse files
authored
Merge pull request writefreely#528 from isaacsu/protect-drafts
Protect drafts if they are part of a Private or Protected collection
2 parents a1becfd + bf213cd commit 3e7d236

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

posts.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
341341
}
342342

343343
var ownerID sql.NullInt64
344+
var collectionID sql.NullInt64
344345
var title string
345346
var content string
346347
var font string
@@ -356,7 +357,7 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
356357
return impart.HTTPError{http.StatusFound, fmt.Sprintf("/%s%s", fixedID, ext)}
357358
}
358359

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)
360361
switch {
361362
case err == sql.ErrNoRows:
362363
found = false
@@ -426,6 +427,16 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
426427
}
427428
}
428429

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+
429440
// Check if post has been unpublished
430441
if title == "" && content == "" {
431442
gone = true
@@ -490,6 +501,10 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error {
490501
if !page.IsOwner && silenced {
491502
return ErrPostNotFound
492503
}
504+
505+
if !page.IsOwner && protectDraft {
506+
return ErrPostNotFound
507+
}
493508
page.Silenced = silenced
494509
err = templates["post"].ExecuteTemplate(w, "post", page)
495510
if err != nil {

0 commit comments

Comments
 (0)