rsanchez
2015-09-25 5b17f9359f55108cb72b103738085b96688b77eb
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
package net.curisit.securis.services;
import java.net.URI;
import java.util.Date;
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 net.curisit.integrity.commons.Utils;
import net.curisit.securis.ioc.EnsureTransaction;
import net.curisit.securis.security.Securable;
import net.curisit.securis.utils.TokenHelper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
 * 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("/{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();
    }
}