Commit 039b775f3d911f0030d4a5268384c46ff1dbbb87
1 parent
80eba845
Exists in
master
FWK-223: Atualizar o arquétipo com os novos experimentos
Task-Url: https://demoiselle.atlassian.net/browse/FWK-223
Showing
9 changed files
with
180 additions
and
89 deletions
Show diff stats
archetype/html-rest/src/main/resources/archetype-resources/src/main/java/rest/AuthREST.java
... | ... | @@ -6,7 +6,6 @@ import javax.inject.Inject; |
6 | 6 | import javax.validation.constraints.NotNull; |
7 | 7 | import javax.validation.constraints.Size; |
8 | 8 | import javax.ws.rs.Consumes; |
9 | -import javax.ws.rs.GET; | |
10 | 9 | import javax.ws.rs.POST; |
11 | 10 | import javax.ws.rs.Path; |
12 | 11 | import javax.ws.rs.Produces; |
... | ... | @@ -24,25 +23,28 @@ public class AuthREST { |
24 | 23 | private SecurityContext securityContext; |
25 | 24 | |
26 | 25 | @POST |
26 | + @Path("login") | |
27 | 27 | @ValidatePayload |
28 | - @Produces("application/json") | |
29 | 28 | @Consumes("application/json") |
30 | - public void login(CredentialsData data) { | |
29 | + @Produces("application/json") | |
30 | + public Principal login(CredentialsBody body) { | |
31 | 31 | Credentials credentials = Beans.getReference(Credentials.class); |
32 | - credentials.setUsername(data.username); | |
33 | - credentials.setPassword(data.password); | |
32 | + credentials.setUsername(body.username); | |
33 | + credentials.setPassword(body.password); | |
34 | 34 | |
35 | 35 | securityContext.login(); |
36 | + return securityContext.getUser(); | |
36 | 37 | } |
37 | 38 | |
38 | - @GET | |
39 | + @POST | |
39 | 40 | @LoggedIn |
40 | - @Produces("application/json") | |
41 | - public Principal getLoggedInUser() { | |
42 | - return securityContext.getUser(); | |
41 | + @Path("logout") | |
42 | + @ValidatePayload | |
43 | + public void logout() { | |
44 | + securityContext.logout(); | |
43 | 45 | } |
44 | 46 | |
45 | - public static class CredentialsData { | |
47 | + public static class CredentialsBody { | |
46 | 48 | |
47 | 49 | @NotNull(message = "{required.field}") |
48 | 50 | @Size(min = 1, message = "{required.field}") | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/java/rest/BookmarkREST.java
... | ... | @@ -65,10 +65,10 @@ public class BookmarkREST { |
65 | 65 | @ValidatePayload |
66 | 66 | @Produces("application/json") |
67 | 67 | @Consumes("application/json") |
68 | - public Response insert(Bookmark entity, @Context UriInfo uriInfo) throws Exception { | |
69 | - checkId(entity); | |
68 | + public Response insert(Bookmark body, @Context UriInfo uriInfo) throws Exception { | |
69 | + checkId(body); | |
70 | 70 | |
71 | - String id = bc.insert(entity).getId().toString(); | |
71 | + String id = bc.insert(body).getId().toString(); | |
72 | 72 | URI location = uriInfo.getRequestUriBuilder().path(id).build(); |
73 | 73 | |
74 | 74 | return Response.created(location).entity(id).build(); |
... | ... | @@ -81,12 +81,12 @@ public class BookmarkREST { |
81 | 81 | @ValidatePayload |
82 | 82 | @Produces("application/json") |
83 | 83 | @Consumes("application/json") |
84 | - public void update(@PathParam("id") Long id, Bookmark entity) throws Exception { | |
85 | - checkId(entity); | |
84 | + public void update(@PathParam("id") Long id, Bookmark body) throws Exception { | |
85 | + checkId(body); | |
86 | 86 | load(id); |
87 | 87 | |
88 | - entity.setId(id); | |
89 | - bc.update(entity); | |
88 | + body.setId(id); | |
89 | + bc.update(body); | |
90 | 90 | } |
91 | 91 | |
92 | 92 | @DELETE | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/bookmark-list.js
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/login.js
... | ... | @@ -10,24 +10,26 @@ $(function() { |
10 | 10 | |
11 | 11 | $("[id$='-message']").hide(); |
12 | 12 | |
13 | - var data = { | |
13 | + var credentials = { | |
14 | 14 | 'username' : $("#username").val().trim(), |
15 | 15 | 'password' : $("#password").val().trim() |
16 | 16 | }; |
17 | 17 | |
18 | - AuthProxy.login(data).done(loginOk).fail(loginFail); | |
18 | + AuthProxy.login(credentials).done(loginOk).fail(loginFail); | |
19 | 19 | }); |
20 | 20 | }); |
21 | 21 | |
22 | -function loginOk(data, status, request) { | |
23 | - App.setToken(request.getResponseHeader('Set-Token')); | |
24 | - location.href = "home.html"; | |
22 | +function loginOk(data, textStatus, jqXHR) { | |
23 | + App.auth.setToken(jqXHR.getResponseHeader('Set-Token')); | |
24 | + App.auth.setLoggedInUser(data); | |
25 | + | |
26 | + App.restoreSavedLocation(); | |
25 | 27 | } |
26 | 28 | |
27 | -function loginFail(request) { | |
28 | - switch (request.status) { | |
29 | +function loginFail(jqXHR, textStatus, errorThrown) { | |
30 | + switch (jqXHR.status) { | |
29 | 31 | case 401: |
30 | - $("#global-message").html(request.responseText).show(); | |
32 | + $("#global-message").html(jqXHR.responseText).show(); | |
31 | 33 | break; |
32 | 34 | |
33 | 35 | case 422: |
... | ... | @@ -35,7 +37,7 @@ function loginFail(request) { |
35 | 37 | var id = $(this).attr('id'); |
36 | 38 | var message = null; |
37 | 39 | |
38 | - $.each(request.responseJSON, function(index, value) { | |
40 | + $.each(jqXHR.responseJSON, function(index, value) { | |
39 | 41 | if (id == value.property) { |
40 | 42 | message = value.message; |
41 | 43 | return; | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/menu.js
1 | 1 | $(function() { |
2 | 2 | $("#menu").load("menu.html", function() { |
3 | - AuthProxy.getUser().done(getUserOk); | |
3 | + $("#username").html(App.auth.getLoggedInUser().name); | |
4 | 4 | |
5 | - $("#logout").on("click", function() { | |
6 | - App.removeToken(); | |
7 | - location.href = "index.html"; | |
5 | + $("#logout").click(function(event) { | |
6 | + event.preventDefault(); | |
7 | + AuthProxy.logout().done(logoutOk); | |
8 | 8 | }); |
9 | 9 | }); |
10 | 10 | }); |
11 | 11 | |
12 | -function getUserOk(data) { | |
13 | - $("#username").html(data.name); | |
12 | +function logoutOk() { | |
13 | + App.auth.clearAuthentication(); | |
14 | + location.href = ""; | |
14 | 15 | } | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/lib/app.js
1 | -$.ajaxSetup({ | |
2 | - error : function(request) { | |
3 | - switch (request.status) { | |
4 | - case 401: | |
5 | - bootbox.alert("Você não está autenticado!", function() { | |
6 | - location.href = "login.html"; | |
7 | - }); | |
8 | - | |
9 | - break; | |
10 | - } | |
11 | - } | |
12 | -}); | |
13 | - | |
14 | 1 | var App = { |
15 | 2 | |
16 | - tokenKey : "Token", | |
3 | + savedLocationKey : "Saved Location", | |
17 | 4 | |
18 | - getToken : function() { | |
19 | - return sessionStorage.getItem(this.tokenKey); | |
5 | + restoreSavedLocation : function() { | |
6 | + var url = sessionStorage.getItem(this.savedLocationKey); | |
7 | + location.href = (url ? url : ""); | |
20 | 8 | }, |
21 | 9 | |
22 | - setToken : function(token) { | |
23 | - console.log(token); | |
24 | - sessionStorage.setItem(this.tokenKey, token); | |
10 | + saveLocation : function(url) { | |
11 | + sessionStorage.setItem(this.savedLocationKey, url); | |
25 | 12 | }, |
26 | 13 | |
27 | - setHeader : function(request) { | |
28 | - request.setRequestHeader("Authorization", "Token " + App.getToken()); | |
29 | - }, | |
30 | - | |
31 | - removeToken : function() { | |
32 | - sessionStorage.removeItem(this.tokenKey); | |
33 | - $.removeCookie("Token"); | |
14 | + clearSavedLocation : function() { | |
15 | + sessionStorage.removeItem(this.savedLocationKey); | |
34 | 16 | }, |
35 | 17 | |
36 | 18 | getUrlParameterByName : function(name) { |
37 | 19 | name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); |
38 | 20 | var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); |
39 | 21 | return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); |
22 | + }, | |
23 | + | |
24 | + auth : { | |
25 | + tokenKey : "Token", | |
26 | + | |
27 | + userKey : "User", | |
28 | + | |
29 | + getLoggedInUser : function() { | |
30 | + return JSON.parse(sessionStorage.getItem(this.userKey)); | |
31 | + }, | |
32 | + | |
33 | + setLoggedInUser : function(user) { | |
34 | + sessionStorage.setItem(this.userKey, JSON.stringify(user)); | |
35 | + }, | |
36 | + | |
37 | + isLoggedIn : function() { | |
38 | + return this.getToken() != null; | |
39 | + }, | |
40 | + | |
41 | + getToken : function() { | |
42 | + return sessionStorage.getItem(this.tokenKey); | |
43 | + }, | |
44 | + | |
45 | + setToken : function(token) { | |
46 | + sessionStorage.setItem(this.tokenKey, token); | |
47 | + }, | |
48 | + | |
49 | + clearAuthentication : function() { | |
50 | + sessionStorage.removeItem(this.userKey); | |
51 | + sessionStorage.removeItem(this.tokenKey); | |
52 | + }, | |
53 | + | |
54 | + setHeader : function(request) { | |
55 | + request.setRequestHeader("Authorization", "Token " + this.getToken()); | |
56 | + } | |
57 | + }, | |
58 | + | |
59 | + handling : { | |
60 | + handle401 : function(request) { | |
61 | + App.auth.clearAuthentication(); | |
62 | + App.saveLocation(location.href); | |
63 | + location.href = "login.html"; | |
64 | + }, | |
65 | + | |
66 | + handle422 : function(request) { | |
67 | + var elements = $("form input, form select, form textarea").get().reverse(); | |
68 | + | |
69 | + $(elements).each(function() { | |
70 | + var id = $(this).attr('id'); | |
71 | + var messages = []; | |
72 | + | |
73 | + $.each(request.responseJSON, function(index, value) { | |
74 | + var aux = value.property ? value.property : "global"; | |
75 | + | |
76 | + if (id == aux) { | |
77 | + messages.push(value.message); | |
78 | + return; | |
79 | + } | |
80 | + }); | |
81 | + | |
82 | + if (!id) { | |
83 | + return; | |
84 | + } | |
85 | + | |
86 | + var message = $("#" + id.replace(".", "\\.") + "-message"); | |
87 | + | |
88 | + if (messages.length > 1) { | |
89 | + message.empty(); | |
90 | + var ul = message.append("<ul></ul>") | |
91 | + | |
92 | + while (messages.length > 0) { | |
93 | + ul.append("<li>" + messages.pop() + "</li>"); | |
94 | + } | |
95 | + | |
96 | + message.show(); | |
97 | + $(this).focus(); | |
98 | + | |
99 | + } else if (messages.length == 1) { | |
100 | + message.html(messages.pop()).show(); | |
101 | + $(this).focus(); | |
102 | + | |
103 | + } else { | |
104 | + message.hide(); | |
105 | + } | |
106 | + }); | |
107 | + }, | |
108 | + | |
109 | + handle500 : function(request) { | |
110 | + alert("Ocorreu um erro interno no servidor e o processamento não foi concluído. Informe ao administrador pelo e-mail: contato@soumaisaventura.com.br"); | |
111 | + } | |
40 | 112 | } |
41 | 113 | }; |
114 | + | |
115 | +$.ajaxSetup({ | |
116 | + error : function(request) { | |
117 | + switch (request.status) { | |
118 | + case 401: | |
119 | + App.handling.handle401(request); | |
120 | + break; | |
121 | + | |
122 | + case 422: | |
123 | + App.handling.handle422(request); | |
124 | + break; | |
125 | + | |
126 | + case 500: | |
127 | + App.handling.handle500(request); | |
128 | + break; | |
129 | + } | |
130 | + } | |
131 | +}); | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/proxy/auth.js
... | ... | @@ -2,23 +2,20 @@ var AuthProxy = { |
2 | 2 | |
3 | 3 | url : "api/auth", |
4 | 4 | |
5 | - login : function($credentials) { | |
5 | + login : function(credentials) { | |
6 | 6 | return $.ajax({ |
7 | - url : this.url, | |
7 | + url : this.url + "/login", | |
8 | 8 | type : "POST", |
9 | - data : JSON.stringify($credentials), | |
9 | + data : JSON.stringify(credentials), | |
10 | 10 | contentType : "application/json", |
11 | 11 | error : function() {} |
12 | 12 | }); |
13 | 13 | }, |
14 | 14 | |
15 | - getUser : function() { | |
15 | + logout : function() { | |
16 | 16 | return $.ajax({ |
17 | - url : this.url, | |
18 | - type : "GET", | |
19 | - beforeSend : function(request) { | |
20 | - App.setHeader(request) | |
21 | - } | |
17 | + url : this.url + "/logout", | |
18 | + type : "POST" | |
22 | 19 | }); |
23 | 20 | } |
24 | 21 | }; | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/proxy/bookmark.js
... | ... | @@ -6,54 +6,54 @@ var BookmarkProxy = { |
6 | 6 | return $.ajax({ |
7 | 7 | type : "GET", |
8 | 8 | url : this.url, |
9 | - beforeSend : function(request) { | |
10 | - App.setHeader(request) | |
9 | + beforeSend : function(jqXHR) { | |
10 | + App.auth.setHeader(jqXHR) | |
11 | 11 | } |
12 | 12 | }); |
13 | 13 | }, |
14 | 14 | |
15 | - load : function($id) { | |
15 | + load : function(id) { | |
16 | 16 | return $.ajax({ |
17 | 17 | type : "GET", |
18 | - url : this.url + "/" + $id, | |
19 | - beforeSend : function(request) { | |
20 | - App.setHeader(request) | |
18 | + url : this.url + "/" + id, | |
19 | + beforeSend : function(jqXHR) { | |
20 | + App.auth.setHeader(jqXHR) | |
21 | 21 | } |
22 | 22 | }); |
23 | 23 | }, |
24 | 24 | |
25 | - insert : function($data) { | |
25 | + insert : function(bookmark) { | |
26 | 26 | return $.ajax({ |
27 | 27 | type : "POST", |
28 | 28 | url : this.url, |
29 | - data : JSON.stringify($data), | |
29 | + data : JSON.stringify(bookmark), | |
30 | 30 | contentType : "application/json", |
31 | - beforeSend : function(request) { | |
32 | - App.setHeader(request) | |
31 | + beforeSend : function(jqXHR) { | |
32 | + App.auth.setHeader(jqXHR) | |
33 | 33 | } |
34 | 34 | }); |
35 | 35 | }, |
36 | 36 | |
37 | - update : function($id, $data) { | |
37 | + update : function(id, bookmark) { | |
38 | 38 | return $.ajax({ |
39 | 39 | type : "PUT", |
40 | - url : this.url + "/" + $id, | |
41 | - data : JSON.stringify($data), | |
40 | + url : this.url + "/" + id, | |
41 | + data : JSON.stringify(bookmark), | |
42 | 42 | contentType : "application/json", |
43 | - beforeSend : function(request) { | |
44 | - App.setHeader(request) | |
43 | + beforeSend : function(jqXHR) { | |
44 | + App.auth.setHeader(jqXHR) | |
45 | 45 | } |
46 | 46 | }); |
47 | 47 | }, |
48 | 48 | |
49 | - remove : function($ids) { | |
49 | + remove : function(ids) { | |
50 | 50 | return $.ajax({ |
51 | 51 | type : "DELETE", |
52 | 52 | url : this.url, |
53 | - data : JSON.stringify($ids), | |
53 | + data : JSON.stringify(ids), | |
54 | 54 | contentType : "application/json", |
55 | - beforeSend : function(request) { | |
56 | - App.setHeader(request) | |
55 | + beforeSend : function(jqXHR) { | |
56 | + App.auth.setHeader(jqXHR) | |
57 | 57 | } |
58 | 58 | }); |
59 | 59 | } | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/proxy/metadata.js