Commit aa1d190a by Juho Salli

Merge branch 'randomfixes' into 'master'

Randomfixes

Few minor random fixes.

* invitestuff
* Primefaces 5.0-RC2
* etc
2 parents 72df7970 fd5b3512
...@@ -53,6 +53,11 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -53,6 +53,11 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE reader_events ALTER COLUMN type DROP DEFAULT;", "ALTER TABLE reader_events ALTER COLUMN type DROP DEFAULT;",
}); });
dbUpdates.add(new String[] {
"delete from menu_navigation where item_id in (select id from menuitem where url in ( '/actionlog/messagelist'))",
"delete from menuitem where url in ('/actionlog/messagelist')",
});
} }
@EJB @EJB
...@@ -78,7 +83,8 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -78,7 +83,8 @@ public class BootstrapBean implements BootstrapBeanLocal {
throw new RuntimeException("Sanity check failed! DB is newer than the codebase!"); throw new RuntimeException("Sanity check failed! DB is newer than the codebase!");
} }
} else { } else {
// DB is up to date by default! We need to mark the current version down though. // DB is up to date by default! We need to mark the current version
// down though.
dBm = new DBModel(); dBm = new DBModel();
dBm.setRevision(upIdx); dBm.setRevision(upIdx);
dbModelFacade.create(dBm); dbModelFacade.create(dBm);
......
...@@ -493,7 +493,9 @@ public class UserBean implements UserBeanLocal { ...@@ -493,7 +493,9 @@ public class UserBean implements UserBeanLocal {
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
msg.setSubject(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_SUBJECT)); msg.setSubject(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_SUBJECT));
msg.setMessage(MessageFormat.format(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_CONTENT), MessageFormat.format(url, token), creator.getUser().getWholeName())); String formatUrl = MessageFormat.format(url, token);
logger.info("Sending invite url {}", formatUrl);
msg.setMessage(MessageFormat.format(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_CONTENT), formatUrl, creator.getUser().getWholeName()));
msg.setToAddress(invitemail); msg.setToAddress(invitemail);
utilbean.sendMail(msg); utilbean.sendMail(msg);
return true; return true;
...@@ -507,13 +509,35 @@ public class UserBean implements UserBeanLocal { ...@@ -507,13 +509,35 @@ public class UserBean implements UserBeanLocal {
@Override @Override
@PermitAll @PermitAll
public void createFromToken(EventUser user, String token) { public EventUser acceptInviteForExistingUser(String username, String password, String token) {
GroupMembership gm = findToken(token); GroupMembership gm = findToken(token);
if (gm == null || gm.getUser() != null || gm.getInviteAccepted() != null) {
return null;
}
User u = userFacade.findByLogin(username);
EventUser eu = this.getEventUser(u, true);
gm.setUser(eu);
gm.setInviteAccepted(Calendar.getInstance());
return eu;
}
@Override
@PermitAll
public boolean createFromInviteToken(EventUser user, String token) {
GroupMembership gm = findToken(token);
// Check that invite has not already been accepted!
if (gm == null || gm.getUser() != null || gm.getInviteAccepted() != null) {
return false;
}
user.setEvent(eventBean.getCurrentEvent()); user.setEvent(eventBean.getCurrentEvent());
gm.setUser(user); gm.setUser(user);
gm.setInviteAccepted(Calendar.getInstance()); gm.setInviteAccepted(Calendar.getInstance());
eventUserFacade.create(user); eventUserFacade.create(user);
return true;
} }
// private void jaiCrop() // private void jaiCrop()
...@@ -885,4 +909,5 @@ public class UserBean implements UserBeanLocal { ...@@ -885,4 +909,5 @@ public class UserBean implements UserBeanLocal {
return eventUserFacade.getOtherOrganisationsEventuser(user, event); return eventUserFacade.getOtherOrganisationsEventuser(user, event);
} }
} }
\ No newline at end of file
...@@ -57,7 +57,9 @@ public interface UserBeanLocal { ...@@ -57,7 +57,9 @@ public interface UserBeanLocal {
GroupMembership findToken(String token); GroupMembership findToken(String token);
void createFromToken(EventUser user, String token); boolean createFromInviteToken(EventUser user, String token);
EventUser acceptInviteForExistingUser(String username, String password, String token);
UserImage findUserimageFORCE(Integer id); UserImage findUserimageFORCE(Integer id);
......
...@@ -32,6 +32,12 @@ ...@@ -32,6 +32,12 @@
<id>iudex</id> <id>iudex</id>
<url>http://iudex.fi/maven/</url> <url>http://iudex.fi/maven/</url>
</repository> </repository>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories> </repositories>
<dependencies> <dependencies>
<dependency> <dependency>
...@@ -47,7 +53,7 @@ ...@@ -47,7 +53,7 @@
<dependency> <dependency>
<groupId>org.primefaces</groupId> <groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId> <artifactId>primefaces</artifactId>
<version>4.0</version> <version>5.0-RC2</version>
</dependency> </dependency>
......
...@@ -3,15 +3,6 @@ ...@@ -3,15 +3,6 @@
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/> <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<dependent-module archiveName="moya-beans-client-0.2.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/MoyaBeansClient/MoyaBeansClient">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="moya-database-0.2.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/MoyaDatabase/MoyaDatabase">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="moya-utils-0.2.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/MoyaUtilities/MoyaUtilities">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="java-output-path" value="/MoyaTerminalWeb/build/classes"/> <property name="java-output-path" value="/MoyaTerminalWeb/build/classes"/>
<property name="context-root" value="moya-terminal-web"/> <property name="context-root" value="moya-terminal-web"/>
</wb-module> </wb-module>
......
<root> <root>
<facet id="jst.jsf"> <facet id="jst.jsf">
<node name="libprov"> <node name="libprov">
<attribute name="provider-id" value="jsf-no-op-library-provider"/> <attribute name="provider-id" value="GlassFish-4-SystemLibrary-JSF"/>
</node> </node>
</facet> </facet>
<facet id="jst.jaxrs"> <facet id="jst.jaxrs">
......
...@@ -2,11 +2,9 @@ ...@@ -2,11 +2,9 @@
<faceted-project> <faceted-project>
<runtime name="GlassFish 4.0"/> <runtime name="GlassFish 4.0"/>
<fixed facet="wst.jsdt.web"/> <fixed facet="wst.jsdt.web"/>
<fixed facet="jst.web"/>
<fixed facet="java"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="wst.jsdt.web" version="1.0"/> <installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.7"/> <installed facet="java" version="1.7"/>
<installed facet="jst.jsf" version="2.0"/> <installed facet="jst.jsf" version="2.2"/>
<installed facet="jst.web" version="3.1"/>
<installed facet="jst.jaxrs" version="2.0"/> <installed facet="jst.jaxrs" version="2.0"/>
</faceted-project> </faceted-project>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>MoyaTerminalWeb</display-name> <display-name>MoyaTerminalWeb</display-name>
<context-param> <context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value> <param-value>true</param-value>
</context-param> </context-param>
<welcome-file-list> <welcome-file-list>
<welcome-file>index.html</welcome-file> <welcome-file>index.html</welcome-file>
<welcome-file>index.jsf</welcome-file> <welcome-file>index.jsf</welcome-file>
</welcome-file-list> </welcome-file-list>
<session-config> <session-config>
<session-timeout>30</session-timeout> <session-timeout>30</session-timeout>
</session-config> </session-config>
...@@ -19,12 +19,10 @@ ...@@ -19,12 +19,10 @@
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup> <load-on-startup>1</load-on-startup>
</servlet> </servlet>
<servlet-mapping> <servlet-mapping>
<servlet-name>Faces Servlet</servlet-name> <servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern> <url-pattern>*.jsf</url-pattern>
</servlet-mapping> </servlet-mapping>
<context-param> <context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name> <param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value> <param-value>Development</param-value>
...@@ -33,25 +31,10 @@ ...@@ -33,25 +31,10 @@
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value> <param-value>true</param-value>
</context-param> </context-param>
<!--
<filter>
<display-name>PrimefacesFileupload</display-name>
<filter-name>PrimefacesFileupload</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimefacesFileupload</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
-->
<login-config> <login-config>
<auth-method>CLIENT-CERT</auth-method> <auth-method>CLIENT-CERT</auth-method>
<realm-name>certificate</realm-name> <realm-name>certificate</realm-name>
</login-config> </login-config>
<security-constraint> <security-constraint>
<display-name>Forbidden resource</display-name> <display-name>Forbidden resource</display-name>
<web-resource-collection> <web-resource-collection>
...@@ -68,7 +51,6 @@ ...@@ -68,7 +51,6 @@
<transport-guarantee>CONFIDENTIAL</transport-guarantee> <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint> </user-data-constraint>
</security-constraint> </security-constraint>
<security-constraint> <security-constraint>
<display-name>Resource that needs cert auth</display-name> <display-name>Resource that needs cert auth</display-name>
<web-resource-collection> <web-resource-collection>
...@@ -82,24 +64,6 @@ ...@@ -82,24 +64,6 @@
<transport-guarantee>CONFIDENTIAL</transport-guarantee> <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint> </user-data-constraint>
</security-constraint> </security-constraint>
<!--
<security-constraint>
<display-name>Resource that needs cert auth</display-name>
<web-resource-collection>
<web-resource-name>BortalTerminalWebResource</web-resource-name>
<url-pattern>/faces/*</url-pattern>
<url-pattern>*.jsf</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>TERMINAL</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint> -->
<persistence-unit-ref> <persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name> <persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
</persistence-unit-ref> </persistence-unit-ref>
......
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>fi.codecrew.moya</groupId> <groupId>fi.codecrew.moya</groupId>
<artifactId>moya-terminal-web</artifactId> <artifactId>moya-terminal-web</artifactId>
...@@ -25,14 +26,27 @@ ...@@ -25,14 +26,27 @@
</plugin> </plugin>
<plugin> <plugin>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>2.3</version> <version>2.4</version>
<configuration> <configuration>
<warSourceDirectory>WebContent</warSourceDirectory> <warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml> <failOnMissingWebXml>false</failOnMissingWebXml>
<packagingIncludes>WEB-INF/lib/javamelody-core*,WEB-INF/lib/primefaces*,**/*.xml,**/*.xhtml,**/*.properties,**/*.class,**/*.png,**/*.css,**/*.js,resources/*</packagingIncludes>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<repositories>
<repository>
<id>iudex</id>
<url>http://iudex.fi/maven/</url>
</repository>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>fi.codecrew.moya</groupId> <groupId>fi.codecrew.moya</groupId>
...@@ -47,7 +61,12 @@ ...@@ -47,7 +61,12 @@
<dependency> <dependency>
<groupId>org.primefaces</groupId> <groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId> <artifactId>primefaces</artifactId>
<version>4.0</version> <version>5.0-RC2</version>
</dependency>
<dependency>
<groupId>net.bull.javamelody</groupId>
<artifactId>javamelody-core</artifactId>
<version>1.46.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<reader:bacendReader /> <reader:backendReader />
</composite:implementation> </composite:implementation>
......
...@@ -143,16 +143,24 @@ ...@@ -143,16 +143,24 @@
<aside class="flex1"> <aside class="flex1">
<div id="aside"> <div id="aside">
<div class="ui-widget-header">Login</div> <div class="ui-widget-header">Login</div>
<div class="ui-widget-content" style="text-align: center"> <div class="ui-widget-content" style="text-align: center;">
<ui:fragment rendered="#{sessionHandler.loggedIn}"> <ui:fragment rendered="#{sessionHandler.loggedIn}">
<h:outputText value="#{i18n['template.loggedInAs']}" /> <h:outputText value="#{i18n['template.loggedInAs']}" />
<br /> <br />
<b><h:outputText value="#{sessionHandler.currentUser.nick}" /></b> <b><h:outputText value="#{sessionHandler.currentUser.nick}" /></b>
</ui:fragment> </ui:fragment>
<div> <ui:fragment rendered="#{!sessionHandler.loggedIn}">
<tools:loginLogout /> <div style="text-align: left; padding: 0.7em;">
<h:form>
<p:inputText styleClass="form" id="linelogin" value="#{authView.login}" />
<br />
<p:password styleClass="form" id="linepwd" value="#{authView.password}" />
<br />
<p:commandButton styleClass="button" id="onelinesubmit" action="#{authView.executeLoginAction}" ajax="false" value="#{i18n['login.submit']}" />
</h:form>
</div> </div>
</ui:fragment>
</div> </div>
<br /> <br />
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body> <h:body>
<ui:composition template="#{sessionHandler.template}"> <ui:composition template="#{sessionHandler.template}">
<f:metadata> <f:metadata>
...@@ -10,10 +10,31 @@ ...@@ -10,10 +10,31 @@
<f:viewParam name="token" value="#{inviteAcceptView.token}" /> <f:viewParam name="token" value="#{inviteAcceptView.token}" />
</f:metadata> </f:metadata>
<ui:define name="title"> <ui:define name="title">
<h1><h:outputText value="#{i18n['user.invite.header']}" /></h1> <h1>
<h:outputText value="#{i18n['user.invite.header']}" />
</h1>
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<ui:fragment rendered="#{!inviteAcceptView.done}"> <ui:fragment rendered="#{!inviteAcceptView.done}">
<h2>
<h:outputText value="#{i18n['invite.existingUserHeader']}" />
</h2>
<h:form>
<h:panelGrid columns="2">
<h:outputLabel for="login" />
<p:inputText label="#{i18n['login.username']}" id="login" value="#{inviteAcceptView.username}" />
<h:outputLabel for="pwd" />
<p:password label="#{i18n['login.password']}" id="pwd" value="#{inviteAcceptView.password}" />
</h:panelGrid>
<p:commandButton id="submit" action="#{inviteAcceptView.loginWithExisting()}" ajax="false" value="#{i18n['login.submit']}" />
</h:form>
<h2>
<h:outputText value="#{i18n['invite.createNewUserHeader']}" />
</h2>
<users:create creating="true" commitaction="#{inviteAcceptView.createUser()}" commitvalue="#{i18n['user.create']}" /> <users:create creating="true" commitaction="#{inviteAcceptView.createUser()}" commitvalue="#{i18n['user.create']}" />
</ui:fragment> </ui:fragment>
</ui:define> </ui:define>
......
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="#{sessionHandler.template}"> <ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{inviteView.initView}" />
</f:metadata>
<ui:define name="title"> <ui:define name="title">
<h1>#{i18n['user.page.invite']}</h1> <h1>#{i18n['user.page.invite']}</h1>
</ui:define> </ui:define>
......
...@@ -36,11 +36,16 @@ ...@@ -36,11 +36,16 @@
</plugins> </plugins>
</build> </build>
<repositories> <repositories>
<repository> <repository>
<id>iudex</id> <id>iudex</id>
<url>http://iudex.fi/maven/</url> <url>http://iudex.fi/maven/</url>
</repository> </repository>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories> </repositories>
<dependencies> <dependencies>
<dependency> <dependency>
...@@ -76,7 +81,7 @@ ...@@ -76,7 +81,7 @@
<dependency> <dependency>
<groupId>org.primefaces</groupId> <groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId> <artifactId>primefaces</artifactId>
<version>4.0</version> <version>5.0-RC2</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -66,6 +66,10 @@ public class HostnameFilter implements Filter { ...@@ -66,6 +66,10 @@ public class HostnameFilter implements Filter {
// Nothing... // Nothing...
} }
private enum AuthType {
UNKNOWN, ANON, REST, USER
}
/** /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/ */
...@@ -74,7 +78,7 @@ public class HostnameFilter implements Filter { ...@@ -74,7 +78,7 @@ public class HostnameFilter implements Filter {
FilterChain chain) throws IOException, ServletException { FilterChain chain) throws IOException, ServletException {
// logger.info("HostnameFilter called!"); // logger.info("HostnameFilter called!");
HttpServletRequest httpRequest = null; HttpServletRequest httpRequest = null;
AuthType authtype = AuthType.UNKNOWN;
if (request != null && request instanceof HttpServletRequest) { if (request != null && request instanceof HttpServletRequest) {
httpRequest = ((HttpServletRequest) request); httpRequest = ((HttpServletRequest) request);
parseHostname(httpRequest); parseHostname(httpRequest);
...@@ -82,6 +86,7 @@ public class HostnameFilter implements Filter { ...@@ -82,6 +86,7 @@ public class HostnameFilter implements Filter {
if (httpRequest.getUserPrincipal() == null) { if (httpRequest.getUserPrincipal() == null) {
// Check if we are logging in with rest // Check if we are logging in with rest
if (RestApplicationEntrypoint.REST_PATH.equals(httpRequest.getServletPath())) { if (RestApplicationEntrypoint.REST_PATH.equals(httpRequest.getServletPath())) {
authtype = AuthType.REST;
if (!restAuth(httpRequest, response)) { if (!restAuth(httpRequest, response)) {
response.getWriter().write("REST authentication failed!"); response.getWriter().write("REST authentication failed!");
if (response instanceof HttpServletResponse) { if (response instanceof HttpServletResponse) {
...@@ -92,6 +97,7 @@ public class HostnameFilter implements Filter { ...@@ -92,6 +97,7 @@ public class HostnameFilter implements Filter {
} }
} else { } else {
try { try {
authtype = AuthType.ANON;
httpRequest.login(User.ANONYMOUS_LOGINNAME, null); httpRequest.login(User.ANONYMOUS_LOGINNAME, null);
} catch (Throwable t) { } catch (Throwable t) {
logger.warn("Error logging in as anonymous... ignoring.. ", t); logger.warn("Error logging in as anonymous... ignoring.. ", t);
...@@ -100,6 +106,7 @@ public class HostnameFilter implements Filter { ...@@ -100,6 +106,7 @@ public class HostnameFilter implements Filter {
} }
else if (!httpRequest.getUserPrincipal().getName().equals(User.ANONYMOUS_LOGINNAME)) else if (!httpRequest.getUserPrincipal().getName().equals(User.ANONYMOUS_LOGINNAME))
{ {
authtype = AuthType.USER;
sessionmgmt.updateSessionUser(httpRequest.getSession().getId(), httpRequest.getUserPrincipal().getName()); sessionmgmt.updateSessionUser(httpRequest.getSession().getId(), httpRequest.getUserPrincipal().getName());
} }
...@@ -107,6 +114,11 @@ public class HostnameFilter implements Filter { ...@@ -107,6 +114,11 @@ public class HostnameFilter implements Filter {
// pass the request along the filter chain // pass the request along the filter chain
try { try {
chain.doFilter(request, response); chain.doFilter(request, response);
} catch (Throwable t) {
if (AuthType.REST == authtype) {
logger.warn("Caught exception at rest:", t);
}
throw t;
} finally { } finally {
BortalLocalContextHolder.cleanupThread(); BortalLocalContextHolder.cleanupThread();
} }
...@@ -124,6 +136,7 @@ public class HostnameFilter implements Filter { ...@@ -124,6 +136,7 @@ public class HostnameFilter implements Filter {
// } // }
private boolean restAuth(HttpServletRequest httpRequest, ServletResponse response) { private boolean restAuth(HttpServletRequest httpRequest, ServletResponse response) {
// logger.info("Trying to authenticate for REST query. url {}, params '{}' method: {}, content type {}, and length {}", httpRequest.getRequestURL(), httpRequest.getQueryString(), httpRequest.getMethod(), httpRequest.getContentType(), httpRequest.getContentLength());
StringBuilder hashBuilder = new StringBuilder(); StringBuilder hashBuilder = new StringBuilder();
hashBuilder.append("rest:"); hashBuilder.append("rest:");
...@@ -161,14 +174,14 @@ public class HostnameFilter implements Filter { ...@@ -161,14 +174,14 @@ public class HostnameFilter implements Filter {
protected void parseHostname(HttpServletRequest httpRequest) protected void parseHostname(HttpServletRequest httpRequest)
{ {
// logger.info("Path info {}", httpRequest.getPathInfo()); // logger.info("Path info {}", httpRequest.getPathInfo()); // null
// logger.info("querystring {}", httpRequest.getQueryString()); // logger.info("querystring {}", httpRequest.getQueryString()); // ln=primefaces&amp;v=4.0
// logger.info("ctxpath {}", httpRequest.getContextPath()); // logger.info("ctxpath {}", httpRequest.getContextPath()); // /MoyaWeb
// logger.info("pathTranslated {}", httpRequest.getPathTranslated()); // logger.info("pathTranslated {}", httpRequest.getPathTranslated()); // null
// logger.info("requestUri {}", httpRequest.getRequestURI()); // logger.info("requestUri {}", httpRequest.getRequestURI()); // /MoyaWeb/javax.faces.resource/jquery/jquery.js.jsf
// logger.info("URL {}", httpRequest.getRequestURL().toString()); // logger.info("URL {}", httpRequest.getRequestURL().toString()); // http://localhost:8080/MoyaWeb/javax.faces.resource/jquery/jquery.js.jsf
// logger.info("servletpath {}", httpRequest.getServletPath()); // logger.info("servletpath {}", httpRequest.getServletPath()); // /javax.faces.resource/jquery/jquery.js.jsf
// logger.info("servletCtx {}", httpRequest.getServletContext()); // logger.info("servletCtx {}", httpRequest.getServletContext()); // org.apache.catalina.core.ApplicationContextFacade@6dd89c3d
StringBuffer url = httpRequest.getRequestURL(); StringBuffer url = httpRequest.getRequestURL();
// logger.info("Original hostname {}", url); // logger.info("Original hostname {}", url);
// Subject subj = Subject.getSubject(AccessController.getContext()); // Subject subj = Subject.getSubject(AccessController.getContext());
......
...@@ -429,7 +429,9 @@ inventory.product.quantity = Quantatity ...@@ -429,7 +429,9 @@ inventory.product.quantity = Quantatity
inventory.product.submitButton = Add inventory.product.submitButton = Add
inventory.product.title = Add items to storage inventory.product.title = Add items to storage
invite.createNewUserHeader = Create new user
invite.emailexists = User with that email address already exists in the system. invite.emailexists = User with that email address already exists in the system.
invite.existingUserHeader = Login with existing username
invite.notFound = Invite invalid or already used invite.notFound = Invite invalid or already used
invite.successfull = Invite sent successfully invite.successfull = Invite sent successfully
invite.userCreateSuccessfull = User successfully created. You can now login. invite.userCreateSuccessfull = User successfully created. You can now login.
......
...@@ -440,7 +440,9 @@ inventory.product.quantity = M\u00E4\u00E4r\u00E4 ...@@ -440,7 +440,9 @@ inventory.product.quantity = M\u00E4\u00E4r\u00E4
inventory.product.submitButton = Lis\u00E4\u00E4 inventory.product.submitButton = Lis\u00E4\u00E4
inventory.product.title = Lis\u00E4\u00E4 tuottetta varastoon inventory.product.title = Lis\u00E4\u00E4 tuottetta varastoon
invite.createNewUserHeader = Luo uusi k\u00E4ytt\u00E4j\u00E4tunnus
invite.emailexists = J\u00E4rjestelm\u00E4ss\u00E4 on jo k\u00E4ytt\u00E4j\u00E4tunnus samalla s\u00E4hk\u00F6postiosoitteella. invite.emailexists = J\u00E4rjestelm\u00E4ss\u00E4 on jo k\u00E4ytt\u00E4j\u00E4tunnus samalla s\u00E4hk\u00F6postiosoitteella.
invite.existingUserHeader = Kirjaudu sis\u00E4\u00E4n olemassaolevalla tunnuksella
invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty. invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty.
invite.successfull = Kutsu l\u00E4hetetty invite.successfull = Kutsu l\u00E4hetetty
invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n. invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n.
......
...@@ -14,6 +14,8 @@ import javax.ws.rs.PathParam; ...@@ -14,6 +14,8 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -92,6 +94,15 @@ public class MapAdminView { ...@@ -92,6 +94,15 @@ public class MapAdminView {
return Response.ok().build(); return Response.ok().build();
} }
@GET
@Path("/place/")
public Response getPlaceError() {
ResponseBuilder ret = Response.ok();
ret = ret.status(Status.METHOD_NOT_ALLOWED);
ret.entity("Method not allowed!\nGET is not supported for /place/. See api for correct use!");
return ret.build();
}
@POST @POST
@Path("/place/") @Path("/place/")
public Response createPlace(PlaceInputPojo create) { public Response createPlace(PlaceInputPojo create) {
......
...@@ -4,7 +4,6 @@ import java.io.PrintWriter; ...@@ -4,7 +4,6 @@ import java.io.PrintWriter;
import java.io.Serializable; import java.io.Serializable;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar;
import java.util.Map; import java.util.Map;
import java.util.zip.CRC32; import java.util.zip.CRC32;
...@@ -55,9 +54,8 @@ public class ErrorPageView implements Serializable { ...@@ -55,9 +54,8 @@ public class ErrorPageView implements Serializable {
public String getStackTraceHash() { public String getStackTraceHash() {
FacesContext context = FacesContext.getCurrentInstance(); FacesContext context = FacesContext.getCurrentInstance();
Map requestMap = context.getExternalContext().getRequestMap(); Map<?, ?> requestMap = context.getExternalContext().getRequestMap();
Throwable ex = Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
(Throwable) requestMap.get("javax.servlet.error.exception");
CRC32 stackHash = new CRC32(); CRC32 stackHash = new CRC32();
stackHash.update(Arrays.toString(ex.getStackTrace()).getBytes()); stackHash.update(Arrays.toString(ex.getStackTrace()).getBytes());
...@@ -66,7 +64,7 @@ public class ErrorPageView implements Serializable { ...@@ -66,7 +64,7 @@ public class ErrorPageView implements Serializable {
} }
public String getTime() { public String getTime() {
String stamp = "0x" + Long.toHexString(Calendar.getInstance().getTimeInMillis()); String stamp = "0x" + Long.toHexString(System.currentTimeMillis());
logger.error("Error occured at {} trail {}", stamp, getTrail()); logger.error("Error occured at {} trail {}", stamp, getTrail());
return stamp; return stamp;
} }
......
...@@ -2,8 +2,15 @@ package fi.codecrew.moya.web.cdiview.shop; ...@@ -2,8 +2,15 @@ package fi.codecrew.moya.web.cdiview.shop;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.UserBeanLocal; import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
...@@ -19,6 +26,8 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -19,6 +26,8 @@ public class InviteAcceptView extends GenericCDIView {
private static final long serialVersionUID = 1972813452261491814L; private static final long serialVersionUID = 1972813452261491814L;
private String token; private String token;
private String username;
private String password;
@Inject @Inject
private UserView userview; private UserView userview;
...@@ -31,6 +40,8 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -31,6 +40,8 @@ public class InviteAcceptView extends GenericCDIView {
private GroupMembership membership; private GroupMembership membership;
private static final Logger logger = LoggerFactory.getLogger(InviteAcceptView.class);
public void initView() { public void initView() {
if (membership == null) { if (membership == null) {
...@@ -48,10 +59,57 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -48,10 +59,57 @@ public class InviteAcceptView extends GenericCDIView {
} }
private HttpServletRequest getRequest() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Object request = externalContext.getRequest();
return request instanceof HttpServletRequest ? (HttpServletRequest) request : null;
}
public String loginWithExisting() {
EventUser eu = userbean.acceptInviteForExistingUser(username, password, token);
if (eu != null) {
login(username, password);
}
this.username = null;
this.password = null;
super.addFaceMessage("invite.userCreateSuccessfull");
return null;
}
private void login(String usr, String pwd) {
HttpServletRequest req = getRequest();
String existingUsername = null;
if (req.getUserPrincipal() != null) {
if (User.ANONYMOUS_LOGINNAME.equals(req.getUserPrincipal().getName())) {
try {
req.logout();
} catch (ServletException e) {
logger.warn("Logging out anonymous failed!", e);
}
} else {
existingUsername = req.getUserPrincipal().getName();
}
}
if (existingUsername == null) {
try {
req.login(usr, pwd);
} catch (ServletException e) {
logger.warn("Login failed for invite user " + usr, e);
}
}
}
public String createUser() { public String createUser() {
user.getUser().resetPassword(userview.getPassword()); user.getUser().resetPassword(userview.getPassword());
userbean.createFromToken(user, token); if (userbean.createFromInviteToken(user, token)) {
login(user.getUser().getLogin(), userview.getPassword());
}
super.addFaceMessage("invite.userCreateSuccessfull"); super.addFaceMessage("invite.userCreateSuccessfull");
done = true; done = true;
user = null; user = null;
...@@ -81,4 +139,21 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -81,4 +139,21 @@ public class InviteAcceptView extends GenericCDIView {
public void setDone(boolean done) { public void setDone(boolean done) {
this.done = done; this.done = done;
} }
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
} }
...@@ -6,7 +6,11 @@ import javax.faces.context.ExternalContext; ...@@ -6,7 +6,11 @@ import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.UserBeanLocal; import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named @Named
...@@ -20,6 +24,12 @@ public class InviteView extends GenericCDIView { ...@@ -20,6 +24,12 @@ public class InviteView extends GenericCDIView {
@EJB @EJB
private transient UserBeanLocal userbean; private transient UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(InviteView.class);
public void initView() {
super.requirePermissions(UserPermission.INVITE_USERS);
}
public String invite() { public String invite() {
ExternalContext extcontext = FacesContext.getCurrentInstance().getExternalContext(); ExternalContext extcontext = FacesContext.getCurrentInstance().getExternalContext();
...@@ -40,7 +50,6 @@ public class InviteView extends GenericCDIView { ...@@ -40,7 +50,6 @@ public class InviteView extends GenericCDIView {
path.append("/") path.append("/")
.append(FacesContext.getCurrentInstance().getExternalContext().getContextName()) .append(FacesContext.getCurrentInstance().getExternalContext().getContextName())
.append("/user/acceptInvite.jsf?token={0}"); .append("/user/acceptInvite.jsf?token={0}");
boolean ret = userbean.invite(invitemail, path.toString()); boolean ret = userbean.invite(invitemail, path.toString());
if (ret) { if (ret) {
this.addFaceMessage("invite.successfull"); this.addFaceMessage("invite.successfull");
......
...@@ -102,8 +102,7 @@ public class UserSearchView extends PaginationView<UserWrapper> { ...@@ -102,8 +102,7 @@ public class UserSearchView extends PaginationView<UserWrapper> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
public List<EventUser> load(int first, int pageSize, String sortField, public List<EventUser> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
SortOrder sortOrder, Map<String, String> filters) {
UserSearchQuery sq = getSearchQuery(); UserSearchQuery sq = getSearchQuery();
sq.setPagesize(pageSize); sq.setPagesize(pageSize);
if (pageSize > 0) { if (pageSize > 0) {
...@@ -140,8 +139,7 @@ public class UserSearchView extends PaginationView<UserWrapper> { ...@@ -140,8 +139,7 @@ public class UserSearchView extends PaginationView<UserWrapper> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
public List<UserWrapper> load(int first, int pageSize, String sortField, public List<UserWrapper> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
SortOrder sortOrder, Map<String, String> filters) {
UserSearchQuery sq = getSearchQuery(); UserSearchQuery sq = getSearchQuery();
sq.setPagesize(pageSize); sq.setPagesize(pageSize);
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!