support show proxy config of frpc 0.53

This commit is contained in:
2023-12-27 10:58:45 +08:00
parent a37952a292
commit 91c15936ee
4 changed files with 158 additions and 90 deletions

View File

@@ -217,12 +217,11 @@ section.client-info .text-row .text-col {
}
.proxy-popup .extra-param-tab-item .layui-form-item .layui-input-inline:nth-child(1) {
width: 150px;
width: 200px;
}
.proxy-popup .extra-param-tab-item .layui-form-item .layui-input-inline:nth-child(3) {
flex: 1;
margin-right: 0;
}
#searchForm input {

View File

@@ -1,11 +1,119 @@
var loadProxyInfo = (function ($) {
var i18n = {}, currentProxyType, currentTitle;
//param names in Basic tab
var basicParamNamesIgnore = ['toml'];
var basicParamNames = ['name', 'type', 'localIP', 'localPort', 'customDomains', 'subdomain', 'remotePort', 'useEncryption', 'useCompression'];
var basicParamNamesMap = {
useEncryption: 'transport.useEncryption',
useCompression: 'transport.useCompression'
var basicParams = [
{
name: 'name',
defaultValue: '-'
}, {
name: 'type',
defaultValue: '-'
}, {
name: 'localIP',
defaultValue: '-'
}, {
name: 'localPort',
defaultValue: '-'
}, {
name: 'customDomains',
defaultValue: '-'
}, {
name: 'subdomain',
defaultValue: '-'
}, {
name: 'remotePort',
defaultValue: '-'
}, {
name: 'transport.useEncryption',
defaultValue: 'true',
}, {
name: 'transport.useCompression',
defaultValue: 'true',
}
];
/**
* a.b.c = 1
* a.b.d = [2,3]
* to
* {a: {
* b: {
* c: 1
* d: "[2,3]"
* }
* }
* }
*
* @param obj json object
* @param names all names split from name string like 'a.b.c'
* @param value default value
*/
function expandJSON(obj, names, value) {
var currentIndex = this.index || 0;
var childrenIndex = (currentIndex + 1) > names.length ? null : (currentIndex + 1);
var currentName = names[currentIndex], currentValue = {};
var childrenName = childrenIndex == null ? null : names[childrenIndex];
if (obj.hasOwnProperty(currentName)) {
currentValue = obj[currentName];
} else {
obj[currentName] = currentValue;
}
if (childrenName !== null) {
this.index = childrenIndex;
expandJSON(currentValue, names, value);
} else {
if (value != null) {
if (Array.isArray(value)) {
obj[currentName] = JSON.stringify(value);
} else {
obj[currentName] = value;
}
}
this.index = 0;
}
}
/**
* {a: {
* b: {
* c: 1
* d: [2,3]
* }
* }
* }
* to
* {
* 'a.b.c': 1,
* 'a.b.d': '[2,3]'
* }
*
* @param obj json object
* @returns {*} flatted json key array
*/
function flatJSON(obj) {
var flat = function (obj, prentKey, flattedJSON) {
flattedJSON = flattedJSON || {};
prentKey = prentKey || '';
if (prentKey !== '')
prentKey = prentKey + '.';
for (var key in obj) {
var value = obj[key];
if (typeof value === 'object' && Object.prototype.toString.call(value) === '[object Object]') {
flat(value, prentKey + key, flattedJSON);
} else {
if (prentKey === 'plugin.ClientPluginOptions.')
prentKey = 'plugin.';
if (Array.isArray(value)) {
flattedJSON[prentKey + key] = JSON.stringify(value);
} else {
flattedJSON[prentKey + key] = value;
}
}
}
return flattedJSON;
}
return flat(obj);
}
/**
@@ -44,17 +152,25 @@ var loadProxyInfo = (function ($) {
* @param data {[Map<string,string>]} proxy data
*/
function renderProxyListTable(data) {
var proxies = [];
data.forEach(function (temp) {
temp.name = temp.name || '-';
temp.localIP = temp.localIP || '-';
temp.localPort = temp.localPort || '-';
temp.transport = temp.transport || {};
temp.transport.useEncryption = temp.transport.useEncryption || false;
temp.transport.useCompression = temp.transport.useCompression || false;
if (currentProxyType === 'http' || currentProxyType === 'https') {
temp.customDomains = temp.customDomains || '-';
temp.subdomain = temp.subdomain || '-';
var proxy = temp.ProxyConfigurer;
basicParams.forEach(function (basicParam) {
var name = basicParam.name;
var defaultValue = basicParam.defaultValue;
var value = null;
try {
value = eval('proxy.' + name);
if (value == null) {
value = defaultValue;
}
} catch (e) {
value = defaultValue;
}
eval('proxy.' + name + ' = value');
});
proxies.push(proxy);
});
var $section = $('#content > section');
@@ -95,7 +211,7 @@ var loadProxyInfo = (function ($) {
},
toolbar: '#proxyListToolbarTemplate',
defaultToolbar: false,
data: data,
data: proxies,
initSort: {
field: 'name',
type: 'asc'
@@ -163,38 +279,31 @@ var loadProxyInfo = (function ($) {
if (data != null) {
var tempData = $.extend(true, {}, data);
basicParamNamesIgnore.forEach(function (basicName) {
if (basicParamNamesMap.hasOwnProperty(basicName)) {
try {
eval('delete tempData.' + basicParamNamesMap[basicName])
} catch (e) {
}
} else if (data.hasOwnProperty(basicName)) {
delete tempData[basicName];
basicParams.forEach(function (basicName) {
var name = basicName.name;
if (name.indexOf('.') !== -1) {
var names = name.split('.');
expandJSON(tempData, names, 0, basicName.defaultValue);
expandJSON(basicData, names, 0, null);
}
eval('basicData.' + name + ' = ' + 'tempData.' + name);
eval('delete tempData.' + name)
});
basicParamNames.forEach(function (basicName) {
if (basicParamNamesMap.hasOwnProperty(basicName)) {
try {
basicData[basicName] = eval('tempData.' + basicParamNamesMap[basicName]);
eval('delete tempData.' + basicParamNamesMap[basicName])
} catch (e) {
basicData[basicName] = true;
}
} else if (data.hasOwnProperty(basicName)) {
basicData[basicName] = tempData[basicName];
delete tempData[basicName];
}
});
var flatted = flatJSON(tempData);
for (var key in tempData) {
for (var key in flatted) {
var value = flatted[key];
if (value == null || value === '')
continue;
extraData.push({
name: key,
value: tempData[key]
value: value
});
}
}
var html = document.getElementById('addProxyTemplate').innerHTML;
var content = layui.laytpl(html).render({
type: currentProxyType,
@@ -204,7 +313,7 @@ var loadProxyInfo = (function ($) {
type: 1,
title: false,
skin: 'proxy-popup',
area: ['450px', '400px'],
area: ['550px', '400px'],
content: content,
btn: [i18n['Confirm'], i18n['Cancel']],
btn1: function (index) {
@@ -216,7 +325,6 @@ var loadProxyInfo = (function ($) {
var value = $(this).find('input').last().val();
formData[name] = value;
});
addOrUpdate(formData, index, update);
}
},
@@ -227,7 +335,7 @@ var loadProxyInfo = (function ($) {
//get and set old name for update form
var oldNameKey = layero.find('#oldName').attr('name');
basicData[oldNameKey] = basicData.name;
layui.form.val('addProxyForm', basicData);
layui.form.val('addProxyForm', flatJSON(basicData));
proxyPopupSuccess();
}
});
@@ -237,7 +345,7 @@ var loadProxyInfo = (function ($) {
layui.form.render(null, 'addProxyForm');
layui.form.on('input-affix(addition)', function (obj) {
var $paramValue = $(obj.elem);
var $paramName = $paramValue.closest('.layui-form-item').find('input');
var $paramName = $paramValue.closest('.layui-form-item').find('input[type=text]');
var name = $paramName.first().val();
var value = $paramValue.val();
var html = document.getElementById('extraParamAddedTemplate').innerHTML;

View File

@@ -206,7 +206,8 @@
<div class="layui-form-item">
<label class="layui-form-label">${ .UseEncryption }</label>
<div class="layui-input-block">
<input type="checkbox" name="useEncryption" value="true" title="${ .true }">
<input type="checkbox" name="transport.useEncryption" value="true"
title="${ .true }">
</div>
</div>
</div>
@@ -214,7 +215,8 @@
<div class="layui-form-item">
<label class="layui-form-label">${ .UseCompression }</label>
<div class="layui-input-block">
<input type="checkbox" name="useCompression" value="true" title="${ .true }">
<input type="checkbox" name="transport.useCompression" value="true"
title="${ .true }">
</div>
</div>
</div>

View File

@@ -5,7 +5,6 @@ import (
"fmt"
"github.com/fatedier/frp/pkg/config"
v1 "github.com/fatedier/frp/pkg/config/v1"
"github.com/pelletier/go-toml/v2"
"github.com/vaughan0/go-ini"
"io"
"log"
@@ -155,51 +154,11 @@ func (c *HandleController) parseConfigure(content, proxyType string) (interface{
}
allProxies := clientConfig.Proxies
var filterProxies = make([]MyProxy, 0)
var filterProxies = make([]v1.TypedProxyConfig, 0)
for i := range allProxies {
if equalIgnoreCase(allProxies[i].Type, proxyType) {
baseConfig := allProxies[i].GetBaseConfig()
marshal, _ := toml.Marshal(allProxies[i].ProxyConfigurer)
proxy := MyProxy{
string(marshal),
baseConfig,
}
filterProxies = append(filterProxies, proxy)
filterProxies = append(filterProxies, allProxies[i])
}
}
var ss = `
Name = 'ssh_random'
Type = 'tcp'
LocalIP = '192.168.31.100'
LocalPort = 22
RemotePort = 0
[Transport]
UseEncryption = false
UseCompression = false
BandwidthLimitMode = ''
ProxyProtocolVersion = ''
[Transport.BandwidthLimit]
[LoadBalancer]
Group = ''
GroupKey = ''
[HealthCheck]
Type = ''
TimeoutSeconds = 0
MaxFailed = 0
IntervalSeconds = 0
Path = ''
[Plugin]
Type = ''
`
v := v1.ProxyType("tcp")
r := v1.NewProxyConfigurerByType(v)
toml.Unmarshal([]byte(ss), r)
return filterProxies, nil
}