rsanchez
2017-03-10 2762277c60db7df5ad3214b10a0dd93d4f2f1128
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package net.curisit.securis.services;
import java.net.URI;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import net.curisit.integrity.commons.Utils;
import net.curisit.securis.ioc.EnsureTransaction;
import net.curisit.securis.security.Securable;
import net.curisit.securis.utils.TokenHelper;
/**
 * Basic services for login and basic app wrkflow
 * 
 * @author roberto <roberto.sanchez@curisit.net>
 */
@Path("/")
@ApplicationScoped
public class BasicServices {
   private static final Logger LOG = LogManager.getLogger(BasicServices.class);
   @Inject
   TokenHelper tokenHelper;
   @Inject
   public BasicServices() {
   }
   @GET
   @Path("/info")
   @Produces({ MediaType.TEXT_PLAIN })
   public Response info(@Context HttpServletRequest request) {
       return Response.ok().entity("License server running OK. Date: " + new Date()).build();
   }
   @GET
   @Path("/version")
   @Produces({ MediaType.APPLICATION_JSON })
   public Map<String, String> version(@Context HttpServletRequest request) {
       Map<String, String> resp = new HashMap<>();
       // TODO: Get the real version
       String version = "2.0.0";
       resp.put("version", version);
       return resp;
   }
   @GET
   @Path("/{module:(admin)|(login)|(licenses)}")
   @Produces({ MediaType.TEXT_HTML })
   public Response init(@PathParam("module") String module, @Context HttpServletRequest request) {
       LOG.info("App index main.html");
       String page = "/index.jsp";
       URI uri = UriBuilder.fromUri(page).build();
       return Response.seeOther(uri).build();
   }
   @POST
   @Path("/login")
   @Produces({ MediaType.APPLICATION_JSON })
   public Response login(@FormParam("username") String user, @FormParam("password") String password, @Context HttpServletRequest request) {
       LOG.info("is user in role: {} == {} ? ", "advance", request.isUserInRole("advance"));
       String tokenAuth = tokenHelper.generateToken(user);
       return Response.ok(Utils.createMap("success", true, "token", tokenAuth)).build();
   }
   /**
    * Check if current token is valid
    * 
    * @param user
    * @param password
    * @param request
    * @return
    */
   @GET
   @Securable()
   @Path("/check")
   @Produces({ MediaType.APPLICATION_JSON })
   @EnsureTransaction
   public Response check(@HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token, @QueryParam("token") String token2) {
       if (token == null) {
           token = token2;
       }
       if (token == null) {
           return Response.status(Status.FORBIDDEN).build();
       }
       boolean valid = tokenHelper.isTokenValid(token);
       if (!valid) {
           return Response.status(Status.UNAUTHORIZED).build();
       }
       String user = tokenHelper.extractUserFromToken(token);
       Date date = tokenHelper.extractDateCreationFromToken(token);
       return Response.ok(Utils.createMap("valid", true, "user", user, "date", date)).build();
   }
   @GET
   @POST
   @Path("/logout")
   @Produces({ MediaType.APPLICATION_JSON })
   public Response logout(@HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
       if (token == null) {
           Response.status(Status.BAD_REQUEST).build();
       }
       String user = tokenHelper.extractUserFromToken(token);
       LOG.info("User {} has logged out", user);
       return Response.ok().build();
   }
}