system.power.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package main
  2. import (
  3. "log"
  4. "net/http"
  5. "os/exec"
  6. "runtime"
  7. )
  8. /*
  9. Power Management Module
  10. This module will handle the power condition of the system, including poweroff and restart
  11. */
  12. func system_power_init() {
  13. http.HandleFunc("/system/power/shutdown", system_power_poweroff)
  14. http.HandleFunc("/system/power/restart", system_power_restart)
  15. }
  16. func system_power_poweroff(w http.ResponseWriter, r *http.Request) {
  17. isAdmin := system_permission_checkUserIsAdmin(w, r)
  18. if !isAdmin {
  19. sendErrorResponse(w, "Permission Denied")
  20. return
  21. }
  22. if !sudo_mode {
  23. sendErrorResponse(w, "Sudo mode required")
  24. return
  25. }
  26. if runtime.GOOS == "windows" {
  27. //Only allow Linux to do power operation
  28. cmd := exec.Command("shutdown", "-s", "-t", "20")
  29. out, err := cmd.CombinedOutput()
  30. if err != nil {
  31. log.Println(string(out))
  32. sendErrorResponse(w, string(out))
  33. }
  34. log.Println(string(out))
  35. }
  36. if runtime.GOOS == "linux" {
  37. //Only allow Linux to do power operation
  38. cmd := exec.Command("/sbin/shutdown")
  39. out, err := cmd.CombinedOutput()
  40. if err != nil {
  41. log.Println(string(out))
  42. sendErrorResponse(w, string(out))
  43. }
  44. log.Println(string(out))
  45. }
  46. if runtime.GOOS == "darwin" {
  47. //Only allow Linux to do power operation
  48. cmd := exec.Command("sudo", "shutdown", "-h", "+1")
  49. out, err := cmd.CombinedOutput()
  50. if err != nil {
  51. log.Println(string(out))
  52. sendErrorResponse(w, string(out))
  53. }
  54. log.Println(string(out))
  55. }
  56. sendOK(w)
  57. }
  58. func system_power_restart(w http.ResponseWriter, r *http.Request) {
  59. isAdmin := system_permission_checkUserIsAdmin(w, r)
  60. if !isAdmin {
  61. sendErrorResponse(w, "Permission Denied")
  62. return
  63. }
  64. if !sudo_mode {
  65. sendErrorResponse(w, "Sudo mode required")
  66. return
  67. }
  68. if runtime.GOOS == "windows" {
  69. //Only allow Linux to do power operation
  70. cmd := exec.Command("shutdown", "-r", "-t", "20")
  71. out, err := cmd.CombinedOutput()
  72. if err != nil {
  73. log.Println(string(out))
  74. sendErrorResponse(w, string(out))
  75. }
  76. log.Println(string(out))
  77. }
  78. if runtime.GOOS == "linux" {
  79. //Only allow Linux to do power operation
  80. cmd := exec.Command("systemctl", "reboot")
  81. out, err := cmd.CombinedOutput()
  82. if err != nil {
  83. log.Println(string(out))
  84. sendErrorResponse(w, string(out))
  85. }
  86. log.Println(string(out))
  87. }
  88. if runtime.GOOS == "darwin" {
  89. //Only allow Linux to do power operation
  90. cmd := exec.Command("shutdown", "-r", "+1")
  91. out, err := cmd.CombinedOutput()
  92. if err != nil {
  93. log.Println(string(out))
  94. sendErrorResponse(w, string(out))
  95. }
  96. log.Println(string(out))
  97. }
  98. sendOK(w)
  99. }