register.go 4.4 KB

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