diff --git a/API.md b/API.md index cde07ce..65858f2 100644 --- a/API.md +++ b/API.md @@ -35,8 +35,6 @@ The central paste entity has the following fields: * `modificationToken` (string) * The token used to authenticate with paste-specific secured endpoints; stored hashed and only returned on initial paste creation * `created` (int64; UNIX timestamp) -* `autoDelete` (boolean) - * The AutoDelete feature works on a paste-specific basis (even if you turn it off, pastes created while it was on will still be automatically deleted) * `metadata` (key-value store) * Different frontends may store simple key-value metadata pairs on pastes to enable specific functionality (for example clientside encryption) @@ -94,7 +92,6 @@ none "id": "paste_id", "content": "paste_content", "created": 0000000000, - "autoDelete": false, "metadata": {}, } ``` @@ -122,7 +119,6 @@ POST /api/v2/pastes "content": "paste_content", "modificationToken": "raw_modification_token", "created": 0000000000, - "autoDelete": false, "metadata": {}, } ``` @@ -149,7 +145,6 @@ PATCH /api/v2/pastes/{paste_id} "id": "paste_id", "content": "new_paste_content", "created": 0000000000, - "autoDelete": false, "metadata": {}, } ``` diff --git a/internal/shared/paste.go b/internal/shared/paste.go index 06e17b9..4c2a762 100644 --- a/internal/shared/paste.go +++ b/internal/shared/paste.go @@ -13,7 +13,6 @@ type Paste struct { DeletionToken string `json:"deletionToken,omitempty" bson:"deletionToken"` // Required for legacy paste storage support ModificationToken string `json:"modificationToken,omitempty" bson:"modificationToken"` Created int64 `json:"created" bson:"created"` - AutoDelete bool `json:"autoDelete" bson:"autoDelete"` Metadata map[string]interface{} `json:"metadata" bson:"metadata"` } diff --git a/internal/storage/file/file_driver.go b/internal/storage/file/file_driver.go index 0b3593d..ccdbc78 100644 --- a/internal/storage/file/file_driver.go +++ b/internal/storage/file/file_driver.go @@ -133,7 +133,7 @@ func (driver *FileDriver) Cleanup() (int, error) { // Delete the paste if it is expired lifetime := config.Current.AutoDelete.Lifetime - if paste.AutoDelete && paste.Created+int64(lifetime.Seconds()) < time.Now().Unix() { + if paste.Created+int64(lifetime.Seconds()) < time.Now().Unix() { err = driver.Delete(id) if err != nil { return deleted, err diff --git a/internal/storage/mongodb/mongodb_driver.go b/internal/storage/mongodb/mongodb_driver.go index 5ba4af8..1116fdf 100644 --- a/internal/storage/mongodb/mongodb_driver.go +++ b/internal/storage/mongodb/mongodb_driver.go @@ -159,7 +159,7 @@ func (driver *MongoDBDriver) Cleanup() (int, error) { // Delete the paste if it is expired lifetime := config.Current.AutoDelete.Lifetime - if paste.AutoDelete && paste.Created+int64(lifetime.Seconds()) < time.Now().Unix() { + if paste.Created+int64(lifetime.Seconds()) < time.Now().Unix() { err = driver.Delete(id) if err != nil { return 0, err diff --git a/internal/storage/postgres/migrations/000004_remove_paste_specific_autodelete.down.sql b/internal/storage/postgres/migrations/000004_remove_paste_specific_autodelete.down.sql new file mode 100644 index 0000000..b15acea --- /dev/null +++ b/internal/storage/postgres/migrations/000004_remove_paste_specific_autodelete.down.sql @@ -0,0 +1,5 @@ +begin; + +alter table if exists "pastes" add column "autoDelete" boolean; + +commit; \ No newline at end of file diff --git a/internal/storage/postgres/migrations/000004_remove_paste_specific_autodelete.up.sql b/internal/storage/postgres/migrations/000004_remove_paste_specific_autodelete.up.sql new file mode 100644 index 0000000..e637ef2 --- /dev/null +++ b/internal/storage/postgres/migrations/000004_remove_paste_specific_autodelete.up.sql @@ -0,0 +1,5 @@ +begin; + +alter table if exists "pastes" drop column "autoDelete"; + +commit; \ No newline at end of file diff --git a/internal/storage/postgres/postgres_driver.go b/internal/storage/postgres/postgres_driver.go index ce39e44..28480f3 100644 --- a/internal/storage/postgres/postgres_driver.go +++ b/internal/storage/postgres/postgres_driver.go @@ -82,7 +82,7 @@ func (driver *PostgresDriver) Get(id string) (*shared.Paste, error) { row := driver.pool.QueryRow(context.Background(), query, id) paste := new(shared.Paste) - if err := row.Scan(&paste.ID, &paste.Content, &paste.ModificationToken, &paste.Created, &paste.AutoDelete, &paste.Metadata); err != nil { + if err := row.Scan(&paste.ID, &paste.Content, &paste.ModificationToken, &paste.Created, &paste.Metadata); err != nil { if errors.Is(err, pgx.ErrNoRows) { return nil, nil } @@ -94,17 +94,16 @@ func (driver *PostgresDriver) Get(id string) (*shared.Paste, error) { // Save saves a paste func (driver *PostgresDriver) Save(paste *shared.Paste) error { query := ` - INSERT INTO pastes (id, content, "modificationToken", created, "autoDelete", metadata) - VALUES ($1, $2, $3, $4, $5, $6) + INSERT INTO pastes (id, content, "modificationToken", created, metadata) + VALUES ($1, $2, $3, $4, $5) ON CONFLICT (id) DO UPDATE SET content = excluded.content, "modificationToken" = excluded."modificationToken", created = excluded.created, - "autoDelete" = excluded."autoDelete", metadata = excluded.metadata ` - _, err := driver.pool.Exec(context.Background(), query, paste.ID, paste.Content, paste.ModificationToken, paste.Created, paste.AutoDelete, paste.Metadata) + _, err := driver.pool.Exec(context.Background(), query, paste.ID, paste.Content, paste.ModificationToken, paste.Created, paste.Metadata) return err } @@ -118,7 +117,7 @@ func (driver *PostgresDriver) Delete(id string) error { // Cleanup cleans up the expired pastes func (driver *PostgresDriver) Cleanup() (int, error) { - query := "DELETE FROM pastes WHERE autoDelete = true AND created < $2" + query := "DELETE FROM pastes WHERE created < $2" tag, err := driver.pool.Exec(context.Background(), query, time.Now().Add(-config.Current.AutoDelete.Lifetime).Unix()) if err != nil { diff --git a/internal/storage/s3/s3_driver.go b/internal/storage/s3/s3_driver.go index e3f0e06..a16f03b 100644 --- a/internal/storage/s3/s3_driver.go +++ b/internal/storage/s3/s3_driver.go @@ -124,7 +124,7 @@ func (driver *S3Driver) Cleanup() (int, error) { // Delete the paste if it is expired lifetime := config.Current.AutoDelete.Lifetime - if paste.AutoDelete && paste.Created+int64(lifetime.Seconds()) < time.Now().Unix() { + if paste.Created+int64(lifetime.Seconds()) < time.Now().Unix() { err = driver.Delete(id) if err != nil { return 0, err diff --git a/internal/web/controllers/v1/hastebin_support.go b/internal/web/controllers/v1/hastebin_support.go index 3f12f0f..8c8e8f4 100644 --- a/internal/web/controllers/v1/hastebin_support.go +++ b/internal/web/controllers/v1/hastebin_support.go @@ -44,10 +44,9 @@ func HastebinSupportHandler(ctx *fasthttp.RequestCtx) { // Create the paste object paste := &shared.Paste{ - ID: id, - Content: content, - Created: time.Now().Unix(), - AutoDelete: config.Current.AutoDelete.Enabled, + ID: id, + Content: content, + Created: time.Now().Unix(), } // Set a modification token diff --git a/internal/web/controllers/v1/paste_adapter.go b/internal/web/controllers/v1/paste_adapter.go index a977b1d..fae442c 100644 --- a/internal/web/controllers/v1/paste_adapter.go +++ b/internal/web/controllers/v1/paste_adapter.go @@ -7,7 +7,6 @@ type legacyPaste struct { Content string `json:"content"` DeletionToken string `json:"deletionToken,omitempty"` Created int64 `json:"created"` - AutoDelete bool `json:"autoDelete"` } func legacyFromModern(paste *shared.Paste) *legacyPaste { @@ -21,6 +20,5 @@ func legacyFromModern(paste *shared.Paste) *legacyPaste { Content: paste.Content, DeletionToken: deletionToken, Created: paste.Created, - AutoDelete: paste.AutoDelete, } } diff --git a/internal/web/controllers/v1/pastes.go b/internal/web/controllers/v1/pastes.go index 4f8c20c..076bd2a 100644 --- a/internal/web/controllers/v1/pastes.go +++ b/internal/web/controllers/v1/pastes.go @@ -86,10 +86,9 @@ func v1PostPaste(ctx *fasthttp.RequestCtx) { // Create the paste object paste := &shared.Paste{ - ID: id, - Content: values["content"], - Created: time.Now().Unix(), - AutoDelete: config.Current.AutoDelete.Enabled, + ID: id, + Content: values["content"], + Created: time.Now().Unix(), } // Set a modification token diff --git a/internal/web/controllers/v2/pastes.go b/internal/web/controllers/v2/pastes.go index fe363eb..0a3b28d 100644 --- a/internal/web/controllers/v2/pastes.go +++ b/internal/web/controllers/v2/pastes.go @@ -136,11 +136,10 @@ func endpointCreatePaste(ctx *fasthttp.RequestCtx) { payload.Metadata = map[string]interface{}{} } paste := &shared.Paste{ - ID: id, - Content: payload.Content, - Created: time.Now().Unix(), - AutoDelete: config.Current.AutoDelete.Enabled, - Metadata: payload.Metadata, + ID: id, + Content: payload.Content, + Created: time.Now().Unix(), + Metadata: payload.Metadata, } // Create a new modification token if enabled