Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .bundle/config
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
---
BUNDLE_WITHOUT: "test:development"
BUNDLE_PATH: vendor/
BUNDLE_PATH: "vendor/"
BUNDLE_WITHOUT: "development"
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ gem 'thor'
gem 'readline'
gem 'readline-ext'
gem "rack-reverse-proxy", require: "rack/reverse_proxy"
group :development, :test do
group :development do
gem "rerun"
end
6 changes: 6 additions & 0 deletions main.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,12 @@
set :dynamicPath, File.join(settings.root, 'node_modules', '@nebula-services', 'dynamic', 'dist')
dynamicPath()

set :epoxyPath, File.join(settings.root, 'node_modules', '@mercuryworkshop', 'epoxy-transport', 'dist')
epoxyPath()

set :baremuxPath, File.join(settings.root, 'node_modules', '@mercuryworkshop', 'bare-mux', 'dist')
baremuxPath()

# Other routes
get '/rubyHealth/?' do
return "OK"
Expand Down
4 changes: 4 additions & 0 deletions node-server/server-dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const __dirname = path.resolve();
const settings = YAML.parse(fs.readFileSync(path.join(__dirname, '/config/settings.yml'), 'utf8'));
import chalk from 'chalk';
import compile from './compile.js';
import wisp from 'wisp-server-node';
//import getLatestRelease from './version.js';
let rubyPort = process.argv.find((arg) => arg.startsWith('--ruby-port')).split('=')[1] || 9292;
let nodePort = process.argv.find((arg) => arg.startsWith('--node-port')).split('=')[1] || 9293;
Expand Down Expand Up @@ -49,6 +50,9 @@ const proxyHandler = (handler, opts) => {
else if (shouldRouteRh(req)) {
routeRhUpgrade(req, socket, head);
}
else if (req.url.endsWith('/wisp/')) {
wisp.routeRequest(req, socket, head);
}
});
};

Expand Down
4 changes: 4 additions & 0 deletions node-server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const settings = YAML.parse(fs.readFileSync(path.join(__dirname, '/config/settin
import chalk from 'chalk';
import compile from './compile.js';
import getLatestRelease from './version.js';
import wisp from 'wisp-server-node';
let rubyPort = process.argv.find((arg) => arg.startsWith('--ruby-port')).split('=')[1] || 9292;
let nodePort = process.argv.find((arg) => arg.startsWith('--node-port')).split('=')[1] || 9293;

Expand Down Expand Up @@ -49,6 +50,9 @@ const proxyHandler = (handler, opts) => {
else if (shouldRouteRh(req)) {
routeRhUpgrade(req, socket, head);
}
else if (req.url.endsWith('/wisp/')) {
wisp.routeRequest(req, socket, head);
}
});
};

Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,18 @@
"dependencies": {
"@fastify/http-proxy": "^9.2.1",
"@fastify/middie": "^8.3.0",
"@mercuryworkshop/bare-mux": "^1.0.4",
"@mercuryworkshop/epoxy-transport": "^1.0.2",
"@nebula-services/dynamic": "^0.7.2-patch.2",
"@titaniumnetwork-dev/ultraviolet": "^2.0.0",
"@titaniumnetwork-dev/ultraviolet": "^3.0.0",
"@tomphttp/bare-server-node": "^2.0.0",
"chalk": "^5.2.0",
"fastify": "^4.21.0",
"progress-estimator": "^0.3.1",
"rammerhead": "https://github.com/Ruby-Network/rammerhead/releases/download/v1/rammerhead-2.tgz",
"sass": "^1.62.1",
"typescript": "^5.3.3",
"wisp-server-node": "^1.0.1",
"yaml": "^2.3.1"
}
}
15 changes: 15 additions & 0 deletions ruby/proxyPaths.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,18 @@ def dynamicPath
end
end
end

def epoxyPath
get '/epoxy/*' do
send_file File.join(settings.epoxyPath, params[:splat][0])
end
end

def baremuxPath
get '/baremux/*' do
if params[:splat][0].end_with?('.cjs')
headers['Content-Type'] = 'application/javascript'
end
send_file File.join(settings.baremuxPath, params[:splat][0])
end
end
9 changes: 5 additions & 4 deletions src/public/js/register.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
'serviceWorker' in navigator &&
window.addEventListener('load', function () {
navigator.serviceWorker.register('/sw.js', { scope: '/' })
window.addEventListener('load', async function () {
await navigator.serviceWorker.register('/sw.js', { scope: '/' })
//uv SW
navigator.serviceWorker.register('/js/sw/uv.js', { scope: '/js/sw/service/uv/' })
navigator.serviceWorker.register('/js/sw/dynamic.js', { scope: '/js/sw/service/dynamic/' })
await navigator.serviceWorker.register('/js/sw/uv.js', { scope: '/js/sw/service/uv/' })
await navigator.serviceWorker.register('/js/sw/dynamic.js', { scope: '/js/sw/service/dynamic/' })
setDefaultTransport();
});
function regSW() {
'serviceWorker' in navigator &&
Expand Down
42 changes: 38 additions & 4 deletions src/public/js/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,21 +103,27 @@ function setItems() {
let searchInput = document.getElementById('searchInput');
let proxySelect = document.getElementById('proxySelect');
let fullscreenSelect = document.getElementById('fullscreenSelect');
let bareInput = document.getElementById('bareInput');
let wispInput = document.getElementById('wispInput');
let transportSelect = document.getElementById('transportSelect');
//let bareInput = document.getElementById('bareInput');
let title = localStorage.getItem('title');
let favicon = localStorage.getItem('favicon');
let theme = localStorage.getItem('theme');
let search = localStorage.getItem('searchEngine');
let proxy = localStorage.getItem('proxy');
let fullscreen = localStorage.getItem('fullScreen');
let bare = localStorage.getItem('bare');
let wispUrl = localStorage.getItem('wispUrl');
let transports = localStorage.getItem('transports');
//let bare = localStorage.getItem('bare');
titleInput.value = title;
faviconInput.value = favicon;
themeSelect.value = theme;
searchInput.value = search;
proxySelect.value = proxy;
fullscreenSelect.value = fullscreen;
if (bare === window.location.origin + '/bare/') { bareInput.value = '/bare/'; } else { bareInput.value = bare; }
wispInput.value = wispUrl;
transportSelect.value = transports;
//if (bare === window.location.origin + '/bare/') { bareInput.value = '/bare/'; } else { bareInput.value = bare; }
document.documentElement.className = localStorage.getItem('theme');
document.title = title;
document.getElementById('favicon').href = favicon;
Expand All @@ -131,6 +137,7 @@ function reset() {
searchSettings('https://www.google.com/search?q=%s');
proxyChange('uv');
fullScreenChange('page');
setDefaultTransport();
setItems();
}
function exportSettings() {
Expand All @@ -142,6 +149,8 @@ function exportSettings() {
let fullscreen = localStorage.getItem('fullScreen');
let bare = localStorage.getItem('bare');
let password = localStorage.getItem('password');
let transports = localStorage.getItem('transports');
let wispUrl = localStorage.getItem('wispUrl');
let settings = {
title: title,
favicon: favicon,
Expand All @@ -151,6 +160,8 @@ function exportSettings() {
fullscreen: fullscreen,
bare: bare,
password: password,
transports: transports,
wispUrl: wispUrl
}
let a = document.createElement('a');
let file = new Blob([JSON.stringify(settings)], { type: 'text/plain' });
Expand Down Expand Up @@ -179,6 +190,8 @@ function importSettings() {
localStorage.setItem('fullScreen', settings.fullscreen);
localStorage.setItem('bare', settings.bare);
localStorage.setItem('password', settings.password);
localStorage.setItem('transports', settings.transports);
changeWisp(settings.wispUrl);
setItems();
console.log('Imported settings');
window.location.reload();
Expand Down Expand Up @@ -209,6 +222,27 @@ function passwordKeybinds() {
console.log("Password Keybind initalized");
}

function changeWisp(value) {
if (value.startsWith('http://')) {
value = value.replace('http://', 'ws://');
}
else if (value.startsWith('https://')) {
value = value.replace('https://', 'wss://');
}
localStorage.setItem('wispUrl', value);
setTransports();
}

function transportChange(value) {
if (value === 'soon') {
return;
}
else {
localStorage.setItem('transports', value);
setTransports();
}
}

function init() {
let init = localStorage.getItem('init');
if (init === null || init === undefined || init === 'false') {
Expand All @@ -220,7 +254,7 @@ function init() {
localStorage.setItem('searchEngine', 'https://www.google.com/search?q=%s');
localStorage.setItem('proxy', 'uv');
localStorage.setItem('bare', window.location.origin + '/bare/');
localStorage.setItem('fullScreen', 'page');
localStorage.setItem('fullScreen', 'page');
setItems();
}
else {
Expand Down
1 change: 1 addition & 0 deletions src/public/js/sw/uv.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//all Ultraviolet realted stuff goes here
importScripts('/epoxy/index.js');
importScripts('/uv/uv.bundle.js');
importScripts('/uv/uv.config.js');
importScripts('/js/lib/localforage.js');
Expand Down
24 changes: 24 additions & 0 deletions src/public/js/transports.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const transports = localStorage.getItem('transports');
const wispUrl = localStorage.getItem('wispUrl') || (location.protocol === "https:" ? "wss" : "ws") + "://" + location.host + "/wisp/";

function setTransports() {
switch (transports) {
case 'epoxy':
setEpoxyTransport();
break;
default:
setEpoxyTransport();
break;
}
}

function setDefaultTransport() {
if (!transports) {
localStorage.setItem('transports', 'epoxy');
setEpoxyTransport();
}
}

function setEpoxyTransport() {
BareMux.SetTransport('EpxMod.EpoxyClient', { wisp: localStorage.getItem('wispUrl') || wispUrl });
}
2 changes: 1 addition & 1 deletion src/public/js/uv/uv.config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
self.__uv$config = {
prefix: '/js/sw/service/uv/',
bare: '/bare/',
//bare: '/bare/',
encodeUrl: Ultraviolet.codec.xor.encode,
decodeUrl: Ultraviolet.codec.xor.decode,
handler: '/uv/uv.handler.js',
Expand Down
16 changes: 14 additions & 2 deletions src/views/components/settings.erb
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,15 @@
<input type="text" id="faviconInput" name="favicon" class="input" placeholder="Favicon URL" onchange="favicon(this.value)"></input>
<button id="faviconButton" class="button">Set</button>
</div>
<div id="tile">
<!-- div id="tile">
<h2> Bare Server </h2>
<input type="text" id="bareInput" name="bare" class="input" placeholder="Bare Server URL" onchange="bare(this.value)"></input>
<button id="bareButton" class="button">Set</button>
</div -->
<div id="tile">
<h2> Wisp Server </h2>
<input type="text" id="wispInput" name="wisp" class="input" placeholder="Wisp Server URL" onchange="changeWisp(this.value)"></input>
<button id="wispButton" class="button">Set</button>
</div>
<div id="tile">
<h2> Search Engine </h2>
Expand All @@ -34,10 +39,17 @@
<h2> Proxy </h2>
<select id="proxySelect" class="select" onchange="proxyChange(this.value)">
<option value="uv"> UltraViolet </option>
<option value="dynamic"> Dynamic (Beta) </option>
<!-- option value="dynamic"> Dynamic (Beta) </option -->
<option value="rammerhead"> Rammerhead </option>
</select>
</div>
<div id="tile">
<h2> Transport </h2>
<select id="transportSelect" class="select" onchange="transportChange(this.value)">
<option value="epoxy"> Epoxy </option>
<!-- option value="soon"> More Soon </option -->
</select>
</div>
<div id="tile">
<h2> Theme </h2>
<select id="themeSelect" class="select" onchange="theme(this.value)">
Expand Down
5 changes: 4 additions & 1 deletion src/views/layouts/index.erb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
<meta charset="utf-8">
<title><%= yield_content :title %></title>
<link rel="stylesheet" href="css/globals.css">
<script src="js/dynamic/dynamic.config.js" defer></script>
<script src="baremux/bare.cjs" defer></script>
<script src="epoxy/index.js" defer></script>
<!-- script src="js/dynamic/dynamic.config.js" defer></script -->
<script src="js/transports.js" defer></script>
<script src="uv/uv.bundle.js" defer></script>
<script src="uv/uv.config.js" defer></script>
<script src="js/rh/rh.js" defer></script>
Expand Down