Commit Graph

19 Commits

Author SHA1 Message Date
Michael Bayne dca5d69f9f Various formatting & style blah blah. 2019-05-09 10:34:35 -07:00
sergiorussia 7cf4ce0b2f unit tests 2019-05-05 18:06:52 +03:00
Michael Bayne 9402d7c900 Update copyright headers. 2018-12-06 11:55:49 -08:00
Michael Bayne 16b8b836e4 Clean up the nresource patch & older code cache stuff.
Two important changes:

1. Don't change the name of the code cache dir as that would leave a stale code
cache around on old installations that were using the code cache.

2. Don't create a native libs cache dir if there are no native resources.

Everything else is mostly cosmetic and organizational.
2018-12-06 11:51:15 -08:00
vsolanki 86723193e6 Use nresource=[native jar] to add contents of resource to java.library.path
This feature makes use of the current caching system for "code" jars. Resources marked by nresource are copied to specific cache directories, unpacked, and then the caches are added to the applications java.library.path. This "native" cache is cleaned according to "cache_retention_days", similar to the code cache.
2018-12-05 12:00:58 -05:00
Michael Bayne 2fbc7cb12c Fix bug in EnvConfig, add tests.
Fixes #164.
2018-11-26 12:20:50 -08:00
Michael Bayne 883954c3e5 Consolidate & enhance "environment config" handling.
The new code is more careful about how it obtains config info, and issues
warnings when sources of info conflict. It does not abort in such circumstances
as Getdown's prime directive is to do the best it can to get the app updated
and launched. But the warnings will hopefully allow accidental conflicts to be
detected and avoided before being deployed to customers.

We also now allow bootstrap.properties to provide an appid; that matches what
was possible via system properties and command line arguments. We also avoid
"communicating" environment configuration through the Java system properties
mechanism. We now read from sysprops but do not write back to them.

Lastly, this includes some name tidying (like appdir -> appDir and
getAppdir -> getAppDir).
2018-09-17 13:44:14 -07:00
Michael Bayne 935f77e3e8 Merge pull request #135 from sdgx/dos-start-delay
Small DoS mitigation: add start delay sanity check
2018-09-14 14:49:53 -07:00
Michael Bayne 0548befe2b Replace singleton with static methods.
Apologies for messing with code after the fact, but some OOPisms are just too
much for me to stomach. This should just be a function of two arguments. No
objects required.

Yes, we're now reparsing the whitelist on every call, but this function is
called only a handful of times.
2018-09-14 14:36:23 -07:00
Michael Bayne 64ce5c2e1c Merge pull request #136 from sdgx/patch-notes-url-command-injection
Avoid possible command injection (patch notes URL)
2018-09-14 14:35:45 -07:00
Michael Bayne 655da01d56 Merge pull request #138 from sdgx/url-whitelist-2
Implement URL host whitelist
2018-09-14 14:19:23 -07:00
Daniel Gredler f49bc7daf5 Update dependencies and enable Mockito extension so that we can mock final classes 2018-09-13 16:43:53 -04:00
Daniel Gredler dac72d1665 Implement URL host whitelist
Allows users to build customized Getdown JARs which can only talk to whitelisted hosts. This can be useful for very security-conscious organizations which want to distribute Getdown internally as a standard application bootstrapping mechanism, but want to ensure that it can only be used for internal applications.

This is an adaptation of the whitelist proof-of-concept discussed on the mailing list, adjusted to use the new Build class.

(Triggered by internal security audit and Fortify analysis.)
2018-09-13 12:18:33 -04:00
Daniel Gredler 70174d2a98 Avoid possible command injection
Because we are running cmd.exe here, it is possible to use a malicious URL to execute arbitrary commands on the shell ( e.g. if url=http://my-patch-notes.com/" & del C:\ )

(Triggered by internal security audit and Fortify analysis.)
2018-09-12 16:26:25 -04:00
Daniel Gredler a7d847a8e8 Small DoS mitigation: add start delay sanity check
These types of denial of service issues are more common in web applications, but even here an attacker could tie up system resources indefinitely by specifying a very large start delay.

(Triggered by internal security audit and Fortify analysis.)
2018-09-07 13:55:37 -04:00
Michael Bayne 108f87d4c7 Simplify Color & Rectangle handling, fix bug.
We can just keep Color in its ARGB format and have a single static brightness()
helper. Reactangle grew a union method which allows us to avoid AWT's Rectangle
entirely.

stringsToList() needed to return null for null array input, and I went ahead
and used Arrays.asList while I was in there because we know the provenance of
the input array, no one will mutate it.
2018-09-05 16:11:20 -07:00
Daniel Gredler 1f2c736564 Unsafe public fields in UpdateInterface class: make public fields final
This commit makes the UpdateInterface class immutable. The Config -> UpdateInterface initialization is moved to the UpdateInterface constructor. Default values for the fields are moved to the constructor as well. Instances of String[] are changed to List<String> and made immutable. Instances of java.awt.Rectangle (which is mutable) are replaced with a new immutable com.threerings.getdown.util.Rectangle class.

Although java.awt.Color is (sort of) immutable, it was also removed and replaced with a new immutable com.threerings.getdown.util.Color class, since it was the last dependency from the getdown core module to anything in the java.awt package, which means that when we migrate to Java 9+ the core module should no longer require a dependency on the java.desktop module.

The assertions and expected values in ColorTest have been verified against the corresponding java.awt.Color values.

(Triggered by internal security audit and Fortify analysis.)
2018-09-05 17:07:58 -04:00
Michael Bayne 97ec8632ae Eliminate samskivert dependency in core.
I've long wanted to do this, but the launcher's use of all the samskivert UI
stuff made it onerous. Now that the launcher is a separate module, we can
remove the samskivert dependency in core (and tools), which simplifies things
and makes it easier to depend on core in a (future) self-updating app (when we
add support for that).
2018-09-04 13:54:40 -07:00
Michael Bayne 4c383f99c7 Split Getdown into multiple (Maven) modules.
- core: the main Getdown logic code
- tools: code to create digest.txt & patch files
- launcher: the standalone launcher/updater app
- ant: the Ant task for creating digest.txt files

This paves the way for a proper Jigsaw-ification of the Getdown code.

I may further factor code out of getdown-launcher and into getdown-core to
enable the use-case where an app embeds Getdown completely and does not use the
launcher app/UI. That will also make it easier to create a JavaFX UI and retire
the old Swing UI.

This also moves the obsolete applet code into a separate applet module, which
is merely a temporary holding area. It will be deleted in the next commit.
2018-09-04 12:31:46 -07:00