mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 05:00:25 +08:00 
			
		
		
		
	优化代码
This commit is contained in:
		@@ -161,7 +161,7 @@ func main() {
 | 
				
			|||||||
					if progress >= 0 {
 | 
										if progress >= 0 {
 | 
				
			||||||
						if progress == 0 || progress == 1 || progress-lastProgress >= 0.1 {
 | 
											if progress == 0 || progress == 1 || progress-lastProgress >= 0.1 {
 | 
				
			||||||
							lastProgress = progress
 | 
												lastProgress = progress
 | 
				
			||||||
							log.Println(fmt.Sprintf("%.2f%%", manager.Progress()*100))
 | 
												log.Printf("%.2f%%", manager.Progress()*100)
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,6 @@ func TestAES128CFBMethod_Encrypt(t *testing.T) {
 | 
				
			|||||||
	dst = dst[:len(src)]
 | 
						dst = dst[:len(src)]
 | 
				
			||||||
	t.Log("dst:", string(dst))
 | 
						t.Log("dst:", string(dst))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	src = make([]byte, len(src))
 | 
					 | 
				
			||||||
	src, err = method.Decrypt(dst)
 | 
						src, err = method.Decrypt(dst)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
@@ -64,7 +63,6 @@ func TestAES128CFBMethod_Encrypt2(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, dst := range sources {
 | 
						for _, dst := range sources {
 | 
				
			||||||
		dst2 := append([]byte{}, dst...)
 | 
							dst2 := append([]byte{}, dst...)
 | 
				
			||||||
		src2 := make([]byte, len(dst2))
 | 
					 | 
				
			||||||
		src2, err := method.Decrypt(dst2)
 | 
							src2, err := method.Decrypt(dst2)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Fatal(err)
 | 
								t.Fatal(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,20 +5,20 @@ import "sync"
 | 
				
			|||||||
var eventsMap = map[string][]func(){} // event => []callbacks
 | 
					var eventsMap = map[string][]func(){} // event => []callbacks
 | 
				
			||||||
var locker = sync.Mutex{}
 | 
					var locker = sync.Mutex{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 增加事件回调
 | 
					// On 增加事件回调
 | 
				
			||||||
func On(event string, callback func()) {
 | 
					func On(event string, callback func()) {
 | 
				
			||||||
	locker.Lock()
 | 
						locker.Lock()
 | 
				
			||||||
	defer locker.Unlock()
 | 
						defer locker.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	callbacks, _ := eventsMap[event]
 | 
						var callbacks = eventsMap[event]
 | 
				
			||||||
	callbacks = append(callbacks, callback)
 | 
						callbacks = append(callbacks, callback)
 | 
				
			||||||
	eventsMap[event] = callbacks
 | 
						eventsMap[event] = callbacks
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 通知事件
 | 
					// Notify 通知事件
 | 
				
			||||||
func Notify(event string) {
 | 
					func Notify(event string) {
 | 
				
			||||||
	locker.Lock()
 | 
						locker.Lock()
 | 
				
			||||||
	callbacks, _ := eventsMap[event]
 | 
						var callbacks = eventsMap[event]
 | 
				
			||||||
	locker.Unlock()
 | 
						locker.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, callback := range callbacks {
 | 
						for _, callback := range callbacks {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,7 +65,7 @@ func (this *AdminNode) Run() {
 | 
				
			|||||||
	this.addPortsToFirewall()
 | 
						this.addPortsToFirewall()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 监听信号
 | 
						// 监听信号
 | 
				
			||||||
	sigQueue := make(chan os.Signal)
 | 
						var sigQueue = make(chan os.Signal, 8)
 | 
				
			||||||
	signal.Notify(sigQueue, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL, syscall.SIGQUIT)
 | 
						signal.Notify(sigQueue, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL, syscall.SIGQUIT)
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
		for range sigQueue {
 | 
							for range sigQueue {
 | 
				
			||||||
@@ -106,8 +106,7 @@ func (this *AdminNode) Run() {
 | 
				
			|||||||
// Daemon 实现守护进程
 | 
					// Daemon 实现守护进程
 | 
				
			||||||
func (this *AdminNode) Daemon() {
 | 
					func (this *AdminNode) Daemon() {
 | 
				
			||||||
	var sock = gosock.NewTmpSock(teaconst.ProcessName)
 | 
						var sock = gosock.NewTmpSock(teaconst.ProcessName)
 | 
				
			||||||
	isDebug := lists.ContainsString(os.Args, "debug")
 | 
						var isDebug = lists.ContainsString(os.Args, "debug")
 | 
				
			||||||
	isDebug = true
 | 
					 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		conn, err := sock.Dial()
 | 
							conn, err := sock.Dial()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,8 +26,5 @@ func IsNewInstalled() bool {
 | 
				
			|||||||
		return false
 | 
							return false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err = os.Stat(homeDir + "/." + teaconst.ProcessName + "/api.yaml")
 | 
						_, err = os.Stat(homeDir + "/." + teaconst.ProcessName + "/api.yaml")
 | 
				
			||||||
	if err != nil {
 | 
						return err != nil
 | 
				
			||||||
		return true
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return false
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,10 @@ var DefaultCache = NewCache()
 | 
				
			|||||||
// TTL缓存
 | 
					// TTL缓存
 | 
				
			||||||
// 最大的缓存时间为30 * 86400
 | 
					// 最大的缓存时间为30 * 86400
 | 
				
			||||||
// Piece数据结构:
 | 
					// Piece数据结构:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
//	    Piece1          |  Piece2 | Piece3 | ...
 | 
					//	    Piece1          |  Piece2 | Piece3 | ...
 | 
				
			||||||
//	[ Item1, Item2, ... |   ...
 | 
					//	[ Item1, Item2, ... |   ...
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
// KeyMap列表数据结构
 | 
					// KeyMap列表数据结构
 | 
				
			||||||
// { timestamp1 => [key1, key2, ...] }, ...
 | 
					// { timestamp1 => [key1, key2, ...] }, ...
 | 
				
			||||||
type Cache struct {
 | 
					type Cache struct {
 | 
				
			||||||
@@ -109,19 +111,11 @@ func (this *Cache) Read(key string) (item *Item) {
 | 
				
			|||||||
	return this.pieces[uint64Key%this.countPieces].Read(uint64Key)
 | 
						return this.pieces[uint64Key%this.countPieces].Read(uint64Key)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (this *Cache) readIntKey(key uint64) (value *Item) {
 | 
					 | 
				
			||||||
	return this.pieces[key%this.countPieces].Read(key)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (this *Cache) Delete(key string) {
 | 
					func (this *Cache) Delete(key string) {
 | 
				
			||||||
	uint64Key := HashKey([]byte(key))
 | 
						uint64Key := HashKey([]byte(key))
 | 
				
			||||||
	this.pieces[uint64Key%this.countPieces].Delete(uint64Key)
 | 
						this.pieces[uint64Key%this.countPieces].Delete(uint64Key)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (this *Cache) deleteIntKey(key uint64) {
 | 
					 | 
				
			||||||
	this.pieces[key%this.countPieces].Delete(key)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (this *Cache) Count() (count int) {
 | 
					func (this *Cache) Count() (count int) {
 | 
				
			||||||
	for _, piece := range this.pieces {
 | 
						for _, piece := range this.pieces {
 | 
				
			||||||
		count += piece.Count()
 | 
							count += piece.Count()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ func (this *ServiceManager) setup() {
 | 
				
			|||||||
	this.onceLocker.Do(func() {
 | 
						this.onceLocker.Do(func() {
 | 
				
			||||||
		logFile := files.NewFile(Tea.Root + "/logs/service.log")
 | 
							logFile := files.NewFile(Tea.Root + "/logs/service.log")
 | 
				
			||||||
		if logFile.Exists() {
 | 
							if logFile.Exists() {
 | 
				
			||||||
			logFile.Delete()
 | 
								_ = logFile.Delete()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//logger
 | 
							//logger
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -107,13 +107,13 @@ func MatchPath(action *actions.ActionObject, path string) bool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// FindParentAction 查找父级Action
 | 
					// FindParentAction 查找父级Action
 | 
				
			||||||
func FindParentAction(actionPtr actions.ActionWrapper) *ParentAction {
 | 
					func FindParentAction(actionPtr actions.ActionWrapper) *ParentAction {
 | 
				
			||||||
	parentActionValue := reflect.ValueOf(actionPtr).Elem().FieldByName("ParentAction")
 | 
						action, ok := actionPtr.(interface{
 | 
				
			||||||
	if parentActionValue.IsValid() {
 | 
							Parent() *ParentAction
 | 
				
			||||||
		parentAction, isOk := parentActionValue.Interface().(ParentAction)
 | 
						})
 | 
				
			||||||
		if isOk {
 | 
						if ok {
 | 
				
			||||||
			return &parentAction
 | 
							return action.Parent()
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,7 +159,7 @@ func parseAPIErr(action actions.ActionWrapper, err error) (apiNodeIsStarting boo
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var isRPCConnError bool
 | 
						var isRPCConnError bool
 | 
				
			||||||
	err, isRPCConnError = rpcerrors.HumanError(err, apiEndpoints, Tea.ConfigFile("api.yaml"))
 | 
						_, isRPCConnError = rpcerrors.HumanError(err, apiEndpoints, Tea.ConfigFile("api.yaml"))
 | 
				
			||||||
	if isRPCConnError {
 | 
						if isRPCConnError {
 | 
				
			||||||
		// API节点是否正在启动
 | 
							// API节点是否正在启动
 | 
				
			||||||
		var sock = gosock.NewTmpSock("edge-api")
 | 
							var sock = gosock.NewTmpSock("edge-api")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,5 +67,5 @@ func (this *OtpQrcodeAction) RunGet(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	this.AddHeader("Content-Type", "image/png")
 | 
						this.AddHeader("Content-Type", "image/png")
 | 
				
			||||||
	this.Write(data)
 | 
						_, _ = this.Write(data)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -297,7 +297,7 @@ func (this *DetailAction) RunGet(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 缓存硬盘 & 内存容量
 | 
						// 缓存硬盘 & 内存容量
 | 
				
			||||||
	var maxCacheDiskCapacity maps.Map = nil
 | 
						var maxCacheDiskCapacity maps.Map
 | 
				
			||||||
	if node.MaxCacheDiskCapacity != nil {
 | 
						if node.MaxCacheDiskCapacity != nil {
 | 
				
			||||||
		maxCacheDiskCapacity = maps.Map{
 | 
							maxCacheDiskCapacity = maps.Map{
 | 
				
			||||||
			"count": node.MaxCacheDiskCapacity.Count,
 | 
								"count": node.MaxCacheDiskCapacity.Count,
 | 
				
			||||||
@@ -310,7 +310,7 @@ func (this *DetailAction) RunGet(params struct {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var maxCacheMemoryCapacity maps.Map = nil
 | 
						var maxCacheMemoryCapacity maps.Map
 | 
				
			||||||
	if node.MaxCacheMemoryCapacity != nil {
 | 
						if node.MaxCacheMemoryCapacity != nil {
 | 
				
			||||||
		maxCacheMemoryCapacity = maps.Map{
 | 
							maxCacheMemoryCapacity = maps.Map{
 | 
				
			||||||
			"count": node.MaxCacheMemoryCapacity.Count,
 | 
								"count": node.MaxCacheMemoryCapacity.Count,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 缓存硬盘 & 内存容量
 | 
						// 缓存硬盘 & 内存容量
 | 
				
			||||||
	var maxCacheDiskCapacity maps.Map = nil
 | 
						var maxCacheDiskCapacity maps.Map
 | 
				
			||||||
	if node.MaxCacheDiskCapacity != nil {
 | 
						if node.MaxCacheDiskCapacity != nil {
 | 
				
			||||||
		maxCacheDiskCapacity = maps.Map{
 | 
							maxCacheDiskCapacity = maps.Map{
 | 
				
			||||||
			"count": node.MaxCacheDiskCapacity.Count,
 | 
								"count": node.MaxCacheDiskCapacity.Count,
 | 
				
			||||||
@@ -46,7 +46,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var maxCacheMemoryCapacity maps.Map = nil
 | 
						var maxCacheMemoryCapacity maps.Map
 | 
				
			||||||
	if node.MaxCacheMemoryCapacity != nil {
 | 
						if node.MaxCacheMemoryCapacity != nil {
 | 
				
			||||||
		maxCacheMemoryCapacity = maps.Map{
 | 
							maxCacheMemoryCapacity = maps.Map{
 | 
				
			||||||
			"count": node.MaxCacheMemoryCapacity.Count,
 | 
								"count": node.MaxCacheMemoryCapacity.Count,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,7 +43,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	this.Data["config"] = config
 | 
						this.Data["config"] = config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var httpAllDomainMismatchActionContentHTML = ""
 | 
						var httpAllDomainMismatchActionContentHTML string
 | 
				
			||||||
	var httpAllDomainMismatchActionStatusCode = "404"
 | 
						var httpAllDomainMismatchActionStatusCode = "404"
 | 
				
			||||||
	if config.HTTPAll.DomainMismatchAction != nil && config.HTTPAll.DomainMismatchAction.Options != nil {
 | 
						if config.HTTPAll.DomainMismatchAction != nil && config.HTTPAll.DomainMismatchAction.Options != nil {
 | 
				
			||||||
		httpAllDomainMismatchActionContentHTML = config.HTTPAll.DomainMismatchAction.Options.GetString("contentHTML")
 | 
							httpAllDomainMismatchActionContentHTML = config.HTTPAll.DomainMismatchAction.Options.GetString("contentHTML")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ func (this *Helper) BeforeAction(action *actions.ActionObject) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	action.Data["teaMenu"] = "db"
 | 
						action.Data["teaMenu"] = "db"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	selectedTabbar, _ := action.Data["mainTab"]
 | 
						var selectedTabbar = action.Data["mainTab"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var tabbar = actionutils.NewTabbar()
 | 
						var tabbar = actionutils.NewTabbar()
 | 
				
			||||||
	tabbar.Add(this.Lang(action, codes.DBNode_TabNodes), "", "/db", "", selectedTabbar == "db")
 | 
						tabbar.Add(this.Lang(action, codes.DBNode_TabNodes), "", "/db", "", selectedTabbar == "db")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,6 +63,10 @@ func (this *LogsAction) RunGet(params struct {
 | 
				
			|||||||
		Offset: page.Offset,
 | 
							Offset: page.Offset,
 | 
				
			||||||
		Size:   page.Size,
 | 
							Size:   page.Size,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	logs := []maps.Map{}
 | 
						logs := []maps.Map{}
 | 
				
			||||||
	for _, log := range logsResp.NodeLogs {
 | 
						for _, log := range logsResp.NodeLogs {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,9 +101,7 @@ func ValidateRecordValue(recordType dnsconfigs.RecordType, value string) (messag
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	case dnsconfigs.RecordTypeCNAME:
 | 
						case dnsconfigs.RecordTypeCNAME:
 | 
				
			||||||
		if strings.HasSuffix(value, ".") {
 | 
							value = strings.TrimSuffix(value, ".")
 | 
				
			||||||
			value = value[:len(value)-1]
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !strings.Contains(value, ".") || !ValidateDomainFormat(value) {
 | 
							if !strings.Contains(value, ".") || !ValidateDomainFormat(value) {
 | 
				
			||||||
			message = "请输入正确的域名"
 | 
								message = "请输入正确的域名"
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
@@ -118,17 +116,13 @@ func ValidateRecordValue(recordType dnsconfigs.RecordType, value string) (messag
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	case dnsconfigs.RecordTypeNS:
 | 
						case dnsconfigs.RecordTypeNS:
 | 
				
			||||||
		if strings.HasSuffix(value, ".") {
 | 
							value = strings.TrimSuffix(value, ".")
 | 
				
			||||||
			value = value[:len(value)-1]
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !strings.Contains(value, ".") || !ValidateDomainFormat(value) {
 | 
							if !strings.Contains(value, ".") || !ValidateDomainFormat(value) {
 | 
				
			||||||
			message = "请输入正确的DNS服务器域名"
 | 
								message = "请输入正确的DNS服务器域名"
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	case dnsconfigs.RecordTypeMX:
 | 
						case dnsconfigs.RecordTypeMX:
 | 
				
			||||||
		if strings.HasSuffix(value, ".") {
 | 
							value = strings.TrimSuffix(value, ".")
 | 
				
			||||||
			value = value[:len(value)-1]
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !strings.Contains(value, ".") || !ValidateDomainFormat(value) {
 | 
							if !strings.Contains(value, ".") || !ValidateDomainFormat(value) {
 | 
				
			||||||
			message = "请输入正确的邮件服务器域名"
 | 
								message = "请输入正确的邮件服务器域名"
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// 格式化域名
 | 
						// 格式化域名
 | 
				
			||||||
	var domain = params.Domain
 | 
						var domain = params.Domain
 | 
				
			||||||
	domain = regexp.MustCompile(`^(www\.)`).ReplaceAllString(params.Domain, "")
 | 
						domain = regexp.MustCompile(`^(www\.)`).ReplaceAllString(domain, "")
 | 
				
			||||||
	domain = strings.ToLower(domain)
 | 
						domain = strings.ToLower(domain)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	countResp, err := this.RPC().DNSProviderRPC().CountAllEnabledDNSProviders(this.AdminContext(), &pb.CountAllEnabledDNSProvidersRequest{
 | 
						countResp, err := this.RPC().DNSProviderRPC().CountAllEnabledDNSProviders(this.AdminContext(), &pb.CountAllEnabledDNSProvidersRequest{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,6 +57,6 @@ func (this *FileAction) RunGet(params struct {
 | 
				
			|||||||
		if chunkResp.FileChunk == nil {
 | 
							if chunkResp.FileChunk == nil {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		this.Write(chunkResp.FileChunk.Data)
 | 
							_, _ = this.Write(chunkResp.FileChunk.Data)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -123,5 +123,5 @@ func (this *ExportExcelAction) RunGet(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.AddHeader("Content-Length", strconv.Itoa(buf.Len()))
 | 
						this.AddHeader("Content-Length", strconv.Itoa(buf.Len()))
 | 
				
			||||||
	this.Write(buf.Bytes())
 | 
						_, _ = this.Write(buf.Bytes())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ func UpdateNodeIPAddresses(parentAction *actionutils.ParentAction, nodeId int64,
 | 
				
			|||||||
		if addrId > 0 {
 | 
							if addrId > 0 {
 | 
				
			||||||
			resultAddrIds = append(resultAddrIds, addrId)
 | 
								resultAddrIds = append(resultAddrIds, addrId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var isOn = false
 | 
								var isOn bool
 | 
				
			||||||
			if !addr.Has("isOn") { // 兼容老版本
 | 
								if !addr.Has("isOn") { // 兼容老版本
 | 
				
			||||||
				isOn = true
 | 
									isOn = true
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,5 +36,5 @@ func (this *DownloadCertAction) RunGet(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.AddHeader("Content-Disposition", "attachment; filename=\"cert-"+strconv.FormatInt(params.CertId, 10)+".pem\";")
 | 
						this.AddHeader("Content-Disposition", "attachment; filename=\"cert-"+strconv.FormatInt(params.CertId, 10)+".pem\";")
 | 
				
			||||||
	this.Write(certConfig.CertData)
 | 
						_, _ = this.Write(certConfig.CertData)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,5 +36,5 @@ func (this *DownloadKeyAction) RunGet(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.AddHeader("Content-Disposition", "attachment; filename=\"key-"+strconv.FormatInt(params.CertId, 10)+".pem\";")
 | 
						this.AddHeader("Content-Disposition", "attachment; filename=\"key-"+strconv.FormatInt(params.CertId, 10)+".pem\";")
 | 
				
			||||||
	this.Write(certConfig.KeyData)
 | 
						_, _ = this.Write(certConfig.KeyData)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,12 +50,12 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	this.Data["user"] = userMap
 | 
						this.Data["user"] = userMap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var countAll = int64(0)
 | 
						var countAll int64
 | 
				
			||||||
	var countCA = int64(0)
 | 
						var countCA int64
 | 
				
			||||||
	var countAvailable = int64(0)
 | 
						var countAvailable int64
 | 
				
			||||||
	var countExpired = int64(0)
 | 
						var countExpired int64
 | 
				
			||||||
	var count7Days = int64(0)
 | 
						var count7Days int64
 | 
				
			||||||
	var count30Days = int64(0)
 | 
						var count30Days int64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 计算数量
 | 
						// 计算数量
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -172,6 +172,11 @@ func (this *SelectPopupAction) RunGet(params struct {
 | 
				
			|||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if listResp == nil {
 | 
						if listResp == nil {
 | 
				
			||||||
		this.ErrorPage(errors.New("'listResp' should not be nil"))
 | 
							this.ErrorPage(errors.New("'listResp' should not be nil"))
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package certs
 | 
					package certs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
				
			||||||
@@ -120,7 +121,7 @@ func (this *UpdatePopupAction) RunPost(params struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// 校验
 | 
						// 校验
 | 
				
			||||||
	certConfig.IsCA = params.IsCA
 | 
						certConfig.IsCA = params.IsCA
 | 
				
			||||||
	err = certConfig.Init(nil)
 | 
						err = certConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		if params.IsCA {
 | 
							if params.IsCA {
 | 
				
			||||||
			this.Fail("证书校验错误:" + err.Error())
 | 
								this.Fail("证书校验错误:" + err.Error())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ package certs
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"crypto/tls"
 | 
						"crypto/tls"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
				
			||||||
@@ -156,7 +157,7 @@ func (this *UploadBatchPopupAction) RunPost(params struct {
 | 
				
			|||||||
			CertData: certData,
 | 
								CertData: certData,
 | 
				
			||||||
			KeyData:  keyData,
 | 
								KeyData:  keyData,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		err := certConfig.Init(nil)
 | 
							err := certConfig.Init(context.TODO())
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			this.Fail("证书验证失败:" + err.Error())
 | 
								this.Fail("证书验证失败:" + err.Error())
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package certs
 | 
					package certs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
				
			||||||
@@ -60,8 +61,8 @@ func (this *UploadPopupAction) RunPost(params struct {
 | 
				
			|||||||
		Field("name", params.Name).
 | 
							Field("name", params.Name).
 | 
				
			||||||
		Require("请输入证书说明")
 | 
							Require("请输入证书说明")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var certData = []byte{}
 | 
						var certData []byte
 | 
				
			||||||
	var keyData = []byte{}
 | 
						var keyData []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if params.TextMode {
 | 
						if params.TextMode {
 | 
				
			||||||
		if len(params.CertText) == 0 {
 | 
							if len(params.CertText) == 0 {
 | 
				
			||||||
@@ -104,7 +105,7 @@ func (this *UploadPopupAction) RunPost(params struct {
 | 
				
			|||||||
		CertData: certData,
 | 
							CertData: certData,
 | 
				
			||||||
		KeyData:  keyData,
 | 
							KeyData:  keyData,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	err := certConfig.Init(nil)
 | 
						err := certConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		if params.IsCA {
 | 
							if params.IsCA {
 | 
				
			||||||
			this.Fail("证书校验错误:" + err.Error())
 | 
								this.Fail("证书校验错误:" + err.Error())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,5 +35,5 @@ func (this *ViewCertAction) RunGet(params struct {
 | 
				
			|||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	this.Write(certConfig.CertData)
 | 
						_, _ = this.Write(certConfig.CertData)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,5 +30,5 @@ func (this *ViewKeyAction) RunGet(params struct {
 | 
				
			|||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	this.Write(certConfig.KeyData)
 | 
						_, _ = this.Write(certConfig.KeyData)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,6 @@ import (
 | 
				
			|||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/cache/cacheutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/cache/cacheutils"
 | 
				
			||||||
	"github.com/iwind/TeaGo/actions"
 | 
						"github.com/iwind/TeaGo/actions"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"reflect"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Helper struct {
 | 
					type Helper struct {
 | 
				
			||||||
@@ -27,11 +26,11 @@ func (this *Helper) BeforeAction(actionPtr actions.ActionWrapper) {
 | 
				
			|||||||
	cachePolicyId := action.ParamInt64("cachePolicyId")
 | 
						cachePolicyId := action.ParamInt64("cachePolicyId")
 | 
				
			||||||
	action.Data["cachePolicyId"] = cachePolicyId
 | 
						action.Data["cachePolicyId"] = cachePolicyId
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	parentActionValue := reflect.ValueOf(actionPtr).Elem().FieldByName("ParentAction")
 | 
						parentActionObj, ok := actionPtr.(interface {
 | 
				
			||||||
	if parentActionValue.IsValid() {
 | 
							Parent() *actionutils.ParentAction
 | 
				
			||||||
		parentAction, isOk := parentActionValue.Interface().(actionutils.ParentAction)
 | 
						})
 | 
				
			||||||
		if isOk {
 | 
						if ok {
 | 
				
			||||||
			action.Data["cachePolicyName"] = cacheutils.FindCachePolicyNameWithoutError(&parentAction, cachePolicyId)
 | 
							var parentAction = parentActionObj.Parent()
 | 
				
			||||||
		}
 | 
							action.Data["cachePolicyName"] = cacheutils.FindCachePolicyNameWithoutError(parentAction, cachePolicyId)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,14 +76,6 @@ func (this *IndexAction) RunPost(params struct {
 | 
				
			|||||||
		this.Fail("配置校验失败:" + err.Error())
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 允许不匹配的域名
 | 
					 | 
				
			||||||
	allowMismatchDomains := []string{}
 | 
					 | 
				
			||||||
	for _, domain := range params.AllowMismatchDomains {
 | 
					 | 
				
			||||||
		if len(domain) > 0 {
 | 
					 | 
				
			||||||
			allowMismatchDomains = append(allowMismatchDomains, domain)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// TCP端口范围
 | 
						// TCP端口范围
 | 
				
			||||||
	if params.TcpAllPortRangeMin < 1024 {
 | 
						if params.TcpAllPortRangeMin < 1024 {
 | 
				
			||||||
		params.TcpAllPortRangeMin = 1024
 | 
							params.TcpAllPortRangeMin = 1024
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ func (this *ExportDownloadAction) RunGet(params struct {
 | 
				
			|||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		this.AddHeader("Content-Disposition", "attachment; filename=\"WAF-"+types.String(params.PolicyId)+".json\";")
 | 
							this.AddHeader("Content-Disposition", "attachment; filename=\"WAF-"+types.String(params.PolicyId)+".json\";")
 | 
				
			||||||
		this.AddHeader("Content-Length", strconv.Itoa(len(data)))
 | 
							this.AddHeader("Content-Length", strconv.Itoa(len(data)))
 | 
				
			||||||
		this.Write(data)
 | 
							_, _ = this.Write(data)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		this.WriteString("找不到要导出的内容")
 | 
							this.WriteString("找不到要导出的内容")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,10 @@ func (this *SortSetsAction) RunPost(params struct {
 | 
				
			|||||||
		FirewallRuleGroupId:  params.GroupId,
 | 
							FirewallRuleGroupId:  params.GroupId,
 | 
				
			||||||
		FirewallRuleSetsJSON: newRefsJSON,
 | 
							FirewallRuleSetsJSON: newRefsJSON,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.Success()
 | 
						this.Success()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package httpReverseProxy
 | 
					package httpReverseProxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/groups/group/servergrouputils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/groups/group/servergrouputils"
 | 
				
			||||||
@@ -73,7 +74,7 @@ func (this *SettingAction) RunPost(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = reverseProxyConfig.Init(nil)
 | 
						err = reverseProxyConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.Fail("配置校验失败:" + err.Error())
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package tcpReverseProxy
 | 
					package tcpReverseProxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/groups/group/servergrouputils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/groups/group/servergrouputils"
 | 
				
			||||||
@@ -73,7 +74,7 @@ func (this *SettingAction) RunPost(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = reverseProxyConfig.Init(nil)
 | 
						err = reverseProxyConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.Fail("配置校验失败:" + err.Error())
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package udpReverseProxy
 | 
					package udpReverseProxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/groups/group/servergrouputils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/groups/group/servergrouputils"
 | 
				
			||||||
@@ -73,7 +74,7 @@ func (this *SettingAction) RunPost(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = reverseProxyConfig.Init(nil)
 | 
						err = reverseProxyConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.Fail("配置校验失败:" + err.Error())
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,6 +102,10 @@ func (this *IndexAction) RunPost(params struct {
 | 
				
			|||||||
			RequestSameOrigin:    websocketConfig.RequestSameOrigin,
 | 
								RequestSameOrigin:    websocketConfig.RequestSameOrigin,
 | 
				
			||||||
			RequestOrigin:        websocketConfig.RequestOrigin,
 | 
								RequestOrigin:        websocketConfig.RequestOrigin,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	websocketRef.WebsocketId = websocketConfig.Id
 | 
						websocketRef.WebsocketId = websocketConfig.Id
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ func (this *ExportDataAction) RunGet(params struct {
 | 
				
			|||||||
	defer this.CreateLogInfo(codes.IPList_LogExportIPList, params.ListId)
 | 
						defer this.CreateLogInfo(codes.IPList_LogExportIPList, params.ListId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	var ext = ""
 | 
						var ext string
 | 
				
			||||||
	var jsonMaps = []maps.Map{}
 | 
						var jsonMaps = []maps.Map{}
 | 
				
			||||||
	var xlsxFile *xlsx.File
 | 
						var xlsxFile *xlsx.File
 | 
				
			||||||
	var xlsxSheet *xlsx.Sheet
 | 
						var xlsxSheet *xlsx.Sheet
 | 
				
			||||||
@@ -146,5 +146,5 @@ func (this *ExportDataAction) RunGet(params struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	this.AddHeader("Content-Disposition", "attachment; filename=\"ip-list-"+numberutils.FormatInt64(params.ListId)+ext+"\";")
 | 
						this.AddHeader("Content-Disposition", "attachment; filename=\"ip-list-"+numberutils.FormatInt64(params.ListId)+ext+"\";")
 | 
				
			||||||
	this.AddHeader("Content-Length", strconv.Itoa(len(data)))
 | 
						this.AddHeader("Content-Length", strconv.Itoa(len(data)))
 | 
				
			||||||
	this.Write(data)
 | 
						_, _ = this.Write(data)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package http
 | 
					package http
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils"
 | 
				
			||||||
@@ -53,7 +54,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_ = httpsConfig.Init(nil)
 | 
							_ = httpsConfig.Init(context.TODO())
 | 
				
			||||||
		for _, port := range httpsConfig.AllPorts() {
 | 
							for _, port := range httpsConfig.AllPorts() {
 | 
				
			||||||
			if lists.ContainsInt(httpPorts, port) {
 | 
								if lists.ContainsInt(httpPorts, port) {
 | 
				
			||||||
				conflictingPorts = append(conflictingPorts, port)
 | 
									conflictingPorts = append(conflictingPorts, port)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package https
 | 
					package https
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
@@ -43,7 +44,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
		httpsConfig.IsOn = true
 | 
							httpsConfig.IsOn = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_ = httpsConfig.Init(nil)
 | 
						_ = httpsConfig.Init(context.TODO())
 | 
				
			||||||
	var httpsPorts = httpsConfig.AllPorts()
 | 
						var httpsPorts = httpsConfig.AllPorts()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 检查http和https端口冲突
 | 
						// 检查http和https端口冲突
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,18 +32,18 @@ func (this *RequestCertPopupAction) RunGet(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	serverNameConfigs := []*serverconfigs.ServerNameConfig{}
 | 
						var serverNameConfigs = []*serverconfigs.ServerNameConfig{}
 | 
				
			||||||
	err = json.Unmarshal(serverNamesResp.ServerNamesJSON, &serverNameConfigs)
 | 
						err = json.Unmarshal(serverNamesResp.ServerNamesJSON, &serverNameConfigs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	excludeServerNames := []string{}
 | 
						var excludeServerNames = []string{}
 | 
				
			||||||
	if len(params.ExcludeServerNames) > 0 {
 | 
						if len(params.ExcludeServerNames) > 0 {
 | 
				
			||||||
		excludeServerNames = strings.Split(params.ExcludeServerNames, ",")
 | 
							excludeServerNames = strings.Split(params.ExcludeServerNames, ",")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	serverNames := []string{}
 | 
						var serverNames = []string{}
 | 
				
			||||||
	for _, c := range serverNameConfigs {
 | 
						for _, c := range serverNameConfigs {
 | 
				
			||||||
		if len(c.SubNames) == 0 {
 | 
							if len(c.SubNames) == 0 {
 | 
				
			||||||
			if domainutils.ValidateDomainFormat(c.Name) && !lists.ContainsString(excludeServerNames, c.Name) {
 | 
								if domainutils.ValidateDomainFormat(c.Name) && !lists.ContainsString(excludeServerNames, c.Name) {
 | 
				
			||||||
@@ -64,7 +64,12 @@ func (this *RequestCertPopupAction) RunGet(params struct {
 | 
				
			|||||||
		AdminId: this.AdminId(),
 | 
							AdminId: this.AdminId(),
 | 
				
			||||||
		UserId:  0,
 | 
							UserId:  0,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	userMaps := []maps.Map{}
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var userMaps = []maps.Map{}
 | 
				
			||||||
	for _, user := range acmeUsersResp.AcmeUsers {
 | 
						for _, user := range acmeUsersResp.AcmeUsers {
 | 
				
			||||||
		description := user.Description
 | 
							description := user.Description
 | 
				
			||||||
		if len(description) > 0 {
 | 
							if len(description) > 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,10 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			HttpWebId:  webId,
 | 
								HttpWebId:  webId,
 | 
				
			||||||
			HeaderJSON: refJSON,
 | 
								HeaderJSON: refJSON,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		isChanged = true
 | 
							isChanged = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if webConfig.ResponseHeaderPolicy == nil {
 | 
						if webConfig.ResponseHeaderPolicy == nil {
 | 
				
			||||||
@@ -75,6 +79,10 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			HttpWebId:  webId,
 | 
								HttpWebId:  webId,
 | 
				
			||||||
			HeaderJSON: refJSON,
 | 
								HeaderJSON: refJSON,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		isChanged = true
 | 
							isChanged = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ import (
 | 
				
			|||||||
	"github.com/iwind/TeaGo/actions"
 | 
						"github.com/iwind/TeaGo/actions"
 | 
				
			||||||
	"github.com/iwind/TeaGo/maps"
 | 
						"github.com/iwind/TeaGo/maps"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"reflect"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type LocationHelper struct {
 | 
					type LocationHelper struct {
 | 
				
			||||||
@@ -35,12 +34,13 @@ func (this *LocationHelper) BeforeAction(actionPtr actions.ActionWrapper) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// 路径信息
 | 
						// 路径信息
 | 
				
			||||||
	var currentLocationConfig *serverconfigs.HTTPLocationConfig = nil
 | 
						var currentLocationConfig *serverconfigs.HTTPLocationConfig = nil
 | 
				
			||||||
	parentActionValue := reflect.ValueOf(actionPtr).Elem().FieldByName("ParentAction")
 | 
						parentActionValue, ok := actionPtr.(interface {
 | 
				
			||||||
	if parentActionValue.IsValid() {
 | 
							Parent() *actionutils.ParentAction
 | 
				
			||||||
		parentAction, isOk := parentActionValue.Interface().(actionutils.ParentAction)
 | 
						})
 | 
				
			||||||
		if isOk {
 | 
						if ok {
 | 
				
			||||||
 | 
							var parentAction = parentActionValue.Parent()
 | 
				
			||||||
		var locationId = action.ParamInt64("locationId")
 | 
							var locationId = action.ParamInt64("locationId")
 | 
				
			||||||
			locationConfig, isOk := FindLocationConfig(&parentAction, locationId)
 | 
							locationConfig, isOk := FindLocationConfig(parentAction, locationId)
 | 
				
			||||||
		if !isOk {
 | 
							if !isOk {
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -48,7 +48,6 @@ func (this *LocationHelper) BeforeAction(actionPtr actions.ActionWrapper) {
 | 
				
			|||||||
		action.Data["locationConfig"] = locationConfig
 | 
							action.Data["locationConfig"] = locationConfig
 | 
				
			||||||
		currentLocationConfig = locationConfig
 | 
							currentLocationConfig = locationConfig
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 左侧菜单
 | 
						// 左侧菜单
 | 
				
			||||||
	action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem"), currentLocationConfig, actionPtr)
 | 
						action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem"), currentLocationConfig, actionPtr)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package locationutils
 | 
					package locationutils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/utils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/utils"
 | 
				
			||||||
@@ -30,7 +31,7 @@ func FindLocationConfig(parentAction *actionutils.ParentAction, locationId int64
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = locationConfig.Init(nil)
 | 
						err = locationConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		parentAction.ErrorPage(err)
 | 
							parentAction.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package reverseProxy
 | 
					package reverseProxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
				
			||||||
@@ -64,7 +65,7 @@ func (this *SettingAction) RunPost(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = reverseProxyConfig.Init(nil)
 | 
						err = reverseProxyConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.Fail("配置校验失败:" + err.Error())
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,6 +94,10 @@ func (this *IndexAction) RunPost(params struct {
 | 
				
			|||||||
			RequestSameOrigin:    websocketConfig.RequestSameOrigin,
 | 
								RequestSameOrigin:    websocketConfig.RequestSameOrigin,
 | 
				
			||||||
			RequestOrigin:        websocketConfig.RequestOrigin,
 | 
								RequestOrigin:        websocketConfig.RequestOrigin,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	websocketRef.WebsocketId = websocketConfig.Id
 | 
						websocketRef.WebsocketId = websocketConfig.Id
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ func (this *AddPopupAction) RunGet(params struct {
 | 
				
			|||||||
	this.Data["reverseProxyId"] = params.ReverseProxyId
 | 
						this.Data["reverseProxyId"] = params.ReverseProxyId
 | 
				
			||||||
	this.Data["originType"] = params.OriginType
 | 
						this.Data["originType"] = params.OriginType
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var serverType = ""
 | 
						var serverType string
 | 
				
			||||||
	if params.ServerId > 0 {
 | 
						if params.ServerId > 0 {
 | 
				
			||||||
		serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{ServerId: params.ServerId})
 | 
							serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{ServerId: params.ServerId})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@ func (this *UpdatePopupAction) RunGet(params struct {
 | 
				
			|||||||
	this.Data["reverseProxyId"] = params.ReverseProxyId
 | 
						this.Data["reverseProxyId"] = params.ReverseProxyId
 | 
				
			||||||
	this.Data["originId"] = params.OriginId
 | 
						this.Data["originId"] = params.OriginId
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var serverType = ""
 | 
						var serverType string
 | 
				
			||||||
	if params.ServerId > 0 {
 | 
						if params.ServerId > 0 {
 | 
				
			||||||
		serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{
 | 
							serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{
 | 
				
			||||||
			ServerId: params.ServerId,
 | 
								ServerId: params.ServerId,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package reverseProxy
 | 
					package reverseProxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
 | 
				
			||||||
@@ -63,7 +64,7 @@ func (this *SettingAction) RunPost(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = reverseProxyConfig.Init(nil)
 | 
						err = reverseProxyConfig.Init(context.TODO())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.Fail("配置校验失败:" + err.Error())
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -107,6 +107,10 @@ func (this *IndexAction) RunPost(params struct {
 | 
				
			|||||||
			RequestSameOrigin:    websocketConfig.RequestSameOrigin,
 | 
								RequestSameOrigin:    websocketConfig.RequestSameOrigin,
 | 
				
			||||||
			RequestOrigin:        websocketConfig.RequestOrigin,
 | 
								RequestOrigin:        websocketConfig.RequestOrigin,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	websocketRef.WebsocketId = websocketConfig.Id
 | 
						websocketRef.WebsocketId = websocketConfig.Id
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,8 +43,8 @@ func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) {
 | 
				
			|||||||
		action.Data["leftMenuItemIsDisabled"] = false
 | 
							action.Data["leftMenuItemIsDisabled"] = false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	action.Data["leftMenuItems"] = []maps.Map{}
 | 
						action.Data["leftMenuItems"] = []maps.Map{}
 | 
				
			||||||
	mainTab, _ := action.Data["mainTab"]
 | 
						var mainTab = action.Data["mainTab"]
 | 
				
			||||||
	secondMenuItem, _ := action.Data["secondMenuItem"]
 | 
						var secondMenuItem = action.Data["secondMenuItem"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	serverId := action.ParamInt64("serverId")
 | 
						serverId := action.ParamInt64("serverId")
 | 
				
			||||||
	if serverId == 0 {
 | 
						if serverId == 0 {
 | 
				
			||||||
@@ -108,7 +108,7 @@ func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) {
 | 
				
			|||||||
	action.Data["serverFamily"] = family
 | 
						action.Data["serverFamily"] = family
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TABBAR
 | 
						// TABBAR
 | 
				
			||||||
	selectedTabbar, _ := action.Data["mainTab"]
 | 
						var selectedTabbar = action.Data["mainTab"]
 | 
				
			||||||
	var tabbar = actionutils.NewTabbar()
 | 
						var tabbar = actionutils.NewTabbar()
 | 
				
			||||||
	tabbar.Add("", "", "/servers", "left arrow", false)
 | 
						tabbar.Add("", "", "/servers", "left arrow", false)
 | 
				
			||||||
	if len(serverConfig.Name) > 0 {
 | 
						if len(serverConfig.Name) > 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package api
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
						teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
				
			||||||
@@ -82,7 +83,7 @@ func (this *IndexAction) RunGet(params struct{}) {
 | 
				
			|||||||
						this.ErrorPage(err)
 | 
											this.ErrorPage(err)
 | 
				
			||||||
						return
 | 
											return
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					_ = httpsConfig.Init(nil)
 | 
										_ = httpsConfig.Init(context.TODO())
 | 
				
			||||||
					if httpsConfig.IsOn && len(httpsConfig.Listen) > 0 {
 | 
										if httpsConfig.IsOn && len(httpsConfig.Listen) > 0 {
 | 
				
			||||||
						restAccessAddrs = append(restAccessAddrs, httpsConfig.FullAddresses()...)
 | 
											restAccessAddrs = append(restAccessAddrs, httpsConfig.FullAddresses()...)
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,8 +59,8 @@ func (this *LogsAction) RunGet(params struct {
 | 
				
			|||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	count := countResp.Count
 | 
						var count = countResp.Count
 | 
				
			||||||
	page := this.NewPage(count, 20)
 | 
						var page = this.NewPage(count, 20)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	logsResp, err := this.RPC().NodeLogRPC().ListNodeLogs(this.AdminContext(), &pb.ListNodeLogsRequest{
 | 
						logsResp, err := this.RPC().NodeLogRPC().ListNodeLogs(this.AdminContext(), &pb.ListNodeLogsRequest{
 | 
				
			||||||
		NodeId:  params.NodeId,
 | 
							NodeId:  params.NodeId,
 | 
				
			||||||
@@ -73,8 +73,12 @@ func (this *LogsAction) RunGet(params struct {
 | 
				
			|||||||
		Offset: page.Offset,
 | 
							Offset: page.Offset,
 | 
				
			||||||
		Size:   page.Size,
 | 
							Size:   page.Size,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	logs := []maps.Map{}
 | 
						var logs = []maps.Map{}
 | 
				
			||||||
	for _, log := range logsResp.NodeLogs {
 | 
						for _, log := range logsResp.NodeLogs {
 | 
				
			||||||
		logs = append(logs, maps.Map{
 | 
							logs = append(logs, maps.Map{
 | 
				
			||||||
			"tag":         log.Tag,
 | 
								"tag":         log.Tag,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package server
 | 
					package server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/utils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/utils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
@@ -49,7 +50,7 @@ func (this *UpdateHTTPSPopupAction) RunGet(params struct{}) {
 | 
				
			|||||||
			CertData: certData,
 | 
								CertData: certData,
 | 
				
			||||||
			KeyData:  keyData,
 | 
								KeyData:  keyData,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_ = certConfig.Init(nil)
 | 
							_ = certConfig.Init(context.TODO())
 | 
				
			||||||
		certConfig.CertData = nil
 | 
							certConfig.CertData = nil
 | 
				
			||||||
		certConfig.KeyData = nil
 | 
							certConfig.KeyData = nil
 | 
				
			||||||
		certConfigs = append(certConfigs, certConfig)
 | 
							certConfigs = append(certConfigs, certConfig)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -286,7 +286,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// initialize
 | 
						// initialize
 | 
				
			||||||
	this.log("initializing mysql ...")
 | 
						this.log("initializing mysql ...")
 | 
				
			||||||
	var generatedPassword = ""
 | 
						var generatedPassword string
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		var cmd = utils.NewCmd(baseDir+"/bin/mysqld", "--initialize", "--user=mysql")
 | 
							var cmd = utils.NewCmd(baseDir+"/bin/mysqld", "--initialize", "--user=mysql")
 | 
				
			||||||
		cmd.WithStderr()
 | 
							cmd.WithStderr()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,16 +77,23 @@ func (this *ValidateDbAction) RunPost(params struct {
 | 
				
			|||||||
				Dsn:    params.Username + ":" + params.Password + "@tcp(" + configutils.QuoteIP(params.Host) + ":" + params.Port + ")/",
 | 
									Dsn:    params.Username + ":" + params.Password + "@tcp(" + configutils.QuoteIP(params.Host) + ":" + params.Port + ")/",
 | 
				
			||||||
				Prefix: "",
 | 
									Prefix: "",
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									this.Fail("尝试创建数据库失败:" + err.Error())
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			_, err = db.Exec("CREATE DATABASE `" + params.Database + "`")
 | 
								_, err = db.Exec("CREATE DATABASE `" + params.Database + "`")
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				this.Fail("尝试创建数据库失败:" + err.Error())
 | 
									this.Fail("尝试创建数据库失败:" + err.Error())
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			if strings.Contains(err.Error(), "Error 1044:") {
 | 
								if strings.Contains(err.Error(), "Error 1044:") {
 | 
				
			||||||
				this.Fail("无法连接到数据库,权限检查失败:" + err.Error())
 | 
									this.Fail("无法连接到数据库,权限检查失败:" + err.Error())
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			this.Fail("无法连接到数据库,请检查配置:" + err.Error())
 | 
								this.Fail("无法连接到数据库,请检查配置:" + err.Error())
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -142,5 +142,5 @@ func (this *ComponentsAction) RunGet(params struct{}) {
 | 
				
			|||||||
	componentsDataSum = fmt.Sprintf("%x", h.Sum(nil))
 | 
						componentsDataSum = fmt.Sprintf("%x", h.Sum(nil))
 | 
				
			||||||
	this.AddHeader("ETag", "\""+componentsDataSum+"\"")
 | 
						this.AddHeader("ETag", "\""+componentsDataSum+"\"")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.Write(componentsData)
 | 
						_, _ = this.Write(componentsData)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,6 +63,6 @@ func (this *ImageAction) RunGet(params struct {
 | 
				
			|||||||
		if chunkResp.FileChunk == nil {
 | 
							if chunkResp.FileChunk == nil {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		this.Write(chunkResp.FileChunk.Data)
 | 
							_, _ = this.Write(chunkResp.FileChunk.Data)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,5 +71,5 @@ func (this *OtpQrcodeAction) RunGet(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	this.AddHeader("Content-Type", "image/png")
 | 
						this.AddHeader("Content-Type", "image/png")
 | 
				
			||||||
	this.Write(data)
 | 
						_, _ = this.Write(data)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user