mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-11-11 03:56:07 -06:00
Compare commits
6 Commits
v2.15.0-be
...
24e863b298
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24e863b298 | ||
|
|
0c9d615f56 | ||
|
|
90561857e8 | ||
|
|
fc68f55d1a | ||
|
|
6a8ec182fa | ||
|
|
69541546ea |
@@ -565,19 +565,15 @@ document.
|
|||||||
|
|
||||||
### Managing encryption {#encryption}
|
### Managing encryption {#encryption}
|
||||||
|
|
||||||
Documents can be stored in Paperless using GnuPG encryption.
|
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
|
|
||||||
Encryption is deprecated since [paperless-ng 0.9](changelog.md#paperless-ng-090) and doesn't really
|
Encryption was removed in [paperless-ng 0.9](changelog.md#paperless-ng-090)
|
||||||
provide any additional security, since you have to store the passphrase
|
because it did not really provide any additional security, the passphrase
|
||||||
in a configuration file on the same system as the encrypted documents
|
was stored in a configuration file on the same system as the documents.
|
||||||
for paperless to work. Furthermore, the entire text content of the
|
Furthermore, the entire text content of the documents is stored plain in
|
||||||
documents is stored plain in the database, even if your documents are
|
the database, even if your documents are encrypted. Filenames are not
|
||||||
encrypted. Filenames are not encrypted as well.
|
encrypted as well. Finally, the web server provides transparent access to
|
||||||
|
your encrypted documents.
|
||||||
Also, the web server provides transparent access to your encrypted
|
|
||||||
documents.
|
|
||||||
|
|
||||||
Consider running paperless on an encrypted filesystem instead, which
|
Consider running paperless on an encrypted filesystem instead, which
|
||||||
will then at least provide security against physical hardware theft.
|
will then at least provide security against physical hardware theft.
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ The following methods are supported:
|
|||||||
- `remove_tag`
|
- `remove_tag`
|
||||||
- Requires `parameters`: `{ "tag": TAG_ID }`
|
- Requires `parameters`: `{ "tag": TAG_ID }`
|
||||||
- `modify_tags`
|
- `modify_tags`
|
||||||
- Requires `parameters`: `{ "add_tags": [LIST_OF_TAG_IDS] }` and / or `{ "remove_tags": [LIST_OF_TAG_IDS] }`
|
- Requires `parameters`: `{ "add_tags": [LIST_OF_TAG_IDS] }` and `{ "remove_tags": [LIST_OF_TAG_IDS] }`
|
||||||
- `delete`
|
- `delete`
|
||||||
- No `parameters` required
|
- No `parameters` required
|
||||||
- `reprocess`
|
- `reprocess`
|
||||||
|
|||||||
@@ -708,7 +708,8 @@ Paperless runs on Raspberry Pi. However, some things are rather slow on
|
|||||||
the Pi and configuring some options in paperless can help improve
|
the Pi and configuring some options in paperless can help improve
|
||||||
performance immensely:
|
performance immensely:
|
||||||
|
|
||||||
- Stick with SQLite to save some resources.
|
- Stick with SQLite to save some resources. See [troubleshooting](troubleshooting.md#log-reports-creating-paperlesstask-failed)
|
||||||
|
if you encounter issues with SQLite locking.
|
||||||
- If you do not need the filesystem-based consumer, consider disabling it
|
- If you do not need the filesystem-based consumer, consider disabling it
|
||||||
entirely by setting [`PAPERLESS_CONSUMER_DISABLE`](configuration.md#PAPERLESS_CONSUMER_DISABLE) to `true`.
|
entirely by setting [`PAPERLESS_CONSUMER_DISABLE`](configuration.md#PAPERLESS_CONSUMER_DISABLE) to `true`.
|
||||||
- Consider setting [`PAPERLESS_OCR_PAGES`](configuration.md#PAPERLESS_OCR_PAGES) to 1, so that paperless will
|
- Consider setting [`PAPERLESS_OCR_PAGES`](configuration.md#PAPERLESS_OCR_PAGES) to 1, so that paperless will
|
||||||
|
|||||||
@@ -292,7 +292,9 @@ many workers attempting to access the database simultaneously.
|
|||||||
Consider changing to the PostgreSQL database if you will be processing
|
Consider changing to the PostgreSQL database if you will be processing
|
||||||
many documents at once often. Otherwise, try tweaking the
|
many documents at once often. Otherwise, try tweaking the
|
||||||
[`PAPERLESS_DB_TIMEOUT`](configuration.md#PAPERLESS_DB_TIMEOUT) setting to allow more time for the database to
|
[`PAPERLESS_DB_TIMEOUT`](configuration.md#PAPERLESS_DB_TIMEOUT) setting to allow more time for the database to
|
||||||
unlock. This may have minor performance implications.
|
unlock. Additionally, you can change your SQLite database to use ["Write-Ahead Logging"](https://sqlite.org/wal.html).
|
||||||
|
These changes may have minor performance implications but can help
|
||||||
|
prevent database locking issues.
|
||||||
|
|
||||||
## granian fails to start with "is not a valid port number"
|
## granian fails to start with "is not a valid port number"
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,72 @@ describe(`Additional service tests for SavedViewService`, () => {
|
|||||||
httpTestingController.verify() // no reload
|
httpTestingController.verify() // no reload
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should reload after create, delete, patch and patchMany', () => {
|
||||||
|
const reloadSpy = jest.spyOn(service, 'reload')
|
||||||
|
service
|
||||||
|
.create({
|
||||||
|
name: 'New Saved View',
|
||||||
|
show_on_dashboard: true,
|
||||||
|
show_in_sidebar: true,
|
||||||
|
sort_field: 'name',
|
||||||
|
sort_reverse: true,
|
||||||
|
filter_rules: [],
|
||||||
|
})
|
||||||
|
.subscribe()
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(`${environment.apiBaseUrl}${endpoint}/`)
|
||||||
|
.flush({})
|
||||||
|
expect(reloadSpy).toHaveBeenCalled()
|
||||||
|
reloadSpy.mockClear()
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(
|
||||||
|
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
|
||||||
|
)
|
||||||
|
.flush({
|
||||||
|
results: saved_views,
|
||||||
|
})
|
||||||
|
service.delete(saved_views[0]).subscribe()
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(`${environment.apiBaseUrl}${endpoint}/1/`)
|
||||||
|
.flush({})
|
||||||
|
expect(reloadSpy).toHaveBeenCalled()
|
||||||
|
reloadSpy.mockClear()
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(
|
||||||
|
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
|
||||||
|
)
|
||||||
|
.flush({
|
||||||
|
results: saved_views,
|
||||||
|
})
|
||||||
|
service.patch(saved_views[0], true).subscribe()
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(`${environment.apiBaseUrl}${endpoint}/1/`)
|
||||||
|
.flush({})
|
||||||
|
expect(reloadSpy).toHaveBeenCalled()
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(
|
||||||
|
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
|
||||||
|
)
|
||||||
|
.flush({
|
||||||
|
results: saved_views,
|
||||||
|
})
|
||||||
|
service.patchMany(saved_views).subscribe()
|
||||||
|
saved_views.forEach((saved_view) => {
|
||||||
|
const req = httpTestingController.expectOne(
|
||||||
|
`${environment.apiBaseUrl}${endpoint}/${saved_view.id}/`
|
||||||
|
)
|
||||||
|
req.flush({})
|
||||||
|
})
|
||||||
|
expect(reloadSpy).toHaveBeenCalled()
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(
|
||||||
|
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
|
||||||
|
)
|
||||||
|
.flush({
|
||||||
|
results: saved_views,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
// Dont need to setup again
|
// Dont need to setup again
|
||||||
|
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ class TestBulkEditAPI(DirectoriesMixin, APITestCase):
|
|||||||
def test_api_modify_tags_not_provided(self, m):
|
def test_api_modify_tags_not_provided(self, m):
|
||||||
"""
|
"""
|
||||||
GIVEN:
|
GIVEN:
|
||||||
- API data to modify tags is missing modify_tags field
|
- API data to modify tags is missing remove_tags field
|
||||||
WHEN:
|
WHEN:
|
||||||
- API to edit tags is called
|
- API to edit tags is called
|
||||||
THEN:
|
THEN:
|
||||||
|
|||||||
Reference in New Issue
Block a user