You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.2 KiB

  1. package de.fd.fh.server.access.web;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import de.fd.fh.server.access.AccessService;
  4. import de.fd.fh.server.access.AccessToken;
  5. import de.fd.fh.server.user.UserId;
  6. import de.fd.fh.shared.Utils;
  7. import de.fd.fh.shared.network.messages.LoginRequest;
  8. import de.fd.fh.shared.network.messages.RegistrateRequest;
  9. import static spark.Spark.*;
  10. public class AccessController
  11. {
  12. private final ObjectMapper objectMapper = new ObjectMapper();
  13. public AccessController(final AccessService service)
  14. {
  15. before("/*",
  16. (req, res) ->
  17. {
  18. final String path = req.pathInfo();
  19. final String token = req.headers(Utils.AUTHENTICATION_HEADER);
  20. final AccessToken accessToken = service.before(path, token);
  21. req.session().attribute("userId",
  22. accessToken);
  23. });
  24. post("/accounts/registrate",
  25. (request, response) ->
  26. {
  27. final RegistrateRequest message =
  28. objectMapper.readValue(request.body(), RegistrateRequest.class);
  29. if (service.createPlayer(message))
  30. {
  31. response.status(201);
  32. }
  33. else
  34. {
  35. response.status(400);
  36. }
  37. return response;
  38. }
  39. );
  40. post("/accounts/login",
  41. (request, response) ->
  42. {
  43. final String header = request.headers(Utils.AUTHENTICATION_HEADER);
  44. final LoginRequest login = service.authorization(header);
  45. if (login == null)
  46. {
  47. response.status(401);
  48. }
  49. else
  50. {
  51. response.status(200);
  52. response.type("application/json");
  53. response.body(objectMapper.writeValueAsString(login));
  54. }
  55. return response;
  56. });
  57. post("/accounts/logout",
  58. (request, response) ->
  59. {
  60. final String token = request.headers(Utils.AUTHENTICATION_HEADER);
  61. if (service.logout(token))
  62. {
  63. response.status(200);
  64. }
  65. else
  66. {
  67. response.status(400);
  68. }
  69. return response;
  70. });
  71. delete("/accounts/:player_id",
  72. (request, response) ->
  73. {
  74. final UserId userId = UserId.of(request.params(":player_id"));
  75. final AccessToken token = request.session().attribute("userId");
  76. if (service.deleteAccount(userId, token))
  77. {
  78. response.status(200);
  79. }
  80. else
  81. {
  82. response.status(400);
  83. }
  84. return response;
  85. });
  86. }
  87. }