Commit graph

160 commits

Author SHA1 Message Date
Michael Meeks
1b6af5e28d killpoco: remove lots of redundant JSON includes.
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
Change-Id: I976c5b8d6763cbbf0ee5cadfa2f7335ec719fe85
2024-04-25 09:06:13 +02:00
Caolán McNamara
fa994b2177 cid#360699 Uninitialized scalar field
Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: I578424a95b728d285924b78679d9ec23ad53972b
2024-04-16 15:19:35 +02:00
Ashod Nakashian
4c19afdd01 wsd: capture the file size in StorageBase::FileInfo
Change-Id: I842c730a51cbb336e108f26e717a17b12f12eb49
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2024-04-03 14:26:28 +01:00
Ashod Nakashian
c121488a67 wsd: WopiStorage cleanup
Remove MOBILEAPP directives and create
stub WopiStorage and WOPIFileInfo.

Change-Id: I57cd5a008d625ac53ef23c4bb3872381af35560c
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2024-03-09 12:37:19 -05:00
Ashod Nakashian
d57baeb906 wsd: reduce directives for unused variable supression
We use [[maybe_unused]] to reduce explicit supression
especially under compile-time directives.

Change-Id: Ic5f3f3227a80efe52097cb35520d05b9cdaacb42
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2024-03-09 12:37:19 -05:00
Ashod Nakashian
2e8561195c wsd: move deprecated logic under legacy_server config
We no longer send LOOL-WOPI headers, unless
the configuration specifically flags for
legacy servers. But we always send COOL-WOPI
even to legacy servers, to help them upgrade
seamlessly.

Change-Id: Ifc919ed8f6665cd8f846117ef4e8b7ef09fbd563
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2024-03-02 04:02:26 -05:00
Ashod Nakashian
7570dd299c wsd: use RequestVettingStation for async loading
This replaces the synchronous loading logic
with the new asynchronous one.

Change-Id: I20fd7903cffbbd7c524d8051295113439ef75d5b
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2024-02-24 14:09:22 -05:00
Michael Meeks
f1f198b197 wsd: Blank stored timestamp if an up-load times out.
Quite possibly we did successfully up-load, or at least our timestamp
may not match, but we cannot be sure enough to warn the user in this
case. We cannot reliably get notified of remote alteration on the
server of files, so wait until a more succesful save or new user
join to get an improved timestamp.

Change-Id: I5c8124ed74ba5c26371768ac778b9670282c87a3
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
2024-02-21 09:38:49 +00:00
Ashod Nakashian
3a109537ee wsd: exclude WopiStorage in mobile builds
This excludes Wopi handling (as much as possible)
from mobile builds.

Change-Id: I4abb00f02e77b5d89d56ced49ce19a37ae93c13e
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2024-02-09 15:50:50 +00:00
Ashod Nakashian
61cf7b9601 wsd: clean up unused header includes
Clang-tidy recommendation driven header
include clean-up.

Change-Id: I30c32866b7798e70df0463ee6bc7a0bcc3de5049
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2024-01-08 08:38:48 +01:00
Hubert Figuière
aa43f7e43b wopi: Added DisableInsertLocalImage
This allow being able to disable pick up of a local image. Handle the UI as well.
To be used with EnableInsertRemoteImage.

Return DisableInsertLocalImage: true as part of the WOPI CheckFileInfo reply
Default value is false (enabled)

Added an 'insertremotegraphic' button to the classic toolbar for use when
it's the only option.

Signed-off-by: Hubert Figuière <hub@collabora.com>
Change-Id: I1925f804433a7bda6025cb65b0943d78927bea15
2023-12-04 20:36:13 +00:00
Ashod Nakashian
a624a704ac wsd: add StorageConnectionManager
StorageConnectionManager centralizes the
connection creation and management of
Storage sockets and related bits.
This is needed as we move to a more async
model of communicating with the Storage.

Change-Id: I7a44c95c113bbc536e922b5aa3f7cf9b71917c22
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-11-27 10:48:44 +00:00
Michael Meeks
7183a3d3de spdx: improve machine and human readability of headers.
Change-Id: Ice934380029bf27054e830fffc07a5d037d1430f
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
2023-11-14 19:36:31 +00:00
Michael Meeks
47b89b32ef spdx: improve machine and human readability of headers.
Change-Id: I1b6dcd2ec1fbef6556d70b8af3ccfd5d6a95c59a
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
2023-10-31 10:33:07 +00:00
Caolán McNamara
df1cb7164c cid#318873 don't pass object by const reference
Poco::JSON::Object::Ptr anonObject(object) is effectively a
const_cast and the comment in the header warns that object
may be modified, so just pass it by non-const and drop the cast
and merge the resulting duplicate stringify call

Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: I9701ae95ff991b0dece854f295ba76ac9b3c2fa5
2023-10-20 08:25:07 +02:00
Caolán McNamara
acbea27acf cid#318979 Big parameter passed by value
Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: Iae9f67cf8bd71d8df51409e91606c68b51244ac2
2023-10-18 08:31:41 +02:00
Ashod Nakashian
004d0c66b2 wsd: simplified initialization of WOPIFileInfo
Reduced duplication.

Change-Id: I2b97d84a0c132c02a833bfbf78957d8f9765129d
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
08908a6a0e wsd: WOPIFileInfo inherits FileInfo
Change-Id: I2a40e0b6c7d260c6377b13250cd13681156b5ff1
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
7af95798df wsd: cleaner modification of private members
Now StorageBase::getFileInfo() is strictly
used for reading.

Change-Id: I0d412e7ef6e502ae8b1864131b6f174e44343273
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
804bfa2e4e wsd: move PostMessageOrigin into WOPIFileInfo
This moves the logic to update the PostMessageOrigin
field in WOPIFileInfo to be done in the constructor.
And now getPostMessageOrigin() returns a const&.

Change-Id: I88936441edb58deb65d901db4baaf6311be3bdd1
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
6d2f3605b3 wsd: const parameters for WOPIFileInfo ctor
Change-Id: I9a742d988f3a2817e2f56a0012df38b71a6e0d4e
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
68200eccff wsd: WOPIFileInfo needs not the call duration
The call duration is already logged elsewhere.
No need to pass it around and log again.

Change-Id: Icef50b9a8a48dcecc78a6b99c6311fc0d5b2a676
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
25efeea0d8 wsd: const parameters
Change-Id: Idff04bde8f67905309fffb62eaef351730c3e2e1
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
6530834155 wsd: make URI validation independent of Storage creation
Change-Id: Id8213d23d04fc717683361397d511cbd8300136d
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-22 09:34:29 -04:00
Ashod Nakashian
d4b27f6643 killpoco: replace HTTP status codes
We use our own status codes, which
are type-safe and use streaming
operators to serialize and log.

Change-Id: I0eba7b16694866b5a79476a7ef4b1b78f7f9c176
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-05-11 07:21:42 -04:00
Ashod Nakashian
3dbfce54d3 wsd: helper to dump the state of an object as a string
Change-Id: Ib49a47be2dc37663ef06ac80be981c9f3c029814
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-04-11 08:03:01 -04:00
Michael Meeks
eb43a27396 locking: avoid spamming warnings in some circumstances.
If we have no write-able sessions, we can't lock the document -
fair enough to complain, but not every ~300ms - so defer another
lock period in this case.

Change-Id: I7beb974b3c17fd6ac01a32d8fe50261a54340665
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
2023-03-11 17:42:30 -05:00
Szymon Kłos
07cf933a8c Add Pick Link button
Button is shown when CheckFileInfo contains 'EnableRemoteLinkPicker'.
After press UI_PickLink is send via postMessage.
Action should be finished with sending Action_InsertLink to editor.

Signed-off-by: Szymon Kłos <szymon.klos@collabora.com>
Change-Id: I53c61a25d1fab655771742ec6d97dc056192642a
2023-03-02 12:27:45 +01:00
Ashod Nakashian
9ab65faee3 wsd: detect unuathorized locking/unlocking response
Change-Id: Ia46ad6859f5ce21e506d8c1f96a28430c5f70954
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-02-23 07:58:56 -05:00
Ashod Nakashian
2da70b1cc0 wsd: avoid function-local static configs in LockContext
The function-local static prevents tests
from changing the value of a config.

Change-Id: I5febdbf029293fab39f18afa6d905fd571d59545
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-02-23 07:58:56 -05:00
Tor Lillqvist
31135177e4 Fix compiler warnings when building for WASM.
Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I0fd4fe36cece9caaeb076a0e91894890186706d0
2023-02-12 15:55:24 +01:00
Szymon Kłos
85ada3b6f8 Add UserPrivateInfo
it will be used to store user data which shouldn't
be shared between views

Signed-off-by: Szymon Kłos <szymon.klos@collabora.com>
Change-Id: I58b7f22e4364ce9e07bb6cc74e8431363912a872
2023-01-06 10:36:43 +01:00
Szymon Kłos
0ba87d1de8 Remove unused zotero variable
Signed-off-by: Szymon Kłos <szymon.klos@collabora.com>
Change-Id: I7755122da3f1a1f62ece19fb2248e76c707ca6e4
2022-12-12 13:35:29 +01:00
Andras Timar
a077c4288b Put all Zotero logic to browser
Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: Ib1b071b96322511b7f319ff6b851e902b3556fbb
2022-12-12 13:35:29 +01:00
Ashod Nakashian
f9e52bfe72 wsd: do not upload with expired authorization
We mark expired/invalid/rejected authorization
tokens and skip them in the future.

Change-Id: Iec89942198d566901cc2944f22ef86fcb4d6a820
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2022-12-07 15:42:04 +03:00
Jan Holesovsky
7f96d9276c Implement HideRepairOption in CheckFileInfo
When present and equal to 'true', the 'Repair' button and/or menu entry
is hidden in the UI.

Signed-off-by: Jan Holesovsky <kendy@collabora.com>
Change-Id: If8075be479551e0d1a5fa03014aa5e4412578c31
2022-10-18 13:02:11 +02:00
Ashod Nakashian
cd497ba7f0 wsd: move storage attributes to DocBroker
There are a number of races with having Storage
track the attributes. To fix them, we move all
attributes to DocBroker and correct a number
of issues.

The idea of the design is based on the fact that
we want to capture the attributes between
uploads, but based on the saved document.

That is, when we upload a document version, we
want to pass to the storage whether from the
perspective of the *Storage* there has been
any user-modifications or not. Since saving
to disk may happen multiple times between
uploads (not least because of failures), and
since saving resets the modified flag, we need
to capture the modified flag at each save and
propagate it until we upload successfully.
Upon uploading successfully, we reset the
attributes.

For this reason we have two attribute instances;
one is the 'current' attributes as being uploaded
and the other the 'next' one. We capture the
current state at saving into 'next' and we merge
with 'current' when saving succeeds and we
aren't already uploading (otherwise, we update
it and then discard it when uploading succeeds,
losing the last attributes).

Furthermore, because the modified flag is
reset after each save, and because we might
save and upload immediately after a
modification, we may not have the modified flag.
This means that we need some heuristics to
decide if there has been user-issued
modifications. (It is better to be conservative
here.) We try to detect this by introspecting
the commands we receive from users.

In effect, we capture the attributes when issuing
an internal save, we transfer the captured
attributes only when saving succeeds and we aren't
uploading, and from then on, uploading has to
succeed to reset the 'current' attributes. In the
meantime, if we fail to upload and issue another
save, the new attributes will be captured and
merged with the 'current' and the next upload
will not have any lost attributes.

Change-Id: I8c5e75d25ac235c6232318343678bf5c0933c31e
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2022-08-25 15:12:10 +01:00
Ashod Nakashian
986ff2140d wsd: remove unused uploadLocalFileToStorage
Since we have moved to async uploading, this
synchronous version is not used. This removes
the interface from the base, merges the
implementation for the local-file, and removed
the error-returning one for wopi.

Change-Id: Iad2ba053bbdcd1690083dc69f66c751e7926ef41
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2022-08-25 15:12:10 +01:00
Ashod Nakashian
c11fab5b78 wsd: browser: handle 413 Entity Too Large from storage
It seems at least some storage hosts report disk-full
errors via 413. This logic of handling 413 error as
disk-full was introduced in
f8e0b8c11e.

Here we handle 413 as it is defined, as Entity Too Large.

Change-Id: I61297c2fab9de663643336a6eba47949f82d1737
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2022-05-24 22:48:37 +03:00
Ashod Nakashian
a674a0d52e wsd: detect lost upload on exit and dumpState once only
Change-Id: If5a9601d9baa10dcdab38c57bfba82a45d8e5024
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2022-05-07 14:13:41 +01:00
Rash419
31d8822758 wsd: cleanup: moved all parsing related static methods and containers to HostUtil.cpp
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I8555522c6216f893b90ba4c27747314830f7abd2
2022-03-29 12:18:31 +02:00
Rash419
ddc13c0f4a wsd: added new method to check allowed Aliases
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I24fab96ff977d3f0a85c98257e779216f50dc92f
2022-03-18 18:30:14 +03:00
Rash419
d02dd19f33 wsd: use hostname, port and scheme in doc key
This allows us to use multiple hosts using same coolwsd instance.

added aliases configuration to coolwsd.xml to avoid
possibility of opening the same file as two if the
WOPI host is accessed using different aliases

Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I32913015c15fd396cecc702b76e0dcaa8bcafad3
2022-03-16 11:32:59 +03:00
Rash419
50678c5191 wsd: introduce remote configuration
fetch JSON from remote server and apply new config without restarting coolwsd
- Extended the feature_locked configuration & functionality so that it can be set per wopi host ranges

Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: Id0e2b4b524a80de88b2b3559dd18c4a95b8163fb
2022-02-25 18:36:06 +03:00
Ashod Nakashian
9702cce25f wsd: preserve the original modified time as string
We no store the origina modified time of the document
as we receive from the storage server in string
form and send it back as-is. This avoids any
potential issues with the roundtrip of conversion
to and from a timestamp.

Change-Id: I524bea8f36c3ce62dcd00c4fe6a1e7e083287ed1
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2022-02-08 08:05:39 -05:00
Andras Timar
f07ff8c7e0 rename: remaining lool->cool changes
Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: Ib7d4e804bebe52dead8d53b0e0bbaed0f08bf3d0
2021-11-18 14:14:11 +01:00
Henry Castro
c2d60f3627 wsd: rename 'lool' -> 'cool'
Change-Id: I4ece04921a0e12d4c69b2a70b563e66cc89be0a6
Signed-off-by: Henry Castro <hcastro@collabora.com>
2021-11-17 09:17:54 +01:00
Henry Castro
0fd562881c wsd: update comments
rename loleaflet -> cool

Change-Id: Ife79f691964e8874bcfe49af79bbf78ce16a2816
Signed-off-by: Henry Castro <hcastro@collabora.com>
2021-11-10 17:18:56 +01:00
Ashod Nakashian
4d897435a5 kill reuse_cookies
This remove reuse_cookies as a setting and feature
altogether. It was originally a workaround to aid
with authentication, prior to having access_token.
However, it proved to be less useful than originally
anticipated, primarily because cookies nowadays have
security restrictions in browsers. In addition to
the fact that access_token simply deprecated it.

While the documentation has also been updated,
tests still have reuse_cookies in input data.
This is intentional to ensure the code is
backwards compatible with any deployment that might
still pass URLs with reuse_cookies around.

Change-Id: If214b299b34a910face8cabc7c1335621990c85e
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2021-11-02 08:45:00 -04:00
Szymon Kłos
27e95bbe7e Wait for async save result on DocumentBroker stop
When async save was started but we want to stop DocumentBroker
- we shouldn't kill the socket which listens to save result.
Because when we kill socket we will destroy DocumentBroker
before saving is completed, this allows for a minimal time
to connect again to the document and receive old content
from the WOPI storage. When we wait for async save result
we will keep DocumentBroker alive and next session can be
connected and receive correct content.

fixes: https://github.com/CollaboraOnline/online/issues/2747

Signed-off-by: Szymon Kłos <szymon.klos@collabora.com>
Change-Id: I5505a5ccc1f3d6928c723bddfea16bf5c5798d1e
2021-07-28 13:00:45 +02:00