mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/1Panel-dev/1Panel.git
synced 2026-09-20 08:03:55 +08:00
fix enterprise user cli updates (#12689)
This commit is contained in:
committed by
zhengkunwang223
parent
11771b2b53
commit
6cd0373678
@@ -43,7 +43,7 @@ func loadDBConn(dbName string) (*gorm.DB, error) {
|
||||
return nil, fmt.Errorf("handle load `BASE_DIR` failed, err: %v", err)
|
||||
}
|
||||
if len(baseDir) == 0 {
|
||||
return nil, fmt.Errorf("error `BASE_DIR` find in /usr/local/bin/1pctl \n")
|
||||
return nil, fmt.Errorf("error `BASE_DIR` find in /usr/local/bin/1pctl")
|
||||
}
|
||||
if strings.HasSuffix(baseDir, "/") {
|
||||
baseDir = baseDir[:strings.LastIndex(baseDir, "/")]
|
||||
@@ -51,7 +51,7 @@ func loadDBConn(dbName string) (*gorm.DB, error) {
|
||||
|
||||
db, err := gorm.Open(sqlite.Open(path.Join(baseDir, "1panel/db", dbName)), &gorm.Config{})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("init my db conn failed, err: %v \n", err)
|
||||
return nil, fmt.Errorf("init my db conn failed, err: %v", err)
|
||||
}
|
||||
return db, nil
|
||||
}
|
||||
@@ -64,7 +64,7 @@ func getSettingByKey(db *gorm.DB, key string) string {
|
||||
|
||||
type LoginLog struct{}
|
||||
|
||||
func isDefault(db *gorm.DB) bool {
|
||||
func shouldShowInitialPassword(db *gorm.DB) bool {
|
||||
logCount := int64(0)
|
||||
_ = db.Model(&LoginLog{}).Where("status = ?", "Success").Count(&logCount).Error
|
||||
return logCount == 0
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
"github.com/1Panel-dev/1Panel/core/cmd/server/conf"
|
||||
"github.com/1Panel-dev/1Panel/core/constant"
|
||||
"github.com/1Panel-dev/1Panel/core/global"
|
||||
"github.com/1Panel-dev/1Panel/core/i18n"
|
||||
@@ -17,6 +18,8 @@ import (
|
||||
"github.com/1Panel-dev/1Panel/core/utils/encrypt"
|
||||
"github.com/spf13/cobra"
|
||||
"golang.org/x/term"
|
||||
"gopkg.in/yaml.v3"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -27,12 +30,17 @@ func init() {
|
||||
|
||||
RootCmd.AddCommand(updateCmd)
|
||||
updateCmd.AddCommand(updateUserName)
|
||||
updateUserName.Flags().StringVar(&updateUserNameFlag, "username", "", "username")
|
||||
updateCmd.AddCommand(updatePassword)
|
||||
updatePassword.Flags().StringVar(&updatePasswordUserName, "username", "", "username")
|
||||
updateCmd.AddCommand(updatePort)
|
||||
|
||||
updateCmd.AddCommand(updateVersion)
|
||||
}
|
||||
|
||||
var updateUserNameFlag string
|
||||
var updatePasswordUserName string
|
||||
|
||||
var updateCmd = &cobra.Command{
|
||||
Use: "update",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
@@ -51,6 +59,10 @@ var updateUserName = &cobra.Command{
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("SudoHelper", map[string]interface{}{"cmd": "sudo 1pctl update username"}))
|
||||
return nil
|
||||
}
|
||||
if isEnterprise() && len(strings.TrimSpace(updateUserNameFlag)) == 0 {
|
||||
fmt.Println(i18n.GetMsgByKey("UsernameNeed"))
|
||||
return nil
|
||||
}
|
||||
username()
|
||||
return nil
|
||||
},
|
||||
@@ -64,10 +76,51 @@ var updatePassword = &cobra.Command{
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("SudoHelper", map[string]interface{}{"cmd": "sudo 1pctl update password"}))
|
||||
return nil
|
||||
}
|
||||
if isEnterprise() && len(strings.TrimSpace(updatePasswordUserName)) == 0 {
|
||||
fmt.Println(i18n.GetMsgByKey("UsernameNeed"))
|
||||
return nil
|
||||
}
|
||||
password()
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
type serverConfig struct {
|
||||
Base struct {
|
||||
IsEnterprise bool `yaml:"is_enterprise"`
|
||||
} `yaml:"base"`
|
||||
}
|
||||
|
||||
func isEnterprise() bool {
|
||||
var config serverConfig
|
||||
if err := yaml.Unmarshal(conf.AppYaml, &config); err != nil {
|
||||
return false
|
||||
}
|
||||
return config.Base.IsEnterprise
|
||||
}
|
||||
|
||||
func updateEnterprisePassword(db *gorm.DB, username, password string) error {
|
||||
result := db.Exec("UPDATE users SET password = ? WHERE name = ?", password, username)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return fmt.Errorf("user %s not found", username)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func updateEnterpriseUserName(db *gorm.DB, username, newUsername string) error {
|
||||
result := db.Exec("UPDATE users SET name = ? WHERE name = ?", newUsername, username)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return fmt.Errorf("user %s not found", username)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var updatePort = &cobra.Command{
|
||||
Use: "port",
|
||||
Short: i18n.GetMsgByKeyForCmd("UpdatePort"),
|
||||
@@ -132,7 +185,17 @@ func username() {
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("DBConnErr", map[string]interface{}{"err": err.Error()}))
|
||||
return
|
||||
}
|
||||
if err := setSettingByKey(db, "UserName", newUsername); err != nil {
|
||||
if isEnterprise() {
|
||||
enterpriseDB, err := loadDBConn("enterprise.db")
|
||||
if err != nil {
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("DBConnErr", map[string]interface{}{"err": err.Error()}))
|
||||
return
|
||||
}
|
||||
if err := updateEnterpriseUserName(enterpriseDB, strings.TrimSpace(updateUserNameFlag), newUsername); err != nil {
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("UpdateUserErr", map[string]interface{}{"err": err.Error()}))
|
||||
return
|
||||
}
|
||||
} else if err := setSettingByKey(db, "UserName", newUsername); err != nil {
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("UpdateUserErr", map[string]interface{}{"err": err.Error()}))
|
||||
return
|
||||
}
|
||||
@@ -198,11 +261,24 @@ func password() {
|
||||
} else {
|
||||
p = newPassword
|
||||
}
|
||||
if err := setSettingByKey(db, "Password", p); err != nil {
|
||||
if isEnterprise() {
|
||||
enterpriseDB, err := loadDBConn("enterprise.db")
|
||||
if err != nil {
|
||||
fmt.Println("\n" + i18n.GetMsgWithMapForCmd("DBConnErr", map[string]interface{}{"err": err.Error()}))
|
||||
return
|
||||
}
|
||||
if err := updateEnterprisePassword(enterpriseDB, strings.TrimSpace(updatePasswordUserName), p); err != nil {
|
||||
fmt.Println("\n", i18n.GetMsgWithMapForCmd("UpdatePortErr", map[string]interface{}{"err": err.Error()}))
|
||||
return
|
||||
}
|
||||
} else if err := setSettingByKey(db, "Password", p); err != nil {
|
||||
fmt.Println("\n", i18n.GetMsgWithMapForCmd("UpdatePortErr", map[string]interface{}{"err": err.Error()}))
|
||||
return
|
||||
}
|
||||
username := getSettingByKey(db, "UserName")
|
||||
if isEnterprise() {
|
||||
username = strings.TrimSpace(updatePasswordUserName)
|
||||
}
|
||||
|
||||
fmt.Println("\n" + i18n.GetMsgByKeyForCmd("UpdateSuccessful"))
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("UpdateUserResult", map[string]interface{}{"name": username}))
|
||||
|
||||
@@ -2,12 +2,14 @@ package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/1Panel-dev/1Panel/core/constant"
|
||||
"github.com/1Panel-dev/1Panel/core/global"
|
||||
"github.com/1Panel-dev/1Panel/core/i18n"
|
||||
"github.com/1Panel-dev/1Panel/core/utils/encrypt"
|
||||
"github.com/spf13/cobra"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -24,22 +26,43 @@ var userinfoCmd = &cobra.Command{
|
||||
}
|
||||
db, err := loadDBConn("core.db")
|
||||
if err != nil {
|
||||
return fmt.Errorf("init my db conn failed, err: %v \n", err)
|
||||
return fmt.Errorf("init my db conn failed, err: %v", err)
|
||||
}
|
||||
agentDB, err := loadDBConn("agent.db")
|
||||
if err != nil {
|
||||
return fmt.Errorf("init my agent db conn failed, err: %v \n", err)
|
||||
return fmt.Errorf("init my agent db conn failed, err: %v", err)
|
||||
}
|
||||
user := getSettingByKey(db, "UserName")
|
||||
isEnterpriseVersion := isEnterprise()
|
||||
showInitialPassword := shouldShowInitialPassword(db)
|
||||
encryptSetting := getSettingByKey(db, "EncryptKey")
|
||||
user := ""
|
||||
pass := "********"
|
||||
if isDefault(db) {
|
||||
encryptSetting := getSettingByKey(db, "EncryptKey")
|
||||
pass = getSettingByKey(db, "Password")
|
||||
if isEnterpriseVersion {
|
||||
enterpriseDB, err := loadDBConn("enterprise.db")
|
||||
if err != nil {
|
||||
return fmt.Errorf("init my enterprise db conn failed, err: %v", err)
|
||||
}
|
||||
enterpriseUser, enterprisePassword, err := loadEnterpriseSuperAdminInfo(enterpriseDB)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
user = enterpriseUser
|
||||
if showInitialPassword {
|
||||
pass = enterprisePassword
|
||||
}
|
||||
} else {
|
||||
user = getSettingByKey(db, "UserName")
|
||||
if showInitialPassword {
|
||||
pass = getSettingByKey(db, "Password")
|
||||
}
|
||||
}
|
||||
if showInitialPassword {
|
||||
if len(encryptSetting) == 16 {
|
||||
global.CONF.Base.EncryptKey = encryptSetting
|
||||
pass, _ = encrypt.StringDecrypt(pass)
|
||||
}
|
||||
}
|
||||
|
||||
port := getSettingByKey(db, "ServerPort")
|
||||
ssl := getSettingByKey(db, "SSL")
|
||||
entrance := getSettingByKey(db, "SecurityEntrance")
|
||||
@@ -60,7 +83,26 @@ var userinfoCmd = &cobra.Command{
|
||||
fmt.Println(i18n.GetMsgByKeyForCmd("UserInfoAddr") + fmt.Sprintf("%s://%s:%s/%s ", protocol, address, port, entrance))
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("UpdateUserResult", map[string]interface{}{"name": user}))
|
||||
fmt.Println(i18n.GetMsgWithMapForCmd("UpdatePasswordResult", map[string]interface{}{"name": pass}))
|
||||
fmt.Println(i18n.GetMsgByKeyForCmd("UserInfoPassHelp") + "1pctl update password")
|
||||
updatePasswordCmd := "1pctl update password"
|
||||
if isEnterpriseVersion && strings.TrimSpace(user) != "" {
|
||||
updatePasswordCmd += " --username " + user
|
||||
}
|
||||
fmt.Println(i18n.GetMsgByKeyForCmd("UserInfoPassHelp") + updatePasswordCmd)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func loadEnterpriseSuperAdminInfo(db *gorm.DB) (string, string, error) {
|
||||
var user struct {
|
||||
Name string
|
||||
Password string
|
||||
}
|
||||
result := db.Raw("SELECT name, password FROM users WHERE is_super_admin = ? ORDER BY id LIMIT 1", true).Scan(&user)
|
||||
if result.Error != nil {
|
||||
return "", "", result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return "", "", fmt.Errorf("super admin user not found")
|
||||
}
|
||||
return user.Name, user.Password, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user