register.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "path/filepath"
  7. reg "imuslab.com/arozos/mod/auth/register"
  8. fs "imuslab.com/arozos/mod/filesystem"
  9. prout "imuslab.com/arozos/mod/prouter"
  10. "imuslab.com/arozos/mod/utils"
  11. )
  12. var (
  13. registerHandler *reg.RegisterHandler
  14. )
  15. func RegisterSystemInit() {
  16. //Register the endpoints for public registration
  17. imgsrc := filepath.Join(vendorResRoot, "vendor_icon.png")
  18. if !fs.FileExists(imgsrc) {
  19. imgsrc = "./web/img/public/vendor_icon.png"
  20. }
  21. rh := reg.NewRegisterHandler(sysdb, authAgent, permissionHandler, reg.RegisterOptions{
  22. Hostname: *host_name,
  23. VendorIcon: imgsrc,
  24. })
  25. registerHandler = rh
  26. //Set the allow registry states
  27. if *allow_public_registry {
  28. registerHandler.AllowRegistry = true
  29. } else {
  30. registerHandler.AllowRegistry = false
  31. }
  32. http.HandleFunc("/public/register/register.system", registerHandler.HandleRegisterInterface)
  33. http.HandleFunc("/public/register/handleRegister.system", registerHandler.HandleRegisterRequest)
  34. http.HandleFunc("/public/register/checkPublicRegister", registerHandler.HandleRegisterCheck)
  35. //General user functions
  36. router := prout.NewModuleRouter(prout.RouterOption{
  37. AdminOnly: false,
  38. UserHandler: userHandler,
  39. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  40. utils.SendErrorResponse(w, "Permission Denied")
  41. },
  42. })
  43. router.HandleFunc("/system/register/email", registerHandler.HandleEmailChange)
  44. //Register settings
  45. registerSetting(settingModule{
  46. Name: "Public Registry",
  47. Desc: "Allow public users to create account in this host",
  48. IconPath: "SystemAO/users/img/small_icon.png",
  49. Group: "Users",
  50. StartDir: "SystemAO/users/pubreg.html",
  51. RequireAdmin: true,
  52. })
  53. //Register Setting Interface for setting interfaces
  54. adminrouter := prout.NewModuleRouter(prout.RouterOption{
  55. ModuleName: "System Setting",
  56. AdminOnly: true,
  57. UserHandler: userHandler,
  58. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  59. utils.SendErrorResponse(w, "Permission Denied")
  60. },
  61. })
  62. //Handle updates of the default group
  63. adminrouter.HandleFunc("/system/register/setDefaultGroup", register_handleSetDefaultGroup)
  64. //Handle if the current handler allow registry
  65. adminrouter.HandleFunc("/system/register/getAllowRegistry", register_handleGetAllowRegistry)
  66. //Handle toggle
  67. adminrouter.HandleFunc("/system/register/setAllowRegistry", register_handleToggleRegistry)
  68. //Get a list of email registered in the system
  69. adminrouter.HandleFunc("/system/register/listUserEmails", register_handleEmailListing)
  70. //Clear User record that has no longer use this service
  71. adminrouter.HandleFunc("/system/register/cleanUserRegisterInfo", register_handleRegisterCleaning)
  72. }
  73. func register_handleRegisterCleaning(w http.ResponseWriter, r *http.Request) {
  74. //Get all user emails from the registerHandler
  75. registerHandler.CleanRegisters()
  76. utils.SendOK(w)
  77. }
  78. func register_handleEmailListing(w http.ResponseWriter, r *http.Request) {
  79. //Get all user emails from the registerHandler
  80. userRegisterInfos := registerHandler.ListAllUserEmails()
  81. useCSV, _ := utils.GetPara(r, "csv")
  82. if useCSV == "true" {
  83. //Prase as csv
  84. csvString := "Username,Email,Still Registered\n"
  85. for _, v := range userRegisterInfos {
  86. registered := "false"
  87. s, _ := v[2].(bool)
  88. if s == true {
  89. registered = "true"
  90. }
  91. csvString += fmt.Sprintf("%v", v[0]) + "," + fmt.Sprintf("%v", v[1]) + "," + registered + "\n"
  92. }
  93. w.Header().Set("Content-Disposition", "attachment; filename=registerInfo.csv")
  94. w.Header().Set("Content-Type", "text/csv")
  95. w.Write([]byte(csvString))
  96. } else {
  97. //Prase as json
  98. jsonString, _ := json.Marshal(userRegisterInfos)
  99. utils.SendJSONResponse(w, string(jsonString))
  100. }
  101. }
  102. func register_handleSetDefaultGroup(w http.ResponseWriter, r *http.Request) {
  103. getDefaultGroup, _ := utils.PostPara(r, "get")
  104. if getDefaultGroup == "true" {
  105. jsonString, _ := json.Marshal(registerHandler.DefaultUserGroup)
  106. utils.SendJSONResponse(w, string(jsonString))
  107. return
  108. }
  109. newDefaultGroup, err := utils.PostPara(r, "defaultGroup")
  110. if err != nil {
  111. utils.SendErrorResponse(w, "defaultGroup not defined")
  112. return
  113. }
  114. err = registerHandler.SetDefaultUserGroup(newDefaultGroup)
  115. if err != nil {
  116. utils.SendErrorResponse(w, err.Error())
  117. return
  118. }
  119. utils.SendOK(w)
  120. }
  121. func register_handleGetAllowRegistry(w http.ResponseWriter, r *http.Request) {
  122. jsonString, _ := json.Marshal(registerHandler.AllowRegistry)
  123. utils.SendJSONResponse(w, string(jsonString))
  124. }
  125. func register_handleToggleRegistry(w http.ResponseWriter, r *http.Request) {
  126. allowReg, err := utils.PostPara(r, "allow")
  127. if err != nil {
  128. allowReg = "false"
  129. }
  130. registerHandler.SetAllowRegistry(allowReg == "true")
  131. utils.SendOK(w)
  132. }