Commit graph

47 commits

Author SHA1 Message Date
John McLear
8987c5d813 dependencies: upgrade uglify-js 2.6.2 -> 3.8.1 and adapt Minify
This was a major update that required code changes.
2020-04-03 00:05:15 +00:00
Chocobozzz
43ca44e444 minify: make conditional requests work. No HTTP/304 was ever generated and file were reminified uselessly.
By specification [0], the if-modified-since HTTP header sent by browsers does
not include milliseconds.

Before this patch, let's say a file was generate at time:
    t_real-file         = 2020-03-22T02:15:53.548Z (note the fractional seconds)

When issuing a conditional request, the browser would truncate the fractional
part, and only request an if-modified-since with this contents:
    t_if-modified-since = 2020-03-22T02:15:53.000Z

The minify() function would return HTTP/304 only if
t_if-modified-since >= t_real-file, but this would never be true unless, by
chance, a file was generated at XX.000Z.

This resulted in that file being minified/compressed again and resent to the
client for no reason. After this patch, the server correctly responds with
HTTP/304 without doing any computation, and the browser uses the cached file.

[0] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
2020-03-23 11:34:01 +01:00
muxator
ca35488273 minify: upgrade clean-css 3.4.19 -> 4.2.3. Adapt to the semver major change
CleanCSS 3.4.19 had a Regex Denial of Service vulnerability and has to be
updated. The major version bump requires the following changes:

1. Disabling rebase is necessary because otherwise the URLs for the web fonts
   become wrong;

   EXAMPLE 1:
       /static/css/src/static/font/fontawesome-etherpad.woff
     instead of
       /static/font/fontawesome-etherpad.woff

   EXAMPLE 2 (this is more surprising):
       /p/src/static/font/opendyslexic.otf
     instead of
       /static/font/opendyslexic.otf

2. CleanCSS.minify() can either receive a string containing the CSS, or an array
   of strings. In that case each array element is interpreted as an absolute
   local path from which the CSS file is read.

   In version 4.x, CleanCSS API was simplified, eliminating the relativeTo
   parameter, and thus we cannot use our already loaded "content" argument, but
   we have to wrap the absolute path to the CSS in an array and ask the library
   to read it by itself.

Fixes #3616.
2020-03-22 00:33:22 +01:00
muxator
a1978d2245 Minify: on errors, generate logs instead of simply silencing them
This will help when we'll have to update clean-css.
2020-03-20 22:46:39 +01:00
muxator
c2d8ca212b utils/Minify.js: always call statFile() with an explicit value for "dirStatLimit"
In this way the only external call to statFile() provides an explicit value for
"dirStatLimit", and thus the initial check on "undefined" at the start of the
function could be removed (just added a comment for now).
2019-03-27 18:29:12 +01:00
muxator
cdd4978973 utils/Minify.js: removed unused parameter "next" in minify()
Found by the Typescript compiler when doing an experimental conversion.
2019-03-27 18:29:12 +01:00
muxator
5d067406b1 utils/Minify.js: removed unused parameter "redirectCount" in requestURI()
Found by the Typescript compiler when doing an experimental conversion.
2019-03-27 18:29:12 +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
Muh Muhten
3cedf474e5 Fix misparse of port when binding Unix socket
The hostname:port of URIs used in Minify are currently bogus and refer
to localhost only for historical reasons; there's no reason to retain
them and omitting them avoids generating an invalid URI when "port" is
not an integer.

Context: settings.port is passed to express's listen; if not numeric, it
is used a filename for a Unix domain socket.
This allows e.g. starting a server to be reverse-proxied on a multi-user
system, using the filesystem to handle access control and avoiding need
to allocate port numbers.

Before this change, etherpad-lite starts without error when configured
to listen on a Unix domain socket in this manner. However, `pad.js` and
`ace2_common.js` are generated incorrecting, causing an error
"Uncaught Error: The module at "ep_etherpad-lite/static/js/rjquery" does not exist."
when loading the editor:

When settings.port is a non-numeric string, e.g. `etherpad.sock`, a URI
of the form `http://localhost:etherpad.sock/static/js/rjquery.js` is
generated and parsed to find the file needed. In this case, the file
searched for is `:etherpad.sock/static/js/rjquery.js`, rather than the
expected `static/js/rjquery.js`. No such file exists, and the required
code is silently omitted from the bundle.

As a workaround, hard-code a (meaningless) hostname which can be parsed
correctly, since the current code makes no use of it anyway.
2018-08-10 01:57:30 +02:00
joassouza
0025613ba6 Refactor code 2017-02-07 15:06:49 -02:00
joassouza
d1e6c8492d Fix minification of code 2017-02-07 13:04:22 -02:00
Dan Bornstein
0a9d02562d Handle relative paths properly, when @importing. 2016-09-09 12:59:02 -07:00
Dan Bornstein
a5a7ebea3d Handle @import during CSS minification.
This meant plumbing a callback through to `compressCSS()`, which meant that
I had to alter the innards of `getFileCompressed()`. I tried to	leave that
function looking more understandable than when I found it; for example,	I
flattened out the nested `if`.

I went ahead and upgraded the version of `clean-css` while I was in the
territory.
2016-09-09 12:32:24 -07:00
Tom Hunkapiller
6ff7d4e9a6 revert to old path handling, but strip out "..". fixes #2614 2015-04-15 14:31:21 -05:00
louis
0fa7650df8 dont allow directory traversal #2 2015-04-12 17:12:35 +02:00
John McLear
9d4e5f6e35 dont allow directory traversal 2015-04-10 22:02:22 +01:00
John McLear
b9802616b6 use latest cleanCSS 2015-02-04 17:57:34 +00:00
John McLear
c4959b089f resolve merge conflict 2014-12-29 01:54:44 +01:00
John McLear
ee3f3b8060 move clean css back to fix minification on TS 2014-12-21 23:42:56 +00:00
webzwo0i
b204aa2085 remove more dead requires. 2014-12-16 19:10:01 +01:00
John McLear
12f25d8a45 bump cleancss 2014-11-29 01:31:04 +00:00
John McLear
c13301966f yeah need htis too 2014-11-27 02:56:42 +00:00
disy-mk
c78aad16ea adds missing semicolons in src/node/utils folder 2013-03-24 01:18:44 +01:00
Chad Weider
feeab5c1b2 Fix cache headers for missing files. 2012-09-11 22:27:14 -07:00
Chad Weider
03bcd07741 Use packaged version of Tinycon. 2012-09-09 18:18:59 -07:00
Chad Weider
1541237654 Use packaged version of UNorm. 2012-09-09 18:18:59 -07:00
Chad Weider
0da4acfdb5 Use packaged edition of async. 2012-09-09 18:18:59 -07:00
Chad Weider
8e735b0841 Use packaged edition of underscore. 2012-09-09 18:18:59 -07:00
Chad Weider
b47f6ae905 Use packaged edition of security module. 2012-09-09 18:18:59 -07:00
Chad Weider
c4fa2ecddb Don't prefix libraries that are prefixed by '$'. #hack 2012-09-09 18:18:58 -07:00
Chad Weider
3b40850195 Add index paths in tar processing. 2012-09-09 18:18:58 -07:00
Chad Weider
a5653c7192 Clean up tar file processing. 2012-09-09 18:18:58 -07:00
Chad Weider
b8faf1f78b Serve libraries from node_modules. 2012-09-09 18:18:58 -07:00
Chad Weider
766c301a44 Only files should be treated as being existant. 2012-09-09 18:13:37 -07:00
Chad Weider
a97b83babc Another workaround for Windows paths. 2012-09-09 14:42:32 -07:00
Chad Weider
02c22d7b89 Remove loopback from Minify. 2012-09-03 14:38:28 -07:00
Chad Weider
024a26f272 Minify publishes its own mock request thing. 2012-09-03 14:37:26 -07:00
Chad Weider
4413d498d8 Minify is a named function. 2012-09-03 14:35:36 -07:00
Matthias Bartelmeß
5c4551b098 remove maxAge: undefined header, send maxAge even if set to 0 2012-04-04 17:41:03 +02:00
Matthias Bartelmeß
7fbcffb30b fix crash if getFileCompressed fails (i.e. if /static/js is called) 2012-04-03 20:42:02 +02:00
Egil Moeller
dbdc53307e Bugfix to not have server required anywhere as it causes problems for command line script usage of modules 2012-03-14 18:50:13 +01:00
Chad Weider
0944670fb7 Merge remote-tracking branch 'main/master' into develop 2012-03-11 15:58:36 -07:00
Chad Weider
3a115154e7 Migrate tar to use library paths. 2012-03-10 17:16:50 -08:00
Chad Weider
0d6ec8c04a Minify implements virtual plugins resources. 2012-03-10 14:39:37 -08:00
Peter 'Pita' Martischka
7b518eeb2d Fixing client side require, the minify code is completly unused now, very ugly solution 2012-03-04 23:45:33 +01:00
Egil Moeller
2c7b84ca3e Minify now supports plugins 2012-02-26 22:01:52 +01:00
Egil Moeller
1239ce7f28 The Big Renaming - etherpad is now an NPM module 2012-02-26 13:07:51 +01:00
Renamed from node/utils/Minify.js (Browse further)