Commit graph

234 commits

Author SHA1 Message Date
David Mehren
43c4fa9c2e Await padManager.getPad in getPadLines 2019-03-16 09:07:06 +01:00
Ray Bellis
769933786c allow some operations to proceed in parallel
some code chunks previously used `async.parallel` but if you
use `await` that forces them to be run serially.  Instead,
you can initiate the operation (getting a Promise) and then
_later_ `await` the result of that Promise.
2019-02-01 09:57:50 +00:00
Ray Bellis
e7c2fad7b0 convert some async loops into parallel loops
If you use `await` inside a loop it makes the loop inherently serial.

If you omit the `await` however, the tasks will all start but the loop
will finish while the tasks are still being scheduled.

So, to make a set of tasks run in parallel but then have the
code block after the loop once all the tasks have been completed
you have to get an array of Promises (one for each iteration) and
then use `Promise.all()` to wait for those promises to be resolved.
Using `Array#map` is a convenient way to go from an array of inputs
to the require array of Promises.
2019-02-01 00:07:06 +00:00
Ray Bellis
07ae44ddf4 PadMessageHandler.js: cope better with session disconnects 2019-01-31 15:46:25 +00:00
Ray Bellis
bb80325d2c PadMessageHandler.js: completed conversion 2019-01-30 15:27:42 +00:00
Ray Bellis
9246a1de26 PadMessageHandler.js: further conversion 2019-01-30 13:55:49 +00:00
Ray Bellis
d543d5ae6a PadMessageHandler.js: convert handleUserChanges() to Promises
- the call site still expects a nodeback function, so also introduced the
  `nodeify` module to allow that function to work as expected.
2019-01-30 10:43:01 +00:00
Ray Bellis
e58da69cfb db/SecurityManager.js: converted checkAccess() to pure Promises
Also converted the handler functions that depend on checkAccess() into async
functions too.

NB: this commit needs specific attention to it because it touches a lot of
security related code!
2019-01-28 13:13:24 +00:00
Ray Bellis
1b6430ae9f db/PadMessageHandler.js: partial conversion to Promises
Converted those functions that API.js still depends on, and others that at this
point are never called via the nodeback mechanism.
2019-01-25 18:07:01 +00:00
Ray Bellis
584e481430 PadMessageHandler.js: migrate to thenify 2019-01-22 15:48:29 +00:00
Ray Bellis
ec5baa2ab3 PadMessageHandler.js: convert two remaining API calls to thenify 2019-01-22 12:58:26 +00:00
muxator
e841798314 prepare to async: typos in error messages
This change extracts the grammar correction performed on the async branch,
anticipating them in a single commit. It cannot be folded with the previous
one, as it is not purely cosmetic.
2019-02-15 22:52:53 +01:00
muxator
9497ee734f prepare to async: trivial reformatting
This change is only cosmetic. Its aim is do make it easier to understand the
async changes that are going to be merged later on. It was extracted from the
original work from Ray Bellis.

To verify that nothing has changed, you can run the following command on each
file touched by this commit:
  npm install uglify-es
  diff --unified <(uglify-js --beautify bracketize <BEFORE.js>) <(uglify-js --beautify bracketize <AFTER.js>)



This is a complete script that does the same automatically (works from a
mercurial clone):

```bash
#!/usr/bin/env bash

set -eu

REVISION=<THIS_REVISION>

PARENT_REV=$(hg identify --rev "${REVISION}" --template '{p1rev}')
FILE_LIST=$(hg status --no-status --change ${REVISION})
UGLIFYJS="node_modules/uglify-es/bin/uglifyjs"

for FILE_NAME in ${FILE_LIST[@]}; do
  echo "Checking ${FILE_NAME}"
  diff --unified \
    <("${UGLIFYJS}" --beautify bracketize <(hg cat --rev "${PARENT_REV}" "${FILE_NAME}")) \
    <("${UGLIFYJS}" --beautify bracketize <(hg cat --rev "${REVISION}"   "${FILE_NAME}"))
done
```
2019-02-08 23:20:57 +01:00
muxator
b34fc2de2b use Date.now() instead of new Date().getTime()
This is documented to be more performant.

The substitution was made on frontend code, too (i.e., the one in /static),
because Date.now() is supported since IE 9, and we are life supporting only
IE 11.

Commands:
  find . -name *.js | xargs sed --in-place "s/new Date().getTime()/Date.now()/g"
  find . -name *.js | xargs sed --in-place "s/(new Date()).getTime()/Date.now()/g"

Not done on jQuery.
2019-02-26 23:25:15 +01:00
muxator
90bfbeb38d PadMessageHandler.js: fixed logic error in a guard condition
The guard condition on count being non negative and < 100 used the wrong
boolean operator. In its form it was impossible.

This error was introduced in 2013, in 5592c4b0fe.
Fixes #3499
2019-02-27 00:56:41 +01:00
muxator
4b913172fe PadMessageHandler.js: renamed parameter in handleCustomMessage() to avoid name clash 2019-02-26 22:19:49 +01:00
muxator
791012bb9b PadMessageHandler.js: removed redundant return statement 2019-02-26 19:15:22 +01:00
muxator
b60c0b122c PadMessageHandler: reversed condition to make core logic evident. No behavioural changes.
This one replaces a big "if (message)" negating its truthy condition.

Being lame, I erred on the safe side and wrote a super ugly statement that is
guaranteed to respect the original logic.

In the hope that eventual logic errors become more evident now.

See: https://stackoverflow.com/questions/36661748/what-is-the-exact-negation-of-ifvariable-in-javascript#36661843
2018-08-29 01:23:38 +02:00
muxator
324929ca2d PadMessageHandler: early return to reduce code depth.
Get rid of an else branch to simplify code layout. No functional changes at all.

==============

This series is an attempt to reduce the control structure depth of the code
base, maintaining at the same time its exact same behaviour, bugs included. It
is, in a sense, an initial attempt at a refactoring in the spirit of its
original definition [0].

The idea beyond this refactoring is that reducing the code depth and, sometimes,
inverting some conditions, bugs and logic errors may become easier to spot, and
the code easier to read.

When looked at ignoring whitespace changes, all of these diffs should appear
trivial.

[0] https://refactoring.com/
2018-08-29 00:57:28 +02:00
muxator
e34c74b24d skins: the settings class understands skinName. Send skinName value to the client
skinName must be a single string (no directory separators in it) pointing to an
existing directory under /src/static/skins.
In case these conditions are not met, its value is rewritten to "no-skin".

Also, the value of skinName if sent to the client via clientVars for allowing
its use it in the browser.
2018-08-26 21:17:04 +02:00
anugu-chegg
7b6a4aba30 Remove leftover code from earlier commits 2018-04-19 23:23:16 +02:00
anugu-chegg
b4068144c3 Refactor code 2018-04-19 23:23:16 +02:00
anugu-chegg
461ed413b7 Fix few mistakes 2018-04-19 23:23:16 +02:00
anugu-chegg
d41e184a3c Send commits missed during the reconnect 2018-04-19 23:23:16 +02:00
anugu-chegg
bf05e9ae89 Handle client reconnect properly 2018-04-19 23:23:16 +02:00
Joas Souza
f1fcd16894 Add settings to scroll on edition out of viewport (#3282)
* Add scroll when it edits a line out of viewport

By default, when there is an edition of a line, which is out of the
viewport, Etherpad scrolls the minimum necessary to make this line
visible. This makes that the line stays either on the top or the bottom
of the viewport. With this commit, we add a setting to make possible to
scroll to a position x% pixels from the viewport. Besides of that, we
add a setting to make an animation of this scroll.
If nothing is changed on settings.json the Etherpad default behavior is
kept
2018-01-03 19:57:28 -02:00
Luiza Pagliari
cf686282ef Do not use cookie for pad shortcuts
Users still cannot choose which shortcuts they want to enable/disable,
so it does not make sense (yet) to have a cookie with that preference.

This can be reverted once we create an UI to change shortcuts, but
PLEASE PLEASE PLEASE do not read the cookie every time handleKeyEvent is
called!!!

This is an adjustment to #2891.
2017-05-11 12:26:14 -03:00
Luiza Pagliari
009cd31243 [feature] Create option to automatically reconnect after a few seconds
On some erros that display a modal with "Force reconnect" button, allow
Etherpad to automatically reload pad after a few seconds. Amount of
seconds is defined on settings.json.

Still need to create tests for this feature, and implement i18n.
2017-04-04 11:09:24 -03:00
Stefan
14e1f3bf22 Update socket.io to version 1.4.5 2016-04-26 18:55:58 +02:00
Chris Birk
7f517eca0b check for soffice before removing export paths 2015-12-17 21:54:04 -06:00
John McLear
8a79ae6e02 regex incoming colors 2015-11-26 15:55:26 +00:00
Luiza Pagliari
5deb06d589 Create setting to control if a new line will be indented or not
Currently pressing ENTER on a line that ends with ':', '[', '(' or '{'
automaticaly indents the new line with 4 spaces. The variable added by
this commit to settings.json allow an Etherpad instance to not have this
behavior.
2015-10-13 18:39:23 -03:00
Stefan
9d29b15def Merge pull request #2730 from emilyxxie/clientready_hook
added clientReady hook
2015-10-10 13:30:36 +02:00
webzwo0i
1ee1f818db if granularity is negative, endNum is negative and loop 2015-10-09 14:55:59 +02:00
webzwo0i
31f7c7e0f2 check if ChangesetRequest granularity is a number (#2796) 2015-10-09 14:55:19 +02:00
Stefan
94cb743ca8 Fix API call appendChatMessage to send new message to all connected clients 2015-08-15 22:05:31 +02:00
Emily Xie
21f0d12d31 clientReady hook- pass entire message, updated doc 2015-07-20 11:45:41 -04:00
Clark Boylan
1060595676 Check for valid session in handleUserInfoUpdate
Address issue 2674 by checking that the session is valid and has a valid
author and padId before using it to update the userInfo for that
session. Otherwise it is possible that by the time we try to update a
session with new userInfo that session has disconnected and is no longer
available to be updated. Without this commit the etherpad-lite service
gracefully shutsdown whenever this happens.
2015-06-24 15:18:35 -07:00
Xavid
0713553906 Allow a pad to only end with a single newline, rather than requiring two. 2015-06-19 14:02:18 -04:00
John McLear
3944a0e79b more read only mode fixes andadd support for handleMessageSecurity hook 2015-05-20 01:05:53 +01:00
John McLear
8ed12c7776 session key is now ignored and also padOptions are available in settings 2015-04-11 21:22:00 +01:00
John McLear
b404af7c17 Merge pull request #2530 from webzwo0i/exception-handling-for-mimatched-composition
do not crash when encountering mismatched compositions. log the changese...
2015-03-31 23:17:51 +01:00
webzwo0i
f249b42ab4 empty author should be allowed to support clearAuthorship functionality 2015-03-03 16:39:14 +01:00
webzwo0i
0693c0ae97 - operator do not show up in the attribs of a pad, but authors could still leak to the pool 2015-03-03 15:37:56 +01:00
webzwo0i
01cd82427a check author in = operator 2015-03-03 15:20:33 +01:00
webzwo0i
0f82cd8711 print revision numbers - not changesets - in warn-log 2015-03-02 11:14:24 +01:00
webzwo0i
683c9dfb7c callback with argument error in async.series instead 2015-03-02 11:05:33 +01:00
webzwo0i
7719117e1e do not crash when encountering mismatched compositions. log the changesets and padid 2015-02-26 14:57:49 +01:00
webzwo0i
6b0cf29af6 Stop processing a message without auth (i.e. a client did not send
CLIENT_READY)
2015-01-24 06:34:41 +01:00
Stefan
c20a7e9bce Merge pull request #2406 from Gared/fix/author-not-set-callback
Fix missing callback of #2400 and ignore missing author on timeslider on client-side
2014-12-30 14:55:49 +01:00
John McLear
3fe802077c Merge pull request #2091 from webzwo0i/disconnect-if-an-old-cs-is-submitted-twice
disconnect client if it submits an already accepted changeset based on a...
2014-12-29 02:01:03 +01:00
John McLear
8603fb4583 fix sockets of switch to pad 2014-12-29 00:46:47 +01:00
John McLear
6b1fee400d Merge branch 'switch-to-pad' of github.com:derosm2/etherpad-lite into localTest 2014-12-29 00:40:07 +01:00
Gared
9cf19b99fe Fix missing callback of #2400 and ignore missing author on timeslider on client-side 2014-12-27 22:25:24 +01:00
John McLear
7df944b3fd Merge pull request #2404 from webzwo0i/sanity-in-atext
block changeset if it deletes more lines than exist in the whole pad
2014-12-27 18:36:13 +01:00
Gared
40c7ee9df9 Prevent server crash if author is not set 2014-12-27 14:26:05 +01:00
webzwo0i
5306f0c98a wrap appendRevision in try-catch block 2014-12-04 16:05:02 +01:00
John McLear
6fea3a25f8 stop death on no session 2014-11-30 21:21:58 +00:00
John McLear
a3f6b2edb7 more fixes 2014-11-23 22:33:56 +00:00
John McLear
764b8af5e3 Merge pull request #2334 from luto/api-mystery-crash
fix api mystery crash
2014-11-22 15:50:23 +00:00
luto
4eee89ad12 fix api mystery crash 2014-11-22 16:46:37 +01:00
John McLear
703440acd7 missing socketio fix 2014-11-21 00:11:50 +00:00
John McLear
053ff3097d whoops I missed this one 2014-11-04 23:29:45 +00:00
John McLear
9fa77cdea2 working handling of setting client ip and anonymizing etc 2014-11-04 23:25:18 +00:00
John McLear
f418dfa205 fix author notification handler 2014-11-04 22:37:10 +00:00
John McLear
af3e8e5e15 fix room client leave 2014-11-04 22:34:43 +00:00
John McLear
8391f902fb re-apply roomsize 2014-11-04 22:31:09 +00:00
John McLear
a6cbb4af40 working messages 2014-11-04 19:58:38 +00:00
John McLear
68eaa09708 Begin to repair damage done to rooms logic 2014-11-04 19:55:05 +00:00
John McLear
adef0af227 more stuff required to stop it crashing, now we have identified what needs fixing we can fix it 2014-11-04 18:01:41 +00:00
John McLear
1e53c4f5f0 identify which parts are causing issues and comment them out, obviously this needs fixing 2014-11-04 17:57:18 +00:00
Simon Gaeremynck
2f8b860e69 Added a userLeave hook that gets called when a user leaves a pad 2014-08-08 15:49:15 +01:00
Mike DeRosa
25f6c9bf9a Checking if the author for the sessions match instead of comparing the entire session. 2014-07-12 16:40:59 -04:00
Mike DeRosa
7861cae763 Cleaning up switchToPad functionality so that we only need one call to the server("SWITCH_TO_PAD") instead of two (cleaning session info and client ready).
Also Clearing chat messages when switchToPad is called in pad.js instead of having the server tell the client to clear the chat messages.
2014-07-12 16:27:00 -04:00
Mike DeRosa
4ccd7131d3 Added function to switch to a different pad without having to reload the whole page. 2014-06-14 14:25:56 -04:00
John McLear
56fd078469 Merge pull request #2092 from webzwo0i/fix-crash-with-queued-messages
Fix crash with queued messages
2014-03-26 19:39:19 +00:00
Marcel Klehr
f6f319960d Fix REQ_CS rev boundary check
fixes #2096
2014-03-20 21:34:01 +01:00
webzwo0i
8245e65d3f disconnect client if it submits an already accepted changeset based on an old revision 2014-02-20 18:13:30 +01:00
webzwo0i
fa681d43f7 remember user session because it can be gone when finalHandler is called 2014-02-20 17:38:25 +01:00
webzwo0i
c8c2866087 fix crash if disconnect happens for sessions that have messages queued 2014-02-20 16:33:42 +01:00
Simon Gaeremynck
cfdd57b487 Addressed a potential never finishing forEach in PadMessageHandler.padUsers
If the session info for a client would be null or undefined, the forEach
callback would never get called which means the padUsers callback would
never get trigged. This could potentially block API request as this function
is exposed at an HTTP API endpoint.
2014-02-19 10:48:15 +00:00
Marcel Klehr
adf05576b2 Don't crash if CHANGESET_REQ fails 2013-12-17 16:20:57 +01:00
s1341
5add63165d Fix server side bug index overflow
The server wasn't properly checking that the changesets it needed to
return for changeset_requests actually existed.
2013-12-17 15:37:35 +02:00
webzwo0i
aadcfbb3d1 do not send globalPadId in clientvars - its not used anywhere 2013-12-08 17:29:41 +01:00
Luc Didry
3d8452b143 Replace tabs indentation with spaces indentation
Some files are obviously external libraries, I didn't touch them
2013-12-05 08:41:29 +01:00
Marcel Klehr
7b84e7308b Merge branch 'metrics' into develop
Conflicts:
	src/node/handler/PadMessageHandler.js
2013-10-28 12:11:25 +01:00
Marcel Klehr
3ad4b1b837 stats: Add http500, memoryUsage, pendingEdits gauges
and turn edits metric into a timer instead of a simple meter
2013-10-27 21:43:32 +01:00
Marcel Klehr
940f114a84 Record metrics with 'measured' 2013-10-27 17:42:55 +01:00
Grant Woodford
fbe4e43c3d Privacy: Add an option to disable IP logging 2013-10-19 21:37:11 +02:00
vileda
77c2313025 pass correct padID to checkAccess if pad is requested via readOnly link 2013-10-13 22:31:41 +02:00
Marcel Klehr
aa77a615da Drop messages from unknown connections
fixes #1908
2013-10-12 18:51:04 +02:00
Marcel Klehr
7f10b9a42f Add explanations for more disconnect scenarios 2013-10-10 21:11:15 +02:00
Marcel Klehr
d4c99d40b8 Never keep processing a changeset if it's corrupted 2013-10-10 18:19:25 +02:00
Marcel Klehr
6689a3c02e Catch errors during preparation of client vars
... and disconnect the user
2013-10-10 16:38:41 +02:00
Marcel Klehr
de73de38b1 Filter author attribs in client_vars.historicalAuthorData 2013-10-07 18:58:20 +02:00
Marcel Klehr
9fac515885 Revert "do not pass historical author data to read only users"
This reverts commit b32aaaeb1b.
2013-10-07 18:54:57 +02:00
John McLear
d7088031fa remove white space 2013-10-06 15:16:32 +01:00
John McLear
b32aaaeb1b do not pass historical author data to read only users 2013-10-06 15:15:43 +01:00
Marcel Klehr
7f7d506ff3 Don't stop processing changesets if there is an error
fixes #1895
2013-09-23 16:38:55 +02:00
tonoman3g
e60591a4d5 fix padUsers http api call in PadMessageHandler.js.
Add callback() function call to iterator function.
2013-09-09 21:24:41 +07:00