mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-06-03 06:07:20 +02:00
291 lines
12 KiB
HTML
291 lines
12 KiB
HTML
<div class="standardContainer">
|
|
<div class="ui basic segment">
|
|
<h2>Default Site</h2>
|
|
<p>Default routing options for inbound traffic (previously called Proxy Root)</p>
|
|
<div class="ui form">
|
|
<div class="grouped fields">
|
|
<label>What to show when Zoraxy is hit with an unknown Host?</label>
|
|
<div class="field">
|
|
<div class="ui radio defaultsite checkbox">
|
|
<input type="radio" name="defaultsiteOption" checked="checked" value="webserver">
|
|
<label>Internal Static Web Server<br>
|
|
<small>Check this if you prefer a more Apache / Nginx like experience</small>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="field">
|
|
<div class="ui radio defaultsite checkbox">
|
|
<input type="radio" name="defaultsiteOption" value="proxy">
|
|
<label>Reverse Proxy Target<br>
|
|
<small>Proxy the request to a target IP / domain</small>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="field">
|
|
<div class="ui radio defaultsite checkbox">
|
|
<input type="radio" name="defaultsiteOption" value="redirect">
|
|
<label>Redirect<br>
|
|
<small>Redirect the user to a new location</small>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="field">
|
|
<div class="ui radio defaultsite checkbox">
|
|
<input type="radio" name="defaultsiteOption" value="notfound">
|
|
<label>Show 404 NOT FOUND<br>
|
|
<small>Respond to request with a 404 page</small>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="field">
|
|
<div class="ui radio defaultsite checkbox">
|
|
<input type="radio" name="defaultsiteOption" value="closeresp">
|
|
<label>Close Connection<br>
|
|
<small>Close the connection without any response or in TLS mode, send an empty response</small>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Reverse Proxy as Default Site Options -->
|
|
<div id="defaultSiteProxyOptions" class="ui basic segment advanceoptions defaultSiteOptionDetails" style="display:none; ">
|
|
<div class="ui form">
|
|
<div class="field">
|
|
<label>Reverse Proxy Target</label>
|
|
<input type="text" id="proxyRoot" onchange="checkRootRequireTLS(this.value);">
|
|
<small>e.g. localhost:8080 / 192.168.0.100:80 / example.com</small>
|
|
</div>
|
|
<div class="field">
|
|
<div class="ui checkbox">
|
|
<input type="checkbox" id="rootReqTLS">
|
|
<label>Reverse proxy target require TLS connection <br><small>Check this if your proxy target URL require connection with https://</small></label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Redirect as default site Options-->
|
|
<div id="defaultSiteRedirectOptions" class="ui basic segment advanceoptions defaultSiteOptionDetails" style="display:none;"">
|
|
<div class="ui form">
|
|
<div class="field">
|
|
<label>Redirect target domain</label>
|
|
<div class="ui input">
|
|
<input id="redirectDomain" type="text" placeholder="http://example.com">
|
|
</div>
|
|
<small>Unset subdomain will be redirected to the link above. Remember to include the protocol (e.g. http:// or https://)</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<button class="ui basic button" onclick="setProxyRoot(this)"><i class="green checkmark icon" ></i> Apply Changes</button>
|
|
<button class="ui basic button" onclick="initRootInfo()"><i class="refresh icon" ></i> Reset</button>
|
|
<br>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
var currentDefaultSiteOption = 0; //For enum see typedef.go
|
|
$("#advanceRootSettings").accordion();
|
|
|
|
//Handle toggle events of option radio boxes
|
|
function updateAvaibleDefaultSiteOptions(){
|
|
let selectedDefaultSite = $('input[name="defaultsiteOption"]:checked').val();
|
|
|
|
$(".defaultSiteOptionDetails").hide();
|
|
$("#useRootProxyRouterForVdir").parent().addClass("disabled");
|
|
if (selectedDefaultSite == "webserver"){
|
|
//Use build in web server as target
|
|
let staticWebServerURL = "127.0.0.1:" + $("#webserv_listenPort").val();
|
|
$("#proxyRoot").val(staticWebServerURL);
|
|
$("#proxyRoot").parent().addClass("disabled");
|
|
$("#rootReqTLS").parent().checkbox("set unchecked");
|
|
$("#rootReqTLS").parent().addClass("disabled");
|
|
$("#useRootProxyRouterForVdir").parent().removeClass("disabled");
|
|
currentDefaultSiteOption = 0;
|
|
}else if (selectedDefaultSite == "proxy"){
|
|
$("#defaultSiteProxyOptions").show();
|
|
$("#rootReqTLS").parent().removeClass("disabled");
|
|
$("#proxyRoot").parent().removeClass("disabled");
|
|
$("#useRootProxyRouterForVdir").parent().removeClass("disabled");
|
|
currentDefaultSiteOption = 1;
|
|
}else if (selectedDefaultSite == "redirect"){
|
|
$("#defaultSiteRedirectOptions").show();
|
|
currentDefaultSiteOption = 2;
|
|
}else if (selectedDefaultSite == "notfound"){
|
|
currentDefaultSiteOption = 3;
|
|
}else if (selectedDefaultSite == "closeresp"){
|
|
currentDefaultSiteOption = 4;
|
|
}else{
|
|
//Unknown option
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
//Bind events to the radio boxes
|
|
function bindDefaultSiteRadioCheckboxEvents(){
|
|
$('input[type=radio][name=defaultsiteOption]').off("change").on("change", function() {
|
|
updateAvaibleDefaultSiteOptions();
|
|
});
|
|
}
|
|
|
|
function initRootInfo(callback=undefined){
|
|
$.get("/api/proxy/list?type=root", function(data){
|
|
if (data == null){
|
|
msgbox("Default site load failed", false);
|
|
}else{
|
|
var $radios = $('input:radio[name=defaultsiteOption]');
|
|
let proxyType = data.DefaultSiteOption;
|
|
//See typedef.go for enum conversion
|
|
if (proxyType == 0){
|
|
$radios.filter('[value=webserver]').prop('checked', true);
|
|
}else if (proxyType == 1){
|
|
$radios.filter('[value=proxy]').prop('checked', true);
|
|
$("#proxyRoot").val(data.DefaultSiteValue);
|
|
}else if (proxyType == 2){
|
|
$radios.filter('[value=redirect]').prop('checked', true);
|
|
$("#redirectDomain").val(data.DefaultSiteValue);
|
|
}else if (proxyType == 3){
|
|
$radios.filter('[value=notfound]').prop('checked', true);
|
|
}else if (proxyType == 4){
|
|
$radios.filter('[value=closeresp]').prop('checked', true);
|
|
}
|
|
updateAvaibleDefaultSiteOptions();
|
|
|
|
$("#proxyRoot").val(data.ActiveOrigins[0].OriginIpOrDomain);
|
|
checkRootRequireTLS(data.ActiveOrigins[0].OriginIpOrDomain);
|
|
}
|
|
|
|
if (callback != undefined){
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
initRootInfo(function(){
|
|
bindDefaultSiteRadioCheckboxEvents();
|
|
});
|
|
|
|
|
|
function isUsingStaticWebServerAsRoot(callback){
|
|
let currentProxyRoot = $("#proxyRoot").val().trim();
|
|
$.get("/api/webserv/status", function(webservStatus){
|
|
if (currentProxyRoot == "127.0.0.1:" + webservStatus.ListeningPort || currentProxyRoot == "localhost:" + webservStatus.ListeningPort){
|
|
return callback(true);
|
|
}
|
|
return callback(false);
|
|
});
|
|
|
|
}
|
|
|
|
|
|
//Bind event to tab switch
|
|
tabSwitchEventBind["setroot"] = function(){
|
|
|
|
}
|
|
|
|
//Check if the given domain will redirect to https
|
|
function checkRootRequireTLS(targetDomain){
|
|
//Trim off the http or https from the origin
|
|
if (targetDomain.startsWith("http://")){
|
|
targetDomain = targetDomain.substring(7);
|
|
$("#proxyRoot").val(targetDomain);
|
|
}else if (targetDomain.startsWith("https://")){
|
|
targetDomain = targetDomain.substring(8);
|
|
$("#proxyRoot").val(targetDomain);
|
|
}
|
|
$.cjax({
|
|
url: "/api/proxy/tlscheck",
|
|
method: "POST",
|
|
data: {url: targetDomain},
|
|
success: function(data){
|
|
if (data.error != undefined){
|
|
|
|
}else if (data == "https"){
|
|
$("#rootReqTLS").parent().checkbox("set checked");
|
|
}else if (data == "http"){
|
|
$("#rootReqTLS").parent().checkbox("set unchecked");
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
//Set the new proxy root option
|
|
function setProxyRoot(btn=undefined){
|
|
var newpr = $("#proxyRoot").val();
|
|
if (newpr.trim() == "" && currentDefaultSiteOption == 0){
|
|
//Fill in the web server info
|
|
newpr = "127.0.0.1:" + $("#webserv_listenPort").val();
|
|
$("#proxyRoot").val(newpr);
|
|
|
|
}
|
|
|
|
var rootReqTls = $("#rootReqTLS")[0].checked;
|
|
|
|
if (btn != undefined){
|
|
$(btn).addClass("disabled");
|
|
}
|
|
|
|
//proxy mode or redirect mode, check for input values
|
|
var defaultSiteValue = "";
|
|
if (currentDefaultSiteOption == 1){
|
|
if ($("#proxyRoot").val().trim() == ""){
|
|
$("#proxyRoot").parent().addClass("error");
|
|
return;
|
|
}
|
|
defaultSiteValue = $("#proxyRoot").val().trim();
|
|
$("#proxyRoot").parent().removeClass("error");
|
|
|
|
}else if (currentDefaultSiteOption == 2){
|
|
if ($("#redirectDomain").val().trim() == ""){
|
|
$("#redirectDomain").parent().addClass("error");
|
|
return;
|
|
}
|
|
defaultSiteValue = $("#redirectDomain").val().trim();
|
|
$("#redirectDomain").parent().removeClass("error");
|
|
}
|
|
|
|
//Create the endpoint by calling add
|
|
$.cjax({
|
|
url: "/api/proxy/add",
|
|
data: {
|
|
"type": "root",
|
|
"tls": rootReqTls,
|
|
"ep": newpr,
|
|
"defaultSiteOpt": currentDefaultSiteOption,
|
|
"defaultSiteVal":defaultSiteValue,
|
|
},
|
|
method: "POST",
|
|
success: function(data){
|
|
if (data.error != undefined){
|
|
msgbox(data.error, false, 5000);
|
|
}else{
|
|
//OK
|
|
|
|
initRootInfo(function(){
|
|
|
|
//Check if WebServ is enabled
|
|
isUsingStaticWebServerAsRoot(function(isUsingWebServ){
|
|
if (isUsingWebServ){
|
|
//Force enable static web server
|
|
//See webserv.html for details
|
|
setWebServerRunningState(true);
|
|
}
|
|
|
|
msgbox("Default Site Updated");
|
|
})
|
|
});
|
|
|
|
}
|
|
|
|
if (btn != undefined){
|
|
$(btn).removeClass("disabled");
|
|
}
|
|
},
|
|
error: function(){
|
|
msgbox("Unknown error occured", false);
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
</script> |