diff --git a/api/controllers/startup.go b/api/controllers/startup.go new file mode 100644 index 0000000..749dab7 --- /dev/null +++ b/api/controllers/startup.go @@ -0,0 +1,67 @@ +package controllers + +import ( + "github.com/gofiber/fiber/v2" + "os" + "os/user" + "strings" + + "github.com/Redume/EveryNasa/api/utils" + "github.com/Redume/EveryNasa/functions" +) + +var Startup = func(c *fiber.Ctx) error { + startup := c.FormValue("startup") + if startup == "" { + utils.Respond(c, utils.Message(false, "All fields are required.")) + return nil + } + + if startup == "1" { + SetStartup(c) + } else if startup == "0" { + RemoveStartup(c) + } else { + utils.Respond(c, utils.Message(false, "Invalid field.")) + return nil + } + + return nil +} + +var SetStartup = func(c *fiber.Ctx) error { + u, err := user.Current() + if err != nil { + functions.Logger(err.Error()) + } + + dir, err := os.Getwd() + if err != nil { + functions.Logger(err.Error()) + } + + dir = strings.Replace(dir, "\\", "\\\\", -1) + "\\EveryNasa.exe" + + err = functions.CreateLnk(dir, strings.Replace(u.HomeDir, "\\", "\\\\", -1)+"\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\EveryNasa.lnk") + if err != nil { + functions.Logger(err.Error()) + } + + utils.Respond(c, utils.Message(true, "The settings have been applied successfully.")) + return nil +} + +var RemoveStartup = func(c *fiber.Ctx) error { + u, err := user.Current() + if err != nil { + functions.Logger(err.Error()) + } + + err = os.Remove(strings.Replace(u.HomeDir, "\\", "\\\\", -1) + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\EveryNasa.lnk") + if err != nil { + functions.Logger(err.Error()) + } + + utils.Respond(c, utils.Message(true, "The settings have been applied successfully.")) + return nil +} diff --git a/functions/createLnk.go b/functions/createLnk.go new file mode 100644 index 0000000..1ba2ed0 --- /dev/null +++ b/functions/createLnk.go @@ -0,0 +1,55 @@ +package functions + +import ( + "os" + + "github.com/go-ole/go-ole" + "github.com/go-ole/go-ole/oleutil" +) + +func CreateLnk(src, dst string) error { + err := ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_SPEED_OVER_MEMORY) + if err != nil { + Logger(err.Error()) + } + + oleShellObject, err := oleutil.CreateObject("WScript.Shell") + if err != nil { + Logger(err.Error()) + } + + defer oleShellObject.Release() + wshell, err := oleShellObject.QueryInterface(ole.IID_IDispatch) + if err != nil { + Logger(err.Error()) + } + + defer wshell.Release() + cs, err := oleutil.CallMethod(wshell, "CreateShortcut", dst) + if err != nil { + Logger(err.Error()) + } + + idispatch := cs.ToIDispatch() + _, err = oleutil.PutProperty(idispatch, "TargetPath", src) + if err != nil { + Logger(err.Error()) + } + + dir, err := os.Getwd() + if err != nil { + Logger(err.Error()) + } + + _, err = oleutil.PutProperty(idispatch, "WorkingDirectory", dir) + if err != nil { + Logger(err.Error()) + } + + _, err = oleutil.CallMethod(idispatch, "Save") + if err != nil { + Logger(err.Error()) + } + + return nil +} diff --git a/main.go b/main.go index 2f7404a..a33d3d0 100644 --- a/main.go +++ b/main.go @@ -48,6 +48,7 @@ func main() { update := api.Group("/update") get := api.Group("/get") + create := api.Group("/create") update.Post("/settings", func(c *fiber.Ctx) error { return controllers.SettingsUpdate(c) @@ -55,6 +56,13 @@ func main() { update.Post("/wallpaper", func(c *fiber.Ctx) error { return controllers.WallpaperUpdate(c) }) + update.Post("/startup", func(c *fiber.Ctx) error { + return controllers.Startup(c) + }) + + create.Post("/api/create/label", func(c *fiber.Ctx) error { + return controllers.CreateLabel(c) + }) get.Get("/settings", func(c *fiber.Ctx) error { return controllers.SettingsGet(c)