142 lines
3.4 KiB
Go
142 lines
3.4 KiB
Go
/*
|
|
Copyright 2022 AmidaWare LLC.
|
|
|
|
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
|
You may only use the Licensed Software in accordance with the License.
|
|
A copy of the License is available at:
|
|
|
|
https://license.tacticalrmm.com
|
|
|
|
*/
|
|
|
|
package agent
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/amidaware/rmmagent/shared"
|
|
"github.com/gonutz/w32/v2"
|
|
"golang.org/x/sys/windows/registry"
|
|
)
|
|
|
|
func createAgentConfig(baseurl, agentid, apiurl, token, agentpk, cert, proxy, meshdir string) {
|
|
k, _, err := registry.CreateKey(registry.LOCAL_MACHINE, `SOFTWARE\TacticalRMM`, registry.ALL_ACCESS)
|
|
if shared.TEST {
|
|
err = nil
|
|
k, _, err := registry.OpenKey(registry.CURRENT_USER, `SOFTWARE\TacticalRMM`, registry.ALL_ACCESS)
|
|
}
|
|
|
|
if err != nil {
|
|
log.Fatalln("Error creating registry key:", err)
|
|
}
|
|
defer k.Close()
|
|
|
|
err = k.SetStringValue("BaseURL", baseurl)
|
|
if err != nil {
|
|
log.Fatalln("Error creating BaseURL registry key:", err)
|
|
}
|
|
|
|
err = k.SetStringValue("AgentID", agentid)
|
|
if err != nil {
|
|
log.Fatalln("Error creating AgentID registry key:", err)
|
|
}
|
|
|
|
err = k.SetStringValue("ApiURL", apiurl)
|
|
if err != nil {
|
|
log.Fatalln("Error creating ApiURL registry key:", err)
|
|
}
|
|
|
|
err = k.SetStringValue("Token", token)
|
|
if err != nil {
|
|
log.Fatalln("Error creating Token registry key:", err)
|
|
}
|
|
|
|
err = k.SetStringValue("AgentPK", agentpk)
|
|
if err != nil {
|
|
log.Fatalln("Error creating AgentPK registry key:", err)
|
|
}
|
|
|
|
if len(cert) > 0 {
|
|
err = k.SetStringValue("Cert", cert)
|
|
if err != nil {
|
|
log.Fatalln("Error creating Cert registry key:", err)
|
|
}
|
|
}
|
|
|
|
if len(proxy) > 0 {
|
|
err = k.SetStringValue("Proxy", proxy)
|
|
if err != nil {
|
|
log.Fatalln("Error creating Proxy registry key:", err)
|
|
}
|
|
}
|
|
|
|
if len(meshdir) > 0 {
|
|
err = k.SetStringValue("MeshDir", meshdir)
|
|
if err != nil {
|
|
log.Fatalln("Error creating MeshDir registry key:", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (a *Agent) checkExistingAndRemove(silent bool) {
|
|
hasReg := false
|
|
_, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\TacticalRMM`, registry.ALL_ACCESS)
|
|
if shared.TEST {
|
|
err = nil
|
|
_, err = registry.OpenKey(registry.CURRENT_USER, `SOFTWARE\TacticalRMM`, registry.ALL_ACCESS)
|
|
}
|
|
|
|
if err == nil {
|
|
hasReg = true
|
|
}
|
|
if hasReg {
|
|
tacUninst := filepath.Join(a.ProgramDir, a.GetUninstallExe())
|
|
tacUninstArgs := [2]string{tacUninst, "/VERYSILENT"}
|
|
|
|
window := w32.GetForegroundWindow()
|
|
if !silent && window != 0 {
|
|
var handle w32.HWND
|
|
msg := "Existing installation found\nClick OK to remove, then re-run the installer.\nClick Cancel to abort."
|
|
action := w32.MessageBox(handle, msg, "Tactical RMM", w32.MB_OKCANCEL|w32.MB_ICONWARNING)
|
|
if action == w32.IDOK {
|
|
a.AgentUninstall("foo")
|
|
}
|
|
} else {
|
|
fmt.Println("Existing installation found and must be removed before attempting to reinstall.")
|
|
fmt.Println("Run the following command to uninstall, and then re-run this installer.")
|
|
fmt.Printf(`"%s" %s `, tacUninstArgs[0], tacUninstArgs[1])
|
|
}
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
|
|
func (a *Agent) installerMsg(msg, alert string, silent bool) {
|
|
window := w32.GetForegroundWindow()
|
|
if !silent && window != 0 {
|
|
var (
|
|
handle w32.HWND
|
|
flags uint
|
|
)
|
|
|
|
switch alert {
|
|
case "info":
|
|
flags = w32.MB_OK | w32.MB_ICONINFORMATION
|
|
case "error":
|
|
flags = w32.MB_OK | w32.MB_ICONERROR
|
|
default:
|
|
flags = w32.MB_OK | w32.MB_ICONINFORMATION
|
|
}
|
|
|
|
w32.MessageBox(handle, msg, "Tactical RMM", flags)
|
|
} else {
|
|
fmt.Println(msg)
|
|
}
|
|
|
|
if alert == "error" {
|
|
a.Logger.Fatalln(msg)
|
|
}
|
|
}
|