register.go 4.6 KB

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