This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch csp
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/csp by this push:
     new f5e286e  [OPENMEETINGS-2165] sign-in dialog is improved
f5e286e is described below

commit f5e286e74f6f4de24b816c36e5840da166eeedd9
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sat Feb 1 17:19:15 2020 +0700

    [OPENMEETINGS-2165] sign-in dialog is improved
---
 .../apache/openmeetings/web/app/Application.java   | 17 ++++++-
 .../web/app/Application.properties.xml             |  1 +
 .../web/pages/auth/RegisterDialog.java             |  4 +-
 .../openmeetings/web/pages/auth/SignInDialog.html  | 57 ++++++++++++++--------
 .../openmeetings/web/pages/auth/SignInDialog.java  | 20 +++++---
 .../src/main/webapp/css/raw-general.css            | 15 +++++-
 pom.xml                                            |  2 +-
 7 files changed, 82 insertions(+), 34 deletions(-)

diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 988f386..70d9cfb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -51,6 +51,7 @@ import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -103,6 +104,8 @@ import 
org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
 import 
org.apache.wicket.core.request.handler.BookmarkableListenerRequestHandler;
 import org.apache.wicket.core.request.handler.ListenerRequestHandler;
 import org.apache.wicket.core.request.mapper.MountedMapper;
+import org.apache.wicket.csp.CSPDirective;
+import org.apache.wicket.csp.CSPHeaderConfiguration;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.filter.FilteringHeaderResponse;
 import org.apache.wicket.markup.html.IHeaderResponseDecorator;
@@ -179,6 +182,8 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
        private ClientManager cm;
        @Autowired
        private AppointmentDao appointmentDao;
+       @Autowired
+       private OAuth2Dao oauthDao;
 
        @Override
        protected void init() {
@@ -241,7 +246,7 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                //chain of Resource Loaders, if not found it will search in 
Wicket's internal
                //Resource Loader for a the property key
                getResourceSettings().getStringResourceLoaders().add(0, new 
LabelResourceLoader());
-               getCsp().blocking().strict();
+               final CSPHeaderConfiguration cspConfig = 
getcspConfig().strict();
                getRequestCycleListeners().add(new 
WebSocketAwareCsrfPreventionRequestCycleListener() {
                        @Override
                        public void onEndRequest(RequestCycle cycle) {
@@ -327,6 +332,12 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                        Version.logOMStarted();
                        recordingDao.resetProcessingStatus(); //we are starting 
so all processing recordings are now errors
 
+                       oauthDao.getActive().forEach(oauth -> {
+                               if (!Strings.isEmpty(oauth.getIconUrl())) {
+                                       
getCsp().blocking().add(CSPDirective.IMG_SRC, oauth.getIconUrl()); //FIXME TODO
+                                       cspConfig.add(CSPDirective.IMG_SRC, 
oauth.getIconUrl());
+                               }
+                       });
                        setInitComplete(true);
                } catch (Exception err) {
                        log.error("[appStart]", err);
@@ -357,6 +368,10 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                }
        }
 
+       public CSPHeaderConfiguration getcspConfig() {
+               return getCsp().reporting();
+       }
+
        public static OmAuthenticationStrategy getAuthenticationStrategy() {
                return 
(OmAuthenticationStrategy)get().getSecuritySettings().getAuthenticationStrategy();
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
index 2bef142..97d75f0 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
@@ -1003,4 +1003,5 @@ see https://openmeetings.apache.org/LanguageEditor.html 
for Details
        <entry key="admin.room.wait-moderator.info"><![CDATA[No one can use 
room until moderator will join]]></entry>
        <entry key="admin.room.wait-moderator.label"><![CDATA[Wait 
moderator]]></entry>
        <entry key="wait-moderator.title"><![CDATA[Please be patient 
...]]></entry>
+       <entry key="lbl.or"><![CDATA[or]]></entry>
 </properties>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
index 581fad4..95a986b 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
@@ -56,7 +56,7 @@ import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.ladda.LaddaAjaxButton;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
 
 public class RegisterDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
@@ -95,7 +95,7 @@ public class RegisterDialog extends Modal<String> {
                setUseCloseHandler(true);
                setBackdrop(Backdrop.STATIC);
 
-               addButton(new LaddaAjaxButton("button", new 
ResourceModel("121"), form, Buttons.Type.Primary)); // register
+               addButton(new SpinnerAjaxButton("button", new 
ResourceModel("121"), form, Buttons.Type.Primary)); // register
                addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
index d510a92..369e416 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
@@ -22,37 +22,52 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:extend>
        <form wicket:id="signin" class="signin">
-               <div class="row no-gutters">
-                       <div wicket:id="credentials">
-                               <div class="row form-group no-gutters">
-                                       <div class="desc col-6"><label 
wicket:for="login"><wicket:message key="109"/></label></div>
-                                       <div class="col-5"><input 
wicket:id="login" type="text" value=""/></div>
-                               </div>
-                               <div class="row form-group no-gutters">
-                                       <div class="desc col-6"><label 
wicket:for="pass"><wicket:message key="110"/></label></div>
-                                       <div class="col-5"><input 
wicket:id="pass" type="password" value=""/></div>
+               <div wicket:id="credentials">
+                       <div class="form-group no-gutters">
+                               <div class="input-group">
+                                       <div class="input-group-prepend">
+                                               <span 
class="input-group-text"><i class="fa fa-user"></i></span>
+                                       </div>
+                                       <input wicket:id="login" 
class="form-control" type="text" value="" 
wicket:message="placeholder:109,title:109"/>
                                </div>
-                               <div class="row form-group no-gutters" 
wicket:id="ldap">
-                                       <div class="desc col-6"><label 
wicket:for="domain"><wicket:message key="1118"/></label></div>
-                                       <div class="col-5"><select 
wicket:id="domain"></select></div>
+                       </div>
+                       <div class="form-group no-gutters">
+                               <div class="input-group">
+                                       <div class="input-group-prepend">
+                                               <span 
class="input-group-text"><i class="fa fa-lock"></i></span>
+                                       </div>
+                                       <input wicket:id="pass" 
class="form-control" type="password" value="" 
wicket:message="placeholder:110,title:110"/>
                                </div>
-                               <div class="row form-group no-gutters">
-                                       <div class="col-6"></div>
-                                       <div class="col-5 remember">
-                                               <input wicket:id="rememberMe" 
type="checkbox" />
-                                               <label 
wicket:for="rememberMe"><wicket:message key="288" /></label>
+                       </div>
+                       <div class="form-group no-gutters" wicket:id="ldap">
+                               <div class="input-group">
+                                       <div class="input-group-prepend">
+                                               <span 
class="input-group-text"><i class="fa fa-users"></i></span>
                                        </div>
+                                       <select wicket:id="domain" 
class="form-control" wicket:message="title:1118"></select>
                                </div>
                        </div>
-                       <div wicket:id="oauth" class="oauth-section col-4">
-                               <div wicket:id="oauthList">
-                                       <button wicket:id="oauthBtn"><span 
class="provider" wicket:id="label"></span></button>
+                       <div class="row form-group no-gutters">
+                               <div class="col-6 remember">
+                                       <input wicket:id="rememberMe" 
type="checkbox" />
+                                       <label 
wicket:for="rememberMe"><wicket:message key="288" /></label>
+                               </div>
+                               <div class="col-5">
+                                       <a class="text-primary" 
wicket:id="forget"><wicket:message key="311"/></a>
                                </div>
                        </div>
                </div>
+               <div wicket:id="oauth" class="oauth-section">
+                       <div class="or-seperator">
+                               <i><wicket:message key="lbl.or"/></i>
+                       </div>
+                       <div wicket:id="oauthList">
+                               <button wicket:id="oauthBtn" class="btn 
btn-outline-info"><span class="provider" wicket:id="label"></span></button>
+                       </div>
+               </div>
                <div wicket:id="feedback" class="error"></div>
                <div class="row no-gutters">
-                       <div class="col-6"><a class="text-primary" 
wicket:id="forget"><wicket:message key="311"/></a></div>
+                       <div class="col-6"></div>
                        <div class="col-5"><a class="text-primary" 
wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a></div>
                </div>
                <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
index 88f3bc2..9b72502 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
@@ -44,6 +44,8 @@ import org.apache.wicket.RestartResponseException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.CheckBox;
@@ -72,7 +74,7 @@ import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.ladda.LaddaAjaxButton;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
 
 public class SignInDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
@@ -113,7 +115,7 @@ public class SignInDialog extends Modal<String> {
                                register.show(target);
                        }
                });
-               addButton(new LaddaAjaxButton("button", new 
ResourceModel("112"), form, Buttons.Type.Primary)); // Login
+               addButton(new SpinnerAjaxButton("button", new 
ResourceModel("112"), form, Buttons.Type.Primary)); // Login
 
                super.onInitialize();
        }
@@ -176,7 +178,7 @@ public class SignInDialog extends Modal<String> {
                        };
                        add(ab);
                        setDefaultButton(ab);
-                       add(new AjaxLink<Void>("forget") {
+                       credentials.add(new AjaxLink<Void>("forget") {
                                private static final long serialVersionUID = 1L;
 
                                @Override
@@ -202,16 +204,20 @@ public class SignInDialog extends Modal<String> {
                                                        public void onSubmit() {
                                                                showAuth(s);
                                                        }
+
+                                                       @Override
+                                                       public void 
renderHead(IHeaderResponse response) {
+                                                               if 
(!Strings.isEmpty(s.getIconUrl())) {
+                                                                       
response.render(CssHeaderItem.forCSS("#" + this.getMarkupId() + " .provider 
{background-image: url(" + s.getIconUrl() + ")}", this.getMarkupId()));
+                                                               }
+                                                       }
                                                };
                                                Component lbl = new 
Label("label", s.getName());
-                                               if 
(!Strings.isEmpty(s.getIconUrl())) {
-                                                       
lbl.add(AttributeModifier.replace("style", String.format("background-image: 
url(%s)", s.getIconUrl())));
-                                               }
                                                btn.add(lbl);
                                                
item.add(btn.setDefaultFormProcessing(false)); //skip all rules, go to redirect
+                                               item.setRenderBodyOnly(true);
                                        }
                                }).setVisible(showOauth));
-                       credentials.add(AttributeModifier.append("class", 
showOauth ? "col-8" : "col-12"));
                        if (showOauth) {
                                add(AttributeModifier.append("class", "wide"));
                        }
diff --git a/openmeetings-web/src/main/webapp/css/raw-general.css 
b/openmeetings-web/src/main/webapp/css/raw-general.css
index b054b4e..d734e6a 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general.css
@@ -22,8 +22,7 @@ html, body {
        box-sizing: initial; /*reset bootstrap box sizing*/
 }
 .signin .oauth-section {
-       border-left: 2px dotted;
-       padding-left: 5px;
+       padding-bottom: 20px;
 }
 .signin .oauth-section .provider {
        background-position: 0 0;
@@ -34,6 +33,18 @@ html, body {
 .signin .remember {
        white-space: nowrap;
 }
+.signin .or-seperator {
+       margin-top: 20px;
+       text-align: center;
+       border-top: 1px solid #cccccc;
+}
+.signin .or-seperator i {
+       padding: 0 10px;
+       background: #ffffff;
+       position: relative;
+       top: -11px;
+       z-index: 1;
+}
 .signin-forget .form-check-label {
        padding-right: 10px;
 }
diff --git a/pom.xml b/pom.xml
index aaf39e5..6364945 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,7 +77,7 @@
                <wicket.version>9.0.0-M5-SNAPSHOT</wicket.version>
                <wicketju.version>9.0.0-SNAPSHOT</wicketju.version>
                <wickets.version>9.0.0-M5-SNAPSHOT</wickets.version>
-               
<wicket-bootstrap.version>4.0.0-M1-SNAPSHOT</wicket-bootstrap.version>
+               
<wicket-bootstrap.version>5.0.0-M1-SNAPSHOT</wicket-bootstrap.version>
                <red5-client.version>1.2.3</red5-client.version>
                <spring.version>5.2.3.RELEASE</spring.version>
                <mina.version>2.1.3</mina.version>

Reply via email to