You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by vd...@apache.org on 2013/08/09 10:30:56 UTC
svn commit: r1512200 - in /openmeetings/trunk/singlewebapp:
WebContent/languages/ src/org/apache/openmeetings/data/user/
src/org/apache/openmeetings/web/app/ src/org/apache/openmeetings/web/pages/
src/org/apache/openmeetings/web/pages/auth/
Author: vdegtyarev
Date: Fri Aug 9 08:30:56 2013
New Revision: 1512200
URL: http://svn.apache.org/r1512200
Log:
OPENMEETINGS-743 is fixed. Forgotten your password email link works as expected.
Added:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.html
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
Modified:
openmeetings/trunk/singlewebapp/WebContent/languages/russian.xml
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
Modified: openmeetings/trunk/singlewebapp/WebContent/languages/russian.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/WebContent/languages/russian.xml?rev=1512200&r1=1512199&r2=1512200&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/WebContent/languages/russian.xml (original)
+++ openmeetings/trunk/singlewebapp/WebContent/languages/russian.xml Fri Aug 9 08:30:56 2013
@@ -1011,7 +1011,7 @@ see http://openmeetings.apache.org/Langu
<value>новÑй паÑолÑ</value>
</string>
<string id="329" name="resetpass">
- <value>еÑе Ñаз введиÑе паÑолÑ</value>
+ <value>повÑоÑиÑе паÑолÑ</value>
</string>
<string id="330" name="resetpass">
<value>ÐÑ Ð²Ð²ÐµÐ»Ð¸ неиденÑиÑнÑе паÑоли.</value>
Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java?rev=1512200&r1=1512199&r2=1512200&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java (original)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java Fri Aug 9 08:30:56 2013
@@ -1293,7 +1293,7 @@ public class UserManager {
us.setResethash(cryptManager.getInstanceOfCrypt().createPassPhrase(
loginData));
usersDao.update(us, -1L);
- String reset_link = appLink + "?lzproxied=solo&hash="
+ String reset_link = appLink + "?hash="
+ us.getResethash();
String email = us.getAdresses().getEmail();
Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java?rev=1512200&r1=1512199&r2=1512200&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java Fri Aug 9 08:30:56 2013
@@ -26,6 +26,7 @@ import org.apache.openmeetings.remote.re
import org.apache.openmeetings.web.pages.ActivatePage;
import org.apache.openmeetings.web.pages.MainPage;
import org.apache.openmeetings.web.pages.NotInitedPage;
+import org.apache.openmeetings.web.pages.ResetPage;
import org.apache.openmeetings.web.pages.SwfPage;
import org.apache.openmeetings.web.pages.auth.SignInPage;
import org.apache.openmeetings.web.pages.install.InstallWizardPage;
@@ -106,6 +107,7 @@ public class Application extends Authent
mountPage("install", InstallWizardPage.class);
mountPage("signin", getSignInPageClass());
mountPage("activate", ActivatePage.class);
+ mountPage("reset", ResetPage.class);
mountResource("/recordings/mp4/${id}", new Mp4RecordingResourceReference());
mountResource("/recordings/ogg/${id}", new OggRecordingResourceReference());
}
Added: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.html?rev=1512200&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.html (added)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.html Fri Aug 9 08:30:56 2013
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+ <wicket:extend>
+ <div wicket:id="resetPassword"></div>
+ </wicket:extend>
+</html>
Added: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.java?rev=1512200&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.java (added)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/ResetPage.java Fri Aug 9 08:30:56 2013
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import org.apache.openmeetings.data.user.dao.UsersDao;
+import org.apache.openmeetings.persistence.beans.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.pages.auth.ResetPasswordDialog;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class ResetPage extends BaseNotInitedPage {
+ private static final long serialVersionUID = 1L;
+ private final String RESET_PARAM = "hash";
+
+ public ResetPage(PageParameters pp){
+ String resetHash = pp.get(RESET_PARAM).toString();
+ if (resetHash != null){
+ Object user = Application.getBean(UsersDao.class).getUserByHash(resetHash);
+ if (user instanceof User){
+ add(new ResetPasswordDialog("resetPassword", (User)user));
+ }
+ } else {
+ setResponsePage(Application.get().getSignInPageClass());
+ }
+ }
+
+}
Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html?rev=1512200&r1=1512199&r2=1512200&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html (original)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html Fri Aug 9 08:30:56 2013
@@ -40,5 +40,6 @@
<span wicket:id="feedback"></span>
<input type="submit" wicket:id="submit" class="invisible-form-component"/>
</form>
+ <div wicket:id="confirmDialog"></div>
</wicket:panel>
</html>
\ No newline at end of file
Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java?rev=1512200&r1=1512199&r2=1512200&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java (original)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java Fri Aug 9 08:30:56 2013
@@ -26,7 +26,7 @@ import java.util.List;
import org.apache.openmeetings.data.user.UserManager;
import org.apache.openmeetings.data.user.dao.UsersDao;
import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.openmeetings.web.pages.ResetPage;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -41,8 +41,13 @@ import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
public class ForgetPasswordDialog extends AbstractFormDialog<String> {
private static final long serialVersionUID = 8494008571497363018L;
@@ -54,6 +59,7 @@ public class ForgetPasswordDialog extend
private SignInDialog s;
private String name;
private Type type = Type.email;
+ final MessageDialog confirmDialog;
enum Type {
email
@@ -114,10 +120,29 @@ public class ForgetPasswordDialog extend
}
}
});
+ confirmDialog = new MessageDialog("confirmDialog", WebSession.getString(312), WebSession.getString(321), DialogButtons.OK, DialogIcon.INFO){
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void onConfigure(JQueryBehavior behavior) {
+ super.onConfigure(behavior);
+ behavior.setOption("dialogClass", Options.asString("no-close"));
+ behavior.setOption("closeOnEscape", false);
+ }
+
+ public void onClose(AjaxRequestTarget target, DialogButton button) {
+ s.open(target);
+ }
+ };
+ add(confirmDialog);
}
public void onClose(AjaxRequestTarget target, DialogButton button) {
- s.open(target);
+ if (button.equals(send)){
+ confirmDialog.open(target);
+ } else {
+ s.open(target);
+ }
}
public void setSignInDialog(SignInDialog s) {
@@ -148,6 +173,6 @@ public class ForgetPasswordDialog extend
protected void onSubmit(AjaxRequestTarget target) {
//FIXME forgot password should be handled be Wicket
getBean(UserManager.class).resetUser(type == Type.email ? name : "", type == Type.login ? name : ""
- , "" + getRequestCycle().urlFor(SwfPage.class, new PageParameters()));
+ , WebSession.get().getBaseUrl() + getRequestCycle().urlFor(ResetPage.class, new PageParameters()).toString().substring(2));
}
}
Added: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html?rev=1512200&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html (added)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html Fri Aug 9 08:30:56 2013
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+ <form wicket:id="form">
+ <table>
+ <tr>
+ <td><label wicket:for="login"><wicket:ommessage key="314" /></label></td>
+ <td><input type="text" readonly wicket:id="login" /></td>
+ </tr>
+ <tr>
+ <td><label><wicket:ommessage key="328" /></label></td>
+ <td><input type="password" wicket:id="password" /></td>
+ </tr>
+ <tr>
+ <td><label><wicket:ommessage key="329" /></label></td>
+ <td><input type="password" wicket:id="confirmPassword" /></td>
+ </tr>
+ </table>
+ <span wicket:id="feedback"></span>
+ <input type="submit" wicket:id="submit" class="invisible-form-component"/>
+ </form>
+ <div wicket:id="confirmReset"></div>
+</wicket:panel>
+</html>
\ No newline at end of file
Added: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java?rev=1512200&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java (added)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java Fri Aug 9 08:30:56 2013
@@ -0,0 +1,186 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.utils.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
+import org.apache.openmeetings.data.user.dao.UsersDao;
+import org.apache.openmeetings.persistence.beans.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.head.CssContentHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class ResetPasswordDialog extends AbstractFormDialog<String> {
+ private static final long serialVersionUID = -523469331995677748L;
+ private DialogButton resetBtn = new DialogButton(WebSession.getString(327));
+ private Form<String> form;
+ private FeedbackPanel feedback = new FeedbackPanel("feedback");
+ private PasswordTextField password;
+ private final User user;
+ final MessageDialog confirmReset;
+
+ public ResetPasswordDialog(String id, final User user) {
+ super(id, WebSession.getString(325));
+ this.user = user;
+ add(form = new Form<String>("form"){
+ private static final long serialVersionUID = -4553809631029292229L;
+ private TextField<String> login;
+ private PasswordTextField confirmPassword;
+ {
+ add(feedback.setOutputMarkupId(true));
+ add(login = new TextField<String>("login", Model.of(user.getLogin())));
+ login.setOutputMarkupId(true);
+ add(password = new PasswordTextField("password", new Model<String>()));
+ password.setOutputMarkupId(true);
+ password.setLabel(Model.of(WebSession.getString(328)));
+ ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+ password.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));
+ add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()));
+ confirmPassword.setOutputMarkupId(true);
+ confirmPassword.setLabel(Model.of(WebSession.getString(329)));
+ confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao)));
+
+ add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+ private static final long serialVersionUID = 5257502637636428620L;
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+ ResetPasswordDialog.this.onSubmit(target);
+ }
+
+ @Override
+ protected void onError(AjaxRequestTarget target, Form<?> form) {
+ ResetPasswordDialog.this.onError(target);
+ }
+ });
+ }
+
+ @Override
+ protected void onValidate() {
+ String pass = password.getConvertedInput();
+ if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) {
+ error(WebSession.getString(232));
+ }
+ super.onValidate();
+ }
+
+ });
+ confirmReset = new MessageDialog("confirmReset", WebSession.getString(325), WebSession.getString(332), DialogButtons.OK, DialogIcon.INFO){
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void onConfigure(JQueryBehavior behavior) {
+ super.onConfigure(behavior);
+ behavior.setOption("dialogClass", Options.asString("no-close"));
+ behavior.setOption("closeOnEscape", false);
+ }
+
+ public void onClose(AjaxRequestTarget target, DialogButton button) {
+ setResponsePage(Application.get().getSignInPageClass());
+ }
+ };
+ add(confirmReset);
+ }
+
+ @Override
+ public void renderHead(IHeaderResponse response) {
+ super.renderHead(response);
+ response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));
+ }
+
+ public void onConfigure(JQueryBehavior behavior) {
+ super.onConfigure(behavior);
+ behavior.setOption("dialogClass", Options.asString("no-close"));
+ behavior.setOption("closeOnEscape", false);
+ }
+
+ @Override
+ protected List<DialogButton> getButtons() {
+ return Arrays.asList(resetBtn);
+ }
+
+ @Override
+ protected DialogButton getSubmitButton() {
+ return resetBtn;
+ }
+
+ @Override
+ public Form<?> getForm() {
+ return form;
+ }
+
+ @Override
+ protected void onError(AjaxRequestTarget target) {
+ target.add(feedback);
+ }
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target) {
+ try {
+ getBean(UsersDao.class).update(user, password.getConvertedInput(), user.getUser_id());
+ } catch (Exception e) {
+ error(e.getMessage());
+ }
+ }
+
+ @Override
+ public void onClose(AjaxRequestTarget target, DialogButton button) {
+ if (button.equals(resetBtn)){
+ confirmReset.open(target);
+ } else {
+ setResponsePage(Application.get().getSignInPageClass());
+ }
+ }
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+ add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") {
+ private static final long serialVersionUID = -8870674570404919597L;
+
+ @Override
+ protected String $()
+ {
+ return this.$(Options.asString("open"));
+ }
+ });
+ }
+}