as adapted from i2psnark standalone build.
Use I2CP to build tunnels and connect outside router context,
does not use i2ptunnels at ports 7659 and 7660.
Deprecated in Java 19.
Replacements are Locale.of() and Locale.forLanguageTag().
of() is not available until Java 19.
forLanguageTag() is not available in Android until Android 21.
So we change the console usage to forLanguageTag(),
but cannot change Translate in core because Android.
Fix the original problem this was a workaround for.
The next nonce was put in the old session object that was invalidated.
Put it in the new session object instead.
and stay on same page when clicking hide/show links.
Also fix HTML dangling span if lastUpdated == 0
Fixes Gitea #249
Adapted from GH PR #149 by tahnous
- Move all form buttons to POST and enforce
- Use form attributes for per-tunnel buttons (thanks drzed)
- Remove xml headers
- Remove ancient IE workarounds
Replace the static nonce list with a session-bound nonce queue,
move form keys from static to session.
Prep for button conversion to POST
related changes to follow
Replace the webapp-wide nonce with two session-bound nonce queues,
one for the outer section and details/config pages, one for
the inner (XHR) section.
Any form-stuffing scripts that grab the nonce must be updated
to store and return the session cookie also.
related changes to follow
reported by: bottomlineit.co.za
Replace the following static nonces with a consolidated session-bound nonce queue in CSSHelper:
- "console" static final nonce stored in CSSHelper
- "system" (restart) static final nonce stored in ConfigRestartBean
- "update" nonce stored in System properties via SummaryHelper
- "reseed" nonce stored in System properties via SummaryHelper
related changes to follow
reported by: bottomlineit.co.za
These were non-standard old pre-utf8 fields, and were never well-tested code paths.
name and path are always UTF-8 now according to the specs.
utf-8 flavors bypassed some sanitization.
reported by: bottomlineit.co.za
by not saving the torrent config file twice
(once via storageAllChecked() and once via storageCompleted() from Storage.checkCreateFiles())
the 1st call set running=true but the 2nd set running=false