mirror of
https://github.com/yhl452493373/frps-panel.git
synced 2026-04-04 06:16:59 +08:00
preliminary write tokens to config with toml
This commit is contained in:
@@ -277,13 +277,14 @@ var loadUserList = (function ($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bind event of layui.form
|
* bind event of {{@link layui.form}}
|
||||||
*/
|
*/
|
||||||
function bindFormEvent() {
|
function bindFormEvent() {
|
||||||
layui.table.on('edit(tokenTable)', function (obj) {
|
layui.table.on('edit(tokenTable)', function (obj) {
|
||||||
var field = obj.field;
|
var field = obj.field;
|
||||||
var value = obj.value;
|
var value = obj.value;
|
||||||
var oldValue = obj.oldValue;
|
var oldValue = obj.oldValue;
|
||||||
|
|
||||||
var before = $.extend(true, {}, obj.data);
|
var before = $.extend(true, {}, obj.data);
|
||||||
var after = $.extend(true, {}, obj.data);
|
var after = $.extend(true, {}, obj.data);
|
||||||
var verifyMsg = false;
|
var verifyMsg = false;
|
||||||
@@ -344,24 +345,34 @@ var loadUserList = (function ($) {
|
|||||||
after.subdomains = value;
|
after.subdomains = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
before.ports = before.ports.split(',')
|
||||||
|
before.domains = before.domains.split(',')
|
||||||
|
before.subdomains = before.subdomains.split(',')
|
||||||
|
|
||||||
|
after.ports = after.ports.split(',')
|
||||||
|
after.domains = after.domains.split(',')
|
||||||
|
after.subdomains = after.subdomains.split(',')
|
||||||
|
|
||||||
update(before, after);
|
update(before, after);
|
||||||
});
|
});
|
||||||
|
|
||||||
layui.table.on('toolbar(tokenTable)', function (obj) {
|
layui.table.on('toolbar(tokenTable)', function (obj) {
|
||||||
var id = obj.config.id;
|
var id = obj.config.id;
|
||||||
var checkStatus = layui.table.checkStatus(id);
|
var checkStatus = layui.table.checkStatus(id);
|
||||||
|
|
||||||
|
var data = checkStatus.data;
|
||||||
switch (obj.event) {
|
switch (obj.event) {
|
||||||
case 'add':
|
case 'add':
|
||||||
addPopup();
|
addPopup();
|
||||||
break
|
break
|
||||||
case 'remove':
|
case 'remove':
|
||||||
batchRemovePopup(checkStatus.data);
|
batchRemovePopup(data);
|
||||||
break
|
break
|
||||||
case 'disable':
|
case 'disable':
|
||||||
batchDisablePopup(checkStatus.data);
|
batchDisablePopup(data);
|
||||||
break
|
break
|
||||||
case 'enable':
|
case 'enable':
|
||||||
batchEnablePopup(checkStatus.data);
|
batchEnablePopup(data);
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -406,7 +417,11 @@ var loadUserList = (function ($) {
|
|||||||
btn: [i18n['Confirm'], i18n['Cancel']],
|
btn: [i18n['Confirm'], i18n['Cancel']],
|
||||||
btn1: function (index) {
|
btn1: function (index) {
|
||||||
if (layui.form.validate('#addUserForm')) {
|
if (layui.form.validate('#addUserForm')) {
|
||||||
add(layui.form.val('addUserForm'), index);
|
var formData = layui.form.val('addUserForm');
|
||||||
|
formData.ports = formData.ports.split(',')
|
||||||
|
formData.domains = formData.domains.split(',')
|
||||||
|
formData.subdomains = formData.subdomains.split(',')
|
||||||
|
add(formData, index);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
btn2: function (index) {
|
btn2: function (index) {
|
||||||
@@ -417,14 +432,11 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* add user action
|
* add user action
|
||||||
* @param data {{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}} user data
|
* @param data {{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}} user data
|
||||||
* @param index popup index
|
* @param index popup index
|
||||||
*/
|
*/
|
||||||
function add(data, index) {
|
function add(data, index) {
|
||||||
var loading = layui.layer.load();
|
var loading = layui.layer.load();
|
||||||
data.ports = data.ports.split(',')
|
|
||||||
data.domains = data.domains.split(',')
|
|
||||||
data.subdomains = data.subdomains.split(',')
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/add',
|
url: '/add',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
@@ -449,8 +461,8 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* update user action
|
* update user action
|
||||||
* @param before {{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}} data before update
|
* @param before {{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}} data before update
|
||||||
* @param after {{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}} data after update
|
* @param after {{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}} data after update
|
||||||
*/
|
*/
|
||||||
function update(before, after) {
|
function update(before, after) {
|
||||||
var loading = layui.layer.load();
|
var loading = layui.layer.load();
|
||||||
@@ -477,7 +489,7 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* batch remove user popup
|
* batch remove user popup
|
||||||
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}]} user data list
|
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}]} user data list
|
||||||
*/
|
*/
|
||||||
function batchRemovePopup(data) {
|
function batchRemovePopup(data) {
|
||||||
if (data.length === 0) {
|
if (data.length === 0) {
|
||||||
@@ -494,7 +506,7 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* batch disable user popup
|
* batch disable user popup
|
||||||
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}]} user data list
|
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}]} user data list
|
||||||
*/
|
*/
|
||||||
function batchDisablePopup(data) {
|
function batchDisablePopup(data) {
|
||||||
if (data.length === 0) {
|
if (data.length === 0) {
|
||||||
@@ -511,7 +523,7 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* batch enable user popup
|
* batch enable user popup
|
||||||
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}]} user data list
|
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}]} user data list
|
||||||
*/
|
*/
|
||||||
function batchEnablePopup(data) {
|
function batchEnablePopup(data) {
|
||||||
if (data.length === 0) {
|
if (data.length === 0) {
|
||||||
@@ -528,7 +540,7 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* remove one user popup
|
* remove one user popup
|
||||||
* @param data {{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}} user data
|
* @param data {{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}} user data
|
||||||
*/
|
*/
|
||||||
function removePopup(data) {
|
function removePopup(data) {
|
||||||
layui.layer.confirm(i18n['ConfirmRemoveUser'], {
|
layui.layer.confirm(i18n['ConfirmRemoveUser'], {
|
||||||
@@ -541,7 +553,7 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* disable one user popup
|
* disable one user popup
|
||||||
* @param data {{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}} user data
|
* @param data {{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}} user data
|
||||||
*/
|
*/
|
||||||
function disablePopup(data) {
|
function disablePopup(data) {
|
||||||
layui.layer.confirm(i18n['ConfirmDisableUser'], {
|
layui.layer.confirm(i18n['ConfirmDisableUser'], {
|
||||||
@@ -554,7 +566,7 @@ var loadUserList = (function ($) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* enable one user popup
|
* enable one user popup
|
||||||
* @param data {{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}} user data
|
* @param data {{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}} user data
|
||||||
*/
|
*/
|
||||||
function enablePopup(data) {
|
function enablePopup(data) {
|
||||||
layui.layer.confirm(i18n['ConfirmEnableUser'], {
|
layui.layer.confirm(i18n['ConfirmEnableUser'], {
|
||||||
@@ -568,7 +580,7 @@ var loadUserList = (function ($) {
|
|||||||
/**
|
/**
|
||||||
* operate actions
|
* operate actions
|
||||||
* @param type {apiType} action type
|
* @param type {apiType} action type
|
||||||
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:string, domains:string, subdomains:string}]} user data list
|
* @param data {[{user:string, token:string, comment:string, status:boolean, ports:[string], domains:[string], subdomains:[string]}]} user data list
|
||||||
* @param index popup index
|
* @param index popup index
|
||||||
*/
|
*/
|
||||||
function operate(type, data, index) {
|
function operate(type, data, index) {
|
||||||
|
|||||||
@@ -311,6 +311,28 @@ func filter(main TokenInfo, sub TokenInfo) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TokensList(tokens map[string]TokenInfo) Tokens {
|
||||||
|
return Tokens{
|
||||||
|
tokens,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *HandleController) SaveToken() error {
|
||||||
|
tokenFile, err := os.Create(c.TokensFile)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("error to crate file %v: %v", c.TokensFile, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = toml.NewEncoder(tokenFile).Encode(TokensList(c.Tokens)); err != nil {
|
||||||
|
log.Printf("error to encode tokens: %v", err)
|
||||||
|
}
|
||||||
|
if err = tokenFile.Close(); err != nil {
|
||||||
|
log.Printf("error to close file %v: %v", c.TokensFile, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *HandleController) MakeAddTokenFunc() func(context *gin.Context) {
|
func (c *HandleController) MakeAddTokenFunc() func(context *gin.Context) {
|
||||||
return func(context *gin.Context) {
|
return func(context *gin.Context) {
|
||||||
info := TokenInfo{
|
info := TokenInfo{
|
||||||
@@ -357,18 +379,7 @@ func (c *HandleController) MakeAddTokenFunc() func(context *gin.Context) {
|
|||||||
|
|
||||||
c.Tokens[info.User] = info
|
c.Tokens[info.User] = info
|
||||||
|
|
||||||
tokenFile, err := os.Create(c.TokensFile)
|
err = c.SaveToken()
|
||||||
if err != nil {
|
|
||||||
log.Printf("error to crate file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = toml.NewEncoder(tokenFile).Encode(c.TokensList()); err != nil {
|
|
||||||
log.Printf("error to encode tokens: %v", err)
|
|
||||||
}
|
|
||||||
if err = tokenFile.Close(); err != nil {
|
|
||||||
log.Printf("error to close file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("add failed, error : %v", err)
|
log.Printf("add failed, error : %v", err)
|
||||||
response.Success = false
|
response.Success = false
|
||||||
@@ -400,8 +411,17 @@ func (c *HandleController) MakeUpdateTokensFunc() func(context *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
before := update.Before
|
||||||
after := update.After
|
after := update.After
|
||||||
_ = update.Before
|
|
||||||
|
if after.User != before.User {
|
||||||
|
log.Printf("update failed, user not match")
|
||||||
|
response.Success = false
|
||||||
|
response.Code = ParamError
|
||||||
|
response.Message = "update failed, user not match"
|
||||||
|
context.JSON(http.StatusOK, &response)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if !TokenFormatReg.MatchString(after.Token) {
|
if !TokenFormatReg.MatchString(after.Token) {
|
||||||
log.Printf("update failed, token format error")
|
log.Printf("update failed, token format error")
|
||||||
@@ -414,17 +434,7 @@ func (c *HandleController) MakeUpdateTokensFunc() func(context *gin.Context) {
|
|||||||
|
|
||||||
c.Tokens[after.User] = after
|
c.Tokens[after.User] = after
|
||||||
|
|
||||||
tokenFile, err := os.Create(c.TokensFile)
|
err = c.SaveToken()
|
||||||
if err != nil {
|
|
||||||
log.Printf("error to crate file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
if err = toml.NewEncoder(tokenFile).Encode(c.Tokens); err != nil {
|
|
||||||
log.Printf("error to encode tokens: %v", err)
|
|
||||||
}
|
|
||||||
if err = tokenFile.Close(); err != nil {
|
|
||||||
log.Printf("error to close file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("user update failed, error : %v", err)
|
log.Printf("user update failed, error : %v", err)
|
||||||
response.Success = false
|
response.Success = false
|
||||||
@@ -460,17 +470,7 @@ func (c *HandleController) MakeRemoveTokensFunc() func(context *gin.Context) {
|
|||||||
delete(c.Tokens, user.User)
|
delete(c.Tokens, user.User)
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenFile, err := os.Create(c.TokensFile)
|
err = c.SaveToken()
|
||||||
if err != nil {
|
|
||||||
log.Printf("error to crate file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
if err = toml.NewEncoder(tokenFile).Encode(c.Tokens); err != nil {
|
|
||||||
log.Printf("error to encode tokens: %v", err)
|
|
||||||
}
|
|
||||||
if err = tokenFile.Close(); err != nil {
|
|
||||||
log.Printf("error to close file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("user update failed, error : %v", err)
|
log.Printf("user update failed, error : %v", err)
|
||||||
response.Success = false
|
response.Success = false
|
||||||
@@ -505,18 +505,10 @@ func (c *HandleController) MakeDisableTokensFunc() func(context *gin.Context) {
|
|||||||
for _, user := range disable.Users {
|
for _, user := range disable.Users {
|
||||||
token := c.Tokens[user.User]
|
token := c.Tokens[user.User]
|
||||||
token.Status = false
|
token.Status = false
|
||||||
|
c.Tokens[user.User] = token
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenFile, err := os.Create(c.TokensFile)
|
err = c.SaveToken()
|
||||||
if err != nil {
|
|
||||||
log.Printf("error to crate file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
if err = toml.NewEncoder(tokenFile).Encode(c.Tokens); err != nil {
|
|
||||||
log.Printf("error to encode tokens: %v", err)
|
|
||||||
}
|
|
||||||
if err = tokenFile.Close(); err != nil {
|
|
||||||
log.Printf("error to close file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("disable failed, error : %v", err)
|
log.Printf("disable failed, error : %v", err)
|
||||||
@@ -552,18 +544,10 @@ func (c *HandleController) MakeEnableTokensFunc() func(context *gin.Context) {
|
|||||||
for _, user := range enable.Users {
|
for _, user := range enable.Users {
|
||||||
token := c.Tokens[user.User]
|
token := c.Tokens[user.User]
|
||||||
token.Status = true
|
token.Status = true
|
||||||
|
c.Tokens[user.User] = token
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenFile, err := os.Create(c.TokensFile)
|
err = c.SaveToken()
|
||||||
if err != nil {
|
|
||||||
log.Printf("error to crate file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
if err = toml.NewEncoder(tokenFile).Encode(c.Tokens); err != nil {
|
|
||||||
log.Printf("error to encode tokens: %v", err)
|
|
||||||
}
|
|
||||||
if err = tokenFile.Close(); err != nil {
|
|
||||||
log.Printf("error to close file %v: %v", c.TokensFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("enable failed, error : %v", err)
|
log.Printf("enable failed, error : %v", err)
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ var (
|
|||||||
UserFormatReg = regexp.MustCompile("^\\w+$")
|
UserFormatReg = regexp.MustCompile("^\\w+$")
|
||||||
TokenFormatReg = regexp.MustCompile("^[\\w!@#$%^&*()]+$")
|
TokenFormatReg = regexp.MustCompile("^[\\w!@#$%^&*()]+$")
|
||||||
TrimAllSpaceReg = regexp.MustCompile("[\\n\\t\\r\\s]")
|
TrimAllSpaceReg = regexp.MustCompile("[\\n\\t\\r\\s]")
|
||||||
TrimBreakLineReg = regexp.MustCompile("[\\n\\t\\r]")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Response struct {
|
type Response struct {
|
||||||
@@ -116,9 +115,3 @@ type TokenEnable struct {
|
|||||||
func (e *HTTPError) Error() string {
|
func (e *HTTPError) Error() string {
|
||||||
return e.Err.Error()
|
return e.Err.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *HandleController) TokensList() Tokens {
|
|
||||||
return Tokens{
|
|
||||||
c.Tokens,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user