Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. //package controller;
  2. import java.security.Key;
  3. import java.util.Date;
  4. import java.util.Enumeration;
  5. import java.util.concurrent.TimeUnit;
  6. import javax.crypto.spec.SecretKeySpec;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.ws.rs.Consumes;
  10. import javax.ws.rs.FormParam;
  11. import javax.ws.rs.GET;
  12. import javax.ws.rs.POST;
  13. import javax.ws.rs.Path;
  14. import javax.ws.rs.PathParam;
  15. import javax.ws.rs.Produces;
  16. import javax.ws.rs.core.Context;
  17. import javax.ws.rs.core.HttpHeaders;
  18. import javax.ws.rs.core.MediaType;
  19. import javax.ws.rs.core.Response;
  20. import javax.ws.rs.core.Response.Status;
  21. import javax.xml.bind.DatatypeConverter;
  22. import org.hibernate.SessionFactory;
  23. import dao.UtilisateurDAO;
  24. import io.jsonwebtoken.Claims;
  25. import io.jsonwebtoken.JwtBuilder;
  26. import io.jsonwebtoken.Jwts;
  27. import model.Utilisateur;
  28.  
  29. @Path("/login")
  30. public class LoginController {
  31.  
  32. SessionFactory sessionFactory = SessionConfig.getSessionFactory();
  33. UtilisateurDAO uDAO = new UtilisateurDAO(sessionFactory);
  34. String key = "pyviJ5z14Lcvb0qG6jcnmA==";
  35.  
  36.  
  37. @POST
  38. @Produces(MediaType.APPLICATION_JSON)
  39. @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
  40. public Response login(@FormParam("username") String username, @FormParam("password") String password)
  41. //throws JsonGenerationException, JsonMappingException, IOException {
  42. {
  43. if (username == null) {
  44. return Response.status(
  45. Status.PRECONDITION_FAILED.getStatusCode())
  46. .build();
  47. }
  48.  
  49. if (password == null) {
  50. return Response.status(
  51. Status.PRECONDITION_FAILED.getStatusCode())
  52. .build();
  53. }
  54.  
  55. Utilisateur user = uDAO.getUserAuthenticated(username,password);
  56. if (user == null) {
  57. return Response.status(Status.FORBIDDEN.getStatusCode())
  58. .build();
  59. }
  60.  
  61. String token = createJWT(user.getId()+"","http://vm-11.iutrs.unistra.fr:8080/TrocTonSavoir/api/",user.getPseudo(),TimeUnit.DAYS.toMillis(365));
  62. return Response.status(200).entity(token).build();
  63. }
  64.  
  65. @GET
  66. @Path("/whoiam")
  67. @Produces(MediaType.APPLICATION_JSON)
  68. public Response whoiam(@Context HttpHeaders headers)
  69. {
  70. String token = headers.getRequestHeader("bearer").get(0);
  71. Claims claims = null;
  72. boolean error = false;
  73. boolean trouve = false;
  74.  
  75. if(null != token){
  76. try{
  77. //This line will throw an exception if it is not a signed JWS (as expected)
  78. claims = Jwts.parser()
  79. .setSigningKey(DatatypeConverter.parseBase64Binary(key))
  80. .parseClaimsJws(token).getBody();
  81. }
  82. catch(Exception e){
  83. error = true;
  84. }
  85. }
  86.  
  87. if(null != claims){
  88. return Response.status(200).entity(claims.getId()).build();
  89. }
  90. else{
  91. return Response.status(Status.FORBIDDEN.getStatusCode())
  92. .build();
  93. }
  94.  
  95. }
  96.  
  97. private String createJWT(String id, String issuer, String subject, long ttlMillis) {
  98.  
  99. //The JWT signature algorithm we will be using to sign the token
  100. io.jsonwebtoken.SignatureAlgorithm signatureAlgorithm = io.jsonwebtoken.SignatureAlgorithm.HS256;
  101.  
  102. long nowMillis = System.currentTimeMillis();
  103. Date now = new Date(nowMillis);
  104.  
  105.  
  106. //We will sign our JWT with our ApiKey secret
  107. byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(key);
  108. Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
  109.  
  110. //Let's set the JWT Claims
  111. JwtBuilder builder = Jwts.builder().setId(id)
  112. .setIssuedAt(now)
  113. .setSubject(subject)
  114. .setIssuer(issuer)
  115. .signWith(signatureAlgorithm, signingKey);
  116.  
  117. //if it has been specified, let's add the expiration
  118. if (ttlMillis >= 0) {
  119. long expMillis = nowMillis + ttlMillis;
  120. Date exp = new Date(expMillis);
  121. builder.setExpiration(exp);
  122. }
  123.  
  124. //Builds the JWT and serializes it to a compact, URL-safe string
  125. return builder.compact();
  126. }
  127.  
  128. // @POST
  129. // @Path("/logout")
  130. // @Produces(MediaType.APPLICATION_JSON)
  131. // public Login logout(Login login){
  132. // login.setSuccess(false);
  133. // login.setUname("");
  134. // return login;
  135. // }
  136.  
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement