autologin.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package autologin
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. user "imuslab.com/arozos/mod/user"
  6. "imuslab.com/arozos/mod/utils"
  7. )
  8. type AutoLoginHandler struct {
  9. userHandler *user.UserHandler
  10. }
  11. func NewAutoLoginHandler(uh *user.UserHandler) *AutoLoginHandler {
  12. return &AutoLoginHandler{
  13. userHandler: uh,
  14. }
  15. }
  16. //List the token given the username
  17. func (a *AutoLoginHandler) HandleUserTokensListing(w http.ResponseWriter, r *http.Request) {
  18. username, err := utils.Mv(r, "username", false)
  19. if err != nil {
  20. utils.SendErrorResponse(w, "Invalid username")
  21. return
  22. }
  23. if !a.userHandler.GetAuthAgent().UserExists(username) {
  24. utils.SendErrorResponse(w, "User not exists!")
  25. return
  26. }
  27. tokens := a.userHandler.GetAuthAgent().GetTokensFromUsername(username)
  28. tokensOnly := []string{}
  29. for _, token := range tokens {
  30. tokensOnly = append(tokensOnly, token.Token)
  31. }
  32. jsonString, _ := json.Marshal(tokensOnly)
  33. utils.SendJSONResponse(w, string(jsonString))
  34. }
  35. //Handle User Token Creation, require username. Please use adminrouter to handle this function
  36. func (a *AutoLoginHandler) HandleUserTokenCreation(w http.ResponseWriter, r *http.Request) {
  37. username, err := utils.Mv(r, "username", false)
  38. if err != nil {
  39. utils.SendErrorResponse(w, "Invalid username")
  40. return
  41. }
  42. //Check if user exists
  43. authAgent := a.userHandler.GetAuthAgent()
  44. if !authAgent.UserExists(username) {
  45. utils.SendErrorResponse(w, "User not exists!")
  46. return
  47. }
  48. //Generate and send the token to client
  49. token := authAgent.NewAutologinToken(username)
  50. jsonString, _ := json.Marshal(token)
  51. utils.SendJSONResponse(w, string(jsonString))
  52. }
  53. //Remove the user token given the token
  54. func (a *AutoLoginHandler) HandleUserTokenRemoval(w http.ResponseWriter, r *http.Request) {
  55. token, err := utils.Mv(r, "token", false)
  56. if err != nil {
  57. utils.SendErrorResponse(w, "Invalid username")
  58. return
  59. }
  60. authAgent := a.userHandler.GetAuthAgent()
  61. authAgent.RemoveAutologinToken(token)
  62. utils.SendOK(w)
  63. }