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.

110 lines
3.1 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 spark.Request;
  10. import spark.Response;
  11. import static spark.Spark.*;
  12. public class AccessController
  13. {
  14. private final ObjectMapper objectMapper = new ObjectMapper();
  15. private final AccessService service;
  16. public Response deletePlayer(Request request, Response response)
  17. {
  18. final UserId userId = UserId.of(request.params(":player_id"));
  19. final AccessToken token = request.session().attribute("userId");
  20. if (service.deleteAccount(userId, token))
  21. {
  22. response.status(200);
  23. }
  24. else
  25. {
  26. response.status(400);
  27. }
  28. return response;
  29. }
  30. public Object logout(Request request, Response response)
  31. {
  32. final String token = request.headers(Utils.AUTHENTICATION_HEADER);
  33. if (service.logout(token))
  34. {
  35. response.status(200);
  36. }
  37. else
  38. {
  39. response.status(400);
  40. }
  41. return response;
  42. }
  43. public AccessController(final AccessService service)
  44. {
  45. this.service = service;
  46. before("/*",
  47. (req, res) ->
  48. {
  49. final String path = req.pathInfo();
  50. final String token = req.headers(Utils.AUTHENTICATION_HEADER);
  51. final AccessToken accessToken = service.before(path, token);
  52. req.session().attribute("userId",
  53. accessToken);
  54. });
  55. post("/accounts/registrate",
  56. (request, response) ->
  57. {
  58. final RegistrateRequest message =
  59. objectMapper.readValue(request.body(), RegistrateRequest.class);
  60. if (service.createPlayer(message))
  61. {
  62. response.status(201);
  63. }
  64. else
  65. {
  66. response.status(400);
  67. }
  68. return response;
  69. }
  70. );
  71. post("/accounts/login",
  72. (request, response) ->
  73. {
  74. final String header = request.headers(Utils.AUTHENTICATION_HEADER);
  75. final LoginRequest login = service.authorization(header);
  76. if (login == null)
  77. {
  78. response.status(401);
  79. }
  80. else
  81. {
  82. response.status(200);
  83. response.type("application/json");
  84. response.body(objectMapper.writeValueAsString(login));
  85. }
  86. return response;
  87. });
  88. post("/accounts/logout",this::logout);
  89. delete("/accounts/:player_id", this::deletePlayer);
  90. }
  91. }