* [sqlite] Added has_content column and relevant migration
* Fix typo in docstring
* [sqlite] Fetch content for bookmarks separately
* [sqlite] Store has_content alongside with bookmark
* [sqlite] Rename variable to distinguish it from main query
* [sqlite] Use by-reference instead of no-op copy
* [sqlite] Reduce queries count from ≈30 to 1 to fetch tags
* Lint fixes
* Make minor logging improvements
* Wrap entire migration in transaction block
* Added «down» migration
* Drop workaround for old SQLite versions
* feat: session expire time from backend
Deduplicated logic from backend and frontend where we needed to take the
login checkbox into account for both back and front codebases. Now the
backend will send the frontend the expire time calculated only in one
place.
This is part of a multi-step process that will store sessions in
database, but this will ease the maintenance of this section for now.
* chore: remove test logger
Fixed a bug where the content of the article would archive but the
reader version would not be saved due to variable passing. Also made the
code easier to follow by following return principles.
Fixes#406
* Fix for infinite redirect loop
path.Join trims the trailing slash if the path isn't /, use configured
root instead.
* Add repo root independence
This makes the workflows agnostic of the repository root, making it
possible to build in forked repos.
* Add HTTP request logging
* Fix proper RootPath handler
* Add logging for all resources
This adds proper logging for all resources, including errors. Logging
is on by default, but can be turned off.
* Report effective length of written data
* feat: async content download when creating via api
Invoking the content download code in a goroutine after saving the
bookmark, this way we can return a response to the user quickly while
the webpage is donwloaded and archived.
Cache api endpont (/api/cache) remains untouched until I understand
the logic behind it.
Also updated the API endpoint for the extension, though I'm unsure why
there's a difference between the "regular" API and the webext API,
they should be using the same APIs.
Add <form> element, as some browsers won't autofill fields
not contained in form.
Remove username and password bindings, and explicitly read
inputs instead. Some browsers do not fire onChange events
when a field is autofilled for security reasons, so Vue
bindings don't register the change.
https://github.com/facebook/react/issues/1159#issuecomment-506584346