Skip to content

Commit 6ea7840

Browse files
committed
align with Admin template and theme
1 parent 59519bf commit 6ea7840

31 files changed

Lines changed: 1100 additions & 669 deletions

File tree

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package com.github.adminfaces.showcase.bean;
7+
8+
import java.io.Serializable;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.stream.IntStream;
12+
import javax.annotation.PostConstruct;
13+
import javax.inject.Named;
14+
import org.omnifaces.cdi.ViewScoped;
15+
16+
/**
17+
*
18+
* @author rmpestano
19+
*/
20+
@Named
21+
@ViewScoped
22+
public class IndexMB implements Serializable {
23+
24+
List<String> itens;
25+
26+
List<String> subItens;
27+
28+
List<String> filteredSubItens = new ArrayList<>();
29+
30+
String selectedItem;
31+
32+
String selectedSubItem;
33+
34+
@PostConstruct
35+
public void init() {
36+
itens = new ArrayList<>(15);
37+
subItens = new ArrayList<>(150);
38+
39+
IntStream.rangeClosed(1, 15)
40+
.forEach(i -> {
41+
itens.add("item " + i);
42+
IntStream.rangeClosed(1, 10)
43+
.forEach(j -> {
44+
subItens.add("subitem " + i + "" + j);
45+
});
46+
});
47+
}
48+
49+
public List<String> getItens() {
50+
return itens;
51+
}
52+
53+
public void setItens(List<String> itens) {
54+
this.itens = itens;
55+
}
56+
57+
public List<String> getFilteredSubItens() {
58+
return filteredSubItens;
59+
}
60+
61+
public void setFilteredSubItens(List<String> filteredSubItens) {
62+
this.filteredSubItens = filteredSubItens;
63+
}
64+
65+
public String getSelectedItem() {
66+
return selectedItem;
67+
}
68+
69+
public void setSelectedItem(String selectedItem) {
70+
this.selectedItem = selectedItem;
71+
}
72+
73+
public String getSelectedSubItem() {
74+
return selectedSubItem;
75+
}
76+
77+
public void setSelectedSubItem(String selectedSubItem) {
78+
this.selectedSubItem = selectedSubItem;
79+
}
80+
81+
public void onItemChange() {
82+
filteredSubItens.clear();
83+
subItens.stream().filter(subItem -> selectedItem != null && subItem.contains(selectedItem))
84+
.forEach(filteredSubItens::add);
85+
}
86+
}

src/main/java/com/github/adminfaces/template/bean/BreadCrumbMB.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.github.adminfaces.template.config.AdminConfig;
44
import com.github.adminfaces.template.model.BreadCrumb;
5+
import com.github.adminfaces.template.util.AdminUtils;
6+
import org.omnifaces.util.Faces;
57

68
import javax.annotation.PostConstruct;
79
import javax.enterprise.context.SessionScoped;
@@ -11,10 +13,10 @@
1113
import java.io.Serializable;
1214
import java.util.ArrayList;
1315
import java.util.List;
16+
import java.util.logging.Level;
17+
import java.util.logging.Logger;
1418

1519
import static com.github.adminfaces.template.util.Assert.has;
16-
import java.io.IOException;
17-
import org.omnifaces.util.Faces;
1820

1921
/**
2022
* Created by rafael-pestano on 30/11/16.
@@ -56,14 +58,17 @@ public void add(BreadCrumb breadCrumb) {
5658
String pageUrl = FacesContext.getCurrentInstance().getViewRoot().getViewId();
5759
link = pageUrl.replaceAll(pageUrl.substring(pageUrl.lastIndexOf('.') + 1), adminConfig.getPageSufix());
5860
}
59-
61+
6062
if(!link.startsWith("/")) {
6163
link = "/"+link;
6264
}
6365

64-
if(link != null && adminConfig.isExtensionLessUrls()) {
65-
link = link.substring(0, link.lastIndexOf("."));
66-
} else if(link != null && !link.contains(".")) {
66+
if(adminConfig.isExtensionLessUrls()) {
67+
int idx = link.lastIndexOf(".");
68+
if (idx != -1) {
69+
link = link.substring(0, idx);
70+
}
71+
} else if(!link.contains(".")) {
6772
link = link + "." + adminConfig.getPageSufix();
6873
}
6974
breadCrumb.setLink(link);
@@ -77,18 +82,23 @@ public void add(BreadCrumb breadCrumb) {
7782
}
7883
breadCrumbs.add(breadCrumb);
7984
}
80-
85+
8186
public void remove(BreadCrumb breadCrumb) {
8287
breadCrumbs.remove(breadCrumb);
8388
}
8489

8590
public void clear() {
8691
breadCrumbs.clear();
8792
}
88-
89-
public void clearAndHome() throws IOException {
93+
94+
public void clearAndHome() {
9095
clear();
91-
Faces.redirect(Faces.getRequestBaseURL());
96+
try {
97+
AdminUtils.redirect(Faces.getRequestBaseURL());
98+
} catch (Exception e) {
99+
//see issue #177
100+
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"Could not redirect to Home page.",e);
101+
}
92102
}
93103

94104
public List<BreadCrumb> getBreadCrumbs() {

src/main/java/com/github/adminfaces/template/bean/LayoutMB.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
import com.github.adminfaces.template.config.AdminConfig;
44
import com.github.adminfaces.template.config.ControlSidebarConfig;
5+
import org.omnifaces.util.Faces;
6+
57
import javax.annotation.PostConstruct;
68
import javax.enterprise.context.SessionScoped;
9+
import javax.inject.Inject;
710
import javax.inject.Named;
811
import java.io.Serializable;
912
import java.util.logging.Logger;
10-
import javax.inject.Inject;
11-
import org.omnifaces.util.Faces;
1213

1314
/**
1415
* Created by rmpestano on 07/05/17.

src/main/java/com/github/adminfaces/template/session/AdminFilter.java

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public class AdminFilter implements Filter {
3636

3737
private boolean disableFilter;
3838
private String loginPage;
39-
private String errorPage;
4039
private String indexPage;
40+
private String redirectPrefix;
4141

4242
@Inject
4343
AdminSession adminSession;
@@ -59,7 +59,7 @@ public void init(FilterConfig filterConfig) throws ServletException {
5959
if (!has(loginPage)) {
6060
loginPage = has(adminConfig) ? adminConfig.getLoginPage() : Constants.DEFAULT_LOGIN_PAGE;
6161
}
62-
errorPage = filterConfig.getServletContext().getInitParameter(Constants.InitialParams.ERROR_PAGE);
62+
String errorPage = filterConfig.getServletContext().getInitParameter(Constants.InitialParams.ERROR_PAGE);
6363
if (!has(errorPage)) {
6464
errorPage = Constants.DEFAULT_ERROR_PAGE;
6565
}
@@ -73,8 +73,8 @@ public void init(FilterConfig filterConfig) throws ServletException {
7373
loginPage = loginPage.startsWith("/") ? loginPage.substring(1) : loginPage;
7474
indexPage = indexPage.startsWith("/") ? indexPage.substring(1) : indexPage;
7575

76-
ignoredResources.add("/"+loginPage.substring(0,loginPage.lastIndexOf(".")));//we need leading slash for ignoredResources
77-
ignoredResources.add("/"+errorPage.substring(0,errorPage.lastIndexOf(".")));
76+
ignoredResources.add("/" + loginPage.substring(0, loginPage.lastIndexOf(".")));//we need leading slash for ignoredResources
77+
ignoredResources.add("/" + errorPage.substring(0, errorPage.lastIndexOf(".")));
7878

7979
String configuredResouces = adminConfig.getIgnoredResources();
8080
if(has(configuredResouces)) {
@@ -107,7 +107,7 @@ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain
107107

108108
if (request.getRequestURI().equals(request.getContextPath() + "/")
109109
|| (adminSession.isLoggedIn() && request.getRequestURI().endsWith(loginPage))) {
110-
response.sendRedirect(request.getContextPath() + "/" + indexPage);
110+
response.sendRedirect(getRedirectPrefix(request) + request.getContextPath() + "/" + indexPage);
111111
return;
112112
}
113113

@@ -119,13 +119,15 @@ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain
119119
if (skipResource(request, response) || adminSession.isLoggedIn()) {
120120
if (!adminSession.isUserRedirected() && adminSession.isLoggedIn() && has(request.getHeader("Referer")) && request.getHeader("Referer").contains("?page=")) {
121121
adminSession.setUserRedirected(true);
122-
response.sendRedirect(request.getContextPath() + extractPageFromURL(request.getHeader("Referer")));
122+
String pageFromURL = request.getContextPath() + extractPageFromURL(request.getHeader("Referer"));
123+
log.info("Redirecting user back to " + pageFromURL);
124+
response.sendRedirect(getRedirectPrefix(request) + pageFromURL);
123125
return;
124126
}
125127
try {
126128
chain.doFilter(req, resp);
127129
} catch (FileNotFoundException e) {
128-
log.log(Level.WARNING,"File not found", e);
130+
log.log(Level.WARNING, "File not found", e);
129131
response.sendError(404);
130132
}
131133
} else { //resource not skipped (e.g a page that is not logon page) AND user not logged in
@@ -140,7 +142,7 @@ private String extractPageFromURL(String referer) {
140142
try {
141143
return URLDecoder.decode(page, "UTF-8");
142144
} catch (UnsupportedEncodingException e) {
143-
log.log(Level.WARNING,"Could not extract page from url", e);
145+
log.log(Level.WARNING, "Could not extract page from url", e);
144146
return indexPage;
145147
}
146148
}
@@ -158,8 +160,8 @@ public void destroy() {
158160
*/
159161
private boolean skipResource(HttpServletRequest request, HttpServletResponse response) {
160162
String path = request.getServletPath();
161-
if(path.contains(".")) {
162-
path = path.substring(0,path.lastIndexOf("."));
163+
if (path.contains(".")) {
164+
path = path.substring(0, path.lastIndexOf("."));
163165
}
164166
boolean skip = path.startsWith(FACES_RESOURCES) || shouldIgnoreResource(path) || response.getStatus() == HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
165167
return skip;
@@ -200,23 +202,24 @@ private void redirectToLogon(HttpServletRequest request, HttpServletResponse res
200202
.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
201203
.printf("<partial-response><redirect url=\"%s\"></redirect></partial-response>", redirectUrl);
202204
} else {//normal redirect
203-
response.sendRedirect(redirectUrl);
205+
response.sendRedirect(getRedirectPrefix(request) + redirectUrl);
204206
}
205207

206208
} catch (Exception e) {
207-
log.log(Level.SEVERE,"Could not redirect to " + loginPage, e);
209+
log.log(Level.SEVERE, "Could not redirect to " + loginPage, e);
208210
}
209211

210212
}
211213

212214
/**
213215
* Skip error pages, login and index page as recovery url because it doesn't make sense redirecting user to such pages
216+
*
214217
* @param recoveryUrl
215-
* @return
218+
* @return
216219
*/
217220
private boolean isValidRecoveryUrl(StringBuilder recoveryUrl) {
218221
String pageSuffix = adminConfig.getPageSufix();
219-
return !recoveryUrl.toString().contains(Constants.DEFAULT_INDEX_PAGE.replace("xhtml", pageSuffix)) && !recoveryUrl.toString().contains(Constants.DEFAULT_ACCESS_DENIED_PAGE.replace("xhtml", adminConfig.getPageSufix()))
222+
return !recoveryUrl.toString().contains(Constants.DEFAULT_INDEX_PAGE.replace("xhtml", pageSuffix)) && !recoveryUrl.toString().contains(Constants.DEFAULT_ACCESS_DENIED_PAGE.replace("xhtml", adminConfig.getPageSufix()))
220223
&& !recoveryUrl.toString().contains(Constants.DEFAULT_EXPIRED_PAGE.replace("xhtml", pageSuffix)) && !recoveryUrl.toString().contains(Constants.DEFAULT_OPTIMISTIC_PAGE.replace("xhtml", adminConfig.getPageSufix()))
221224
&& !recoveryUrl.toString().contains(Constants.DEFAULT_LOGIN_PAGE.replace("xhtml", adminConfig.getPageSufix()));
222225
}
@@ -228,11 +231,32 @@ private boolean isValidRecoveryUrl(StringBuilder recoveryUrl) {
228231
*/
229232
private boolean shouldIgnoreResource(String path) {
230233
for (String ignoredResource : ignoredResources) {
231-
if(path.startsWith(ignoredResource)) {
234+
if (path.startsWith(ignoredResource)) {
232235
return true;
233236
}
234237
}
235238
return false;
236239
}
237240

241+
private String getRedirectPrefix(HttpServletRequest request) {
242+
if(redirectPrefix == null) {
243+
String url = request.getRequestURL().toString();
244+
String uri = request.getRequestURI();
245+
int offset = url.indexOf(uri);
246+
redirectPrefix = url.substring(0, offset);
247+
if(useHttps(request)) {
248+
log.log(Level.WARNING,"Changing request scheme to https.");
249+
redirectPrefix = redirectPrefix.replace("http:","https:");
250+
}
251+
}
252+
return redirectPrefix;
253+
}
254+
255+
private static boolean useHttps(HttpServletRequest request) {
256+
String protocolProperty = System.getProperty("admin.protocol", System.getenv("admin.protocol"));
257+
258+
String protoHeader = request.getHeader("X-Forwarded-Proto");
259+
return request.isSecure() || (protoHeader != null && protoHeader.toLowerCase().equals("https"))
260+
|| (protocolProperty != null && protocolProperty.toLowerCase().equals("https"));
261+
}
238262
}

0 commit comments

Comments
 (0)