package models import ( "time" "lokideploy/pkg/crypto" ) // SSHAuthConfig SSH认证配置(定义在models包避免循环导入) type SSHAuthConfig struct { Host string Port int User string Password string PrivateKey string KeyPhrase string } // Host 主机模型,敏感字段(Password/PrivateKey/KeyPhrase)加密存储 // 加密格式: ENC: type Host struct { ID uint `json:"id"` Name string `json:"name"` HostIP string `json:"hostIP"` Port int `json:"port"` User string `json:"user"` AuthType string `json:"authType"` Password string `json:"password"` // 加密存储(ENC:前缀) PrivateKey string `json:"privateKey"` // 加密存储(ENC:前缀) KeyPhrase string `json:"keyPhrase"` // 加密存储(ENC:前缀) OS string `json:"os"` Arch string `json:"arch"` Status string `json:"status"` Labels string `json:"labels"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } func (h *Host) Sanitized() map[string]interface{} { return map[string]interface{}{ "id": h.ID, "name": h.Name, "hostIP": h.HostIP, "port": h.Port, "user": h.User, "authType": h.AuthType, "os": h.OS, "arch": h.Arch, "status": h.Status, "labels": h.Labels, "createdAt": h.CreatedAt, "updatedAt": h.UpdatedAt, } } // DecryptPassword 解密主机密码 func (h *Host) DecryptPassword() string { return crypto.DecryptField(h.Password) } // DecryptPrivateKey 解密SSH私钥 func (h *Host) DecryptPrivateKey() string { return crypto.DecryptField(h.PrivateKey) } // DecryptKeyPhrase 解密私钥密码 func (h *Host) DecryptKeyPhrase() string { return crypto.DecryptField(h.KeyPhrase) } // IsPasswordEncrypted 检查密码是否已加密 func (h *Host) IsPasswordEncrypted() bool { return crypto.IsEncryptedField(h.Password) } // IsPrivateKeyEncrypted 检查私钥是否已加密 func (h *Host) IsPrivateKeyEncrypted() bool { return crypto.IsEncryptedField(h.PrivateKey) } // EncryptAndSetPassword 加密并设置密码 func (h *Host) EncryptAndSetPassword(password string) error { enc, err := crypto.EncryptField(password) if err != nil { return err } h.Password = enc return nil } // EncryptAndSetPrivateKey 加密并设置私钥 func (h *Host) EncryptAndSetPrivateKey(privateKey string) error { enc, err := crypto.EncryptField(privateKey) if err != nil { return err } h.PrivateKey = enc return nil } // EncryptAndSetKeyPhrase 加密并设置私钥密码 func (h *Host) EncryptAndSetKeyPhrase(keyPhrase string) error { enc, err := crypto.EncryptField(keyPhrase) if err != nil { return err } h.KeyPhrase = enc return nil } // GetSSHAuthConfig 获取SSH认证配置(自动解密敏感字段) func (h *Host) GetSSHAuthConfig() *SSHAuthConfig { return &SSHAuthConfig{ Host: h.HostIP, Port: h.Port, User: h.User, Password: h.DecryptPassword(), PrivateKey: h.DecryptPrivateKey(), KeyPhrase: h.DecryptKeyPhrase(), } }