Skip to content

blubskye/jSite

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

515 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒ jSite

Upload your freesite to Hyphanet with ease~

License: GPL v2 Java Gradle Hyphanet Version

A Java GUI tool for publishing freesites to the Hyphanet (formerly Freenet) network.


๐Ÿช About

jSite is a wizard-style GUI application that lets you insert (upload) websites from a local directory directly into Hyphanet โ€” the privacy-preserving, censorship-resistant distributed network.

It communicates with a running Hyphanet node via the FCP2 protocol over a local TCP connection. No command-line knowledge required โ€” jSite walks you through every step from key generation to live insert.

Originally written by David 'Bombe' Roden, version 0.14 brings a full code audit, security fixes, build system modernisation, and new language support.


โœจ What's New in v0.14

๐Ÿ› Bug Fixes (16)

  • ๐Ÿ”ง Project copy constructor now deep-copies FileOption map โ€” edits no longer bleed between projects
  • ๐Ÿ”’ CLI race condition on --finished flag fixed with proper synchronisation
  • ๐Ÿ”ข Null-safe parseInt guards throughout CLI argument parsing
  • ๐Ÿ“ก UpdateChecker redirect URI parsed correctly (was using wrong field)
  • ๐Ÿ”Œ Connection no longer waits forever on socket reads (30 s timeout added)
  • ๐Ÿ“ ClientPut missing LINEFEED after EndMessage fixed
  • ๐Ÿท๏ธ ProjectFilesPage raw i18n keys replaced with proper translated labels
  • ๐Ÿ–ฅ๏ธ EDT violations fixed in ProjectFilesPage and ProjectInsertPage
  • ๐Ÿ”‘ KeyDialog bounds-checked โ€” no more IndexOutOfBoundsException on malformed keys
  • ๐Ÿ” Key generation guards added for missing @ / / delimiters
  • ๐Ÿ”š TeeOutputStream.close() was calling flush() โ€” fixed to actually close()
  • โš–๏ธ ScannedFile.equals() was using identity (==) โ€” fixed to compare filenames

๐Ÿ”’ Security Fixes (4)

  • ๐ŸŒ WebOfTrustInterface now guards against null request URIs
  • ๐Ÿ“‚ Path separator injection fixed in project path prefix handling
  • ๐Ÿ“‹ Configuration no longer silently swallows IOException on load/save
  • ๐Ÿ”ข CLI --edition argument now validates the integer before applying it

โšก Performance (4)

  • ๐Ÿ“ˆ LineInputStream switched from String concatenation to StringBuilder
  • ๐Ÿ—‘๏ธ ClientPutComplexDir temp file deleted on stream close instead of JVM exit
  • โฑ๏ธ Connection socket now has a 30-second read timeout
  • ๐Ÿ”„ UpdateChecker loop now respects shouldStop() instead of running forever

๐Ÿ—๏ธ Code Quality (8)

  • ๐Ÿชต Skipped files during insert are now logged instead of silently dropped
  • ๐Ÿ”ข Bare int counters replaced with AtomicInteger for thread safety
  • ๐Ÿ—‚๏ธ Null-safe edition parsing in Configuration XML loader
  • ๐ŸŒ Deprecated new Locale(String) replaced with Locale.Builder
  • ๐Ÿงช Mockito imports updated from removed Matchers to ArgumentMatchers

๐Ÿ—๏ธ Build System Modernisation

Component Before After
Gradle 3.1 (2016) 9.4.1
Java target 8 11
JUnit 4.12 4.13.2
Hamcrest 1.3 (2012) 3.0
Mockito 1.10.19 (2014) 5.18.0
JaCoCo 0.7.7 (2016) 0.8.13
Repos http:// https:// + Maven Central
Configs compile / testCompile implementation / testImplementation

๐Ÿ’ก Features

๐Ÿง™ Wizard Interface

Walk through every step without confusion

  • ๐Ÿ–ฅ๏ธ Step-by-step dialog flow
  • โฌ…๏ธโžก๏ธ Previous / Next navigation
  • โœ… Input validation before proceeding
  • ๐Ÿ’พ Configuration persisted between sessions

๐Ÿ“ก Node Management

Connect to your local Hyphanet node

  • ๐Ÿ”Œ FCP2 protocol over TCP
  • ๐Ÿ  Default: localhost:9481
  • ๐Ÿ”ง Configurable hostname & port
  • ๐Ÿ“ถ Auto-reconnect on connection drop

๐Ÿ“ Project Management

Manage all your freesites in one place

  • โž• Create new projects with auto-generated USK keys
  • ๐Ÿ”‘ Import existing keypairs
  • ๐ŸŒ Web of Trust identity key import
  • ๐Ÿ“Š Track insert history & editions
  • ๐Ÿ” Smart re-use: unchanged files insert as redirects

๐Ÿ“‚ File Control

Fine-grained control over what gets inserted

  • โœ… Per-file include / exclude toggle
  • โœ๏ธ Rename files in the freesite (without renaming locally)
  • ๐ŸŽญ MIME type override per file
  • ๐Ÿ”— Custom redirect targets
  • ๐Ÿ“Œ Set default (index) file

๐Ÿš€ Insert Engine

Efficient, resumable inserts

  • ๐Ÿ“ˆ Real-time progress with block counts
  • ๐Ÿ”— URI generated early via URIGenerated
  • โšก Optional early-encode mode
  • ๐Ÿท๏ธ Configurable priority class
  • ๐Ÿ›‘ Cancel in-progress inserts

๐Ÿ”„ Update Checker

Stay up to date automatically

  • ๐Ÿ”” Background check for new jSite versions
  • ๐Ÿ“ฆ Fetches version info from a USK key
  • ๐Ÿ”• Non-blocking โ€” won't interrupt your work
  • ๐Ÿ• Polls every 15 minutes

๐ŸŒ Internationalisation

Use jSite in your own language

  • ๐Ÿ‡ฌ๐Ÿ‡ง English
  • ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch
  • ๐Ÿ‡ซ๐Ÿ‡ท Franรงais
  • ๐Ÿ‡ฎ๐Ÿ‡น Italiano
  • ๐Ÿ‡ช๐Ÿ‡ธ Espaรฑol
  • ๐Ÿ‡ต๐Ÿ‡ฑ Polski
  • ๐Ÿ‡ซ๐Ÿ‡ฎ Suomi
  • ๐Ÿ‡ท๐Ÿ‡บ ะ ัƒััะบะธะน (new in 0.14)
  • ๐Ÿ‡ฏ๐Ÿ‡ต ๆ—ฅๆœฌ่ชž (new in 0.14)
  • ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด (new in 0.14)
  • ๐Ÿ‡จ๐Ÿ‡ณ ไธญๆ–‡ (new in 0.14)

โš™๏ธ Preferences

jSite works the way you want it to

  • ๐Ÿ“‚ Custom temp directory (e.g. encrypted volume)
  • ๐Ÿ’พ Config storage: home dir, JAR dir, or custom path
  • ๐Ÿ”ง Insert behaviour tuning
  • โšก Early-encode toggle
  • ๐Ÿ“Š Insert priority class selection

๐Ÿ—๏ธ Building

Requirements: Java 11+, Git

# Clone
git clone https://github.com/blubskye/jSite.git
cd jSite

# Build (downloads Gradle automatically)
./gradlew clean build fatJar

This resolves dependencies, compiles, runs tests, and produces:

build/libs/jSite-0.14-jar-with-dependencies.jar

๐Ÿš€ Running

# Double-click the JAR, or from the command line:
java -jar build/libs/jSite-0.14-jar-with-dependencies.jar

# Use a custom config file location:
java -jar jSite-0.14-jar-with-dependencies.jar --config-file=/path/to/jsite.conf

๐Ÿ’ก Make sure your Hyphanet node is running before launching jSite โ€” it connects to localhost:9481 by default.


๐Ÿงญ How to Use

1๏ธโƒฃ Node Manager

Configure the connection to your Hyphanet node. The default settings (localhost:9481) match a standard Hyphanet install. This dialog is available from the menu but jSite starts at the Project dialog.

2๏ธโƒฃ Project Dialog

Create and manage your freesites. Clicking Add Project generates a new USK keypair (requires a live node connection). Use Manage Keys to import an existing keypair or copy keys from a Web of Trust identity.

3๏ธโƒฃ Project Files

Adjust per-file settings โ€” choose the index (default) file, rename files, override MIME types, or set up redirects. Files whose content hasn't changed since the last insert are automatically inserted as cheap redirects.

4๏ธโƒฃ Project Insert

Watch the insert progress in real time. Once the node generates the final URI the Copy URI button activates. For security, avoid publishing the URI until the insert completes fully (mobile-attacker source-tracing attack).

โš™๏ธ Preferences

Set a custom temp directory (useful for encrypted volumes), choose where jSite stores its config, and tune insert behaviour.


๐Ÿ‘‘ Credits

Contributor Role
David 'Bombe' Roden Original author โ€” jSite versions 0.1โ€“0.13
Florent 'nextgens' Daignรจre Original contributor
hernic Original contributor
JlXip Original contributor
Presender Original contributor
Stefano Calabrese Original contributor
blubskye Maintainer โ€” v0.14 audit, fixes & modernisation ๐Ÿ”ง
Cynthia (Hyphanet alias) Inspired the v0.14 revival; beloved & well-known Hyphanet community member ๐Ÿ’œ
Claude (Anthropic) AI-assisted code audit, bug fixes & patches ๐Ÿค–
xAI / Grok Translation assistance (ru, jp, kr, zh) ๐ŸŒ
OpenMoji Flag icons โ€” openmoji.org (CC BY-SA 4.0) ๐ŸŽŒ

๐Ÿ“œ License

jSite is licensed under the GNU General Public License v2.0 or later.

Copyright ยฉ 2006โ€“2026 David Roden and contributors

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

See the LICENSE file for the full text.


๐Ÿ–ผ๏ธ Third-Party Assets

Flag icons for Japanese, Korean, Russian, and Chinese are sourced from OpenMoji and are licensed under CC BY-SA 4.0. See NOTICE for details.


Built for the free and uncensorable web ๐Ÿ•Š๏ธ

Hyphanet โ€ข Source โ€ข Original Project

โญ Star this repo if jSite helped you publish on Hyphanet~ โญ

About

Modernized and Updated jSite

Resources

License

GPL-2.0, GPL-2.0 licenses found

Licenses found

GPL-2.0
LICENSE
GPL-2.0
COPYING

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Java 100.0%