mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/1Panel-dev/1Panel.git
synced 2026-09-21 00:24:12 +08:00
89 lines
2.0 KiB
Go
89 lines
2.0 KiB
Go
package ctl_conf
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
const defaultFile = "/usr/local/bin/1pctl"
|
|
|
|
func Load(key string) string {
|
|
info, err := LoadFromFile(defaultFile, key)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if len(info) == 0 || info == `""` {
|
|
panic(fmt.Sprintf("error `%s` find in %s", key, defaultFile))
|
|
}
|
|
return info
|
|
}
|
|
|
|
func LoadWithoutPanic(key string) string {
|
|
info, err := LoadFromFile(defaultFile, key)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return info
|
|
}
|
|
|
|
func LoadFromFile(filePath, key string) (string, error) {
|
|
data, err := os.ReadFile(filePath)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
prefix := key + "="
|
|
for _, line := range strings.Split(string(data), "\n") {
|
|
if strings.HasPrefix(line, prefix) {
|
|
return strings.TrimSpace(strings.TrimPrefix(line, prefix)), nil
|
|
}
|
|
}
|
|
return "", fmt.Errorf("error `%s` find in %s", key, filePath)
|
|
}
|
|
|
|
func UpdateInFile(filePath, key, value string) error {
|
|
return rewriteFile(filePath, func(line string) (string, bool) {
|
|
if strings.HasPrefix(line, key+"=") {
|
|
return key + "=" + value, true
|
|
}
|
|
return line, true
|
|
})
|
|
}
|
|
|
|
func RemoveValueFromFile(filePath, key, value string) error {
|
|
target := key + "=" + value
|
|
return rewriteFile(filePath, func(line string) (string, bool) {
|
|
return line, line != target
|
|
})
|
|
}
|
|
|
|
func rewriteFile(filePath string, rewrite func(string) (string, bool)) error {
|
|
info, err := os.Stat(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
data, err := os.ReadFile(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
content := rewriteLines(string(data), rewrite)
|
|
return os.WriteFile(filePath, []byte(content), info.Mode().Perm())
|
|
}
|
|
|
|
func rewriteLines(data string, rewrite func(string) (string, bool)) string {
|
|
hasTrailingNewline := strings.HasSuffix(data, "\n")
|
|
lines := strings.Split(strings.TrimSuffix(data, "\n"), "\n")
|
|
rewritten := make([]string, 0, len(lines))
|
|
for _, line := range lines {
|
|
newLine, keep := rewrite(line)
|
|
if keep {
|
|
rewritten = append(rewritten, newLine)
|
|
}
|
|
}
|
|
content := strings.Join(rewritten, "\n")
|
|
if hasTrailingNewline {
|
|
content += "\n"
|
|
}
|
|
return content
|
|
}
|