PageRenderTime 58ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/app/com/atlassian/connect/play/java/token/PageTokenValidatorAction.java

https://bitbucket.org/awei/ac-play-java
Java | 60 lines | 50 code | 8 blank | 2 comment | 5 complexity | e9f02b7b18adc9d77cf6a476e3602fe5 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.connect.play.java.token;
  2. import com.atlassian.connect.play.java.AC;
  3. import com.atlassian.fugue.Option;
  4. import org.apache.commons.lang3.StringUtils;
  5. import play.mvc.Action;
  6. import play.mvc.Http;
  7. import play.mvc.Result;
  8. import static com.atlassian.connect.play.java.Constants.AC_USER_ID_PARAM;
  9. import static com.atlassian.fugue.Option.option;
  10. public final class PageTokenValidatorAction extends Action<CheckValidToken>
  11. {
  12. public static final String HEADER_PREFIX = "X-";
  13. public static final String TOKEN_KEY = "acpt";
  14. @Override
  15. public Result call(final Http.Context context) throws Throwable
  16. {
  17. final boolean allowInsecurePolling = this.configuration.allowInsecurePolling();
  18. final Option<String> token = extractTokenDetails(context.request());
  19. if (token.isEmpty())
  20. {
  21. return unauthorized("Unauthorised: It appears your session has expired. Please reload the page.");
  22. }
  23. final Option<Token> decryptedToken = AC.validateToken(token.get(), allowInsecurePolling);
  24. if (decryptedToken.isEmpty())
  25. {
  26. return unauthorized("Unauthorised: It appears your session has expired. Please reload the page.");
  27. }
  28. AC.setAcHost(decryptedToken.get().getAcHost());
  29. final Option<String> user = decryptedToken.get().getUser();
  30. if (user.isDefined())
  31. {
  32. context.args.put(AC_USER_ID_PARAM, user.get());
  33. }
  34. //valid request so lets refresh the token with a new timestamp and add it to the response headers
  35. //so clients can update their tokens on ajax responses!
  36. AC.refreshToken(allowInsecurePolling);
  37. if (allowInsecurePolling)
  38. {
  39. context.response().setHeader(HEADER_PREFIX + TOKEN_KEY, AC.getToken().get());
  40. }
  41. return delegate.call(context);
  42. }
  43. private Option<String> extractTokenDetails(final Http.Request request)
  44. {
  45. String token = request.getHeader(HEADER_PREFIX + TOKEN_KEY);
  46. if (StringUtils.isBlank(token))
  47. {
  48. token = request.getQueryString(TOKEN_KEY);
  49. }
  50. return option(token);
  51. }
  52. }