List<String> entries = new LinkedList<String>();
while (res.next()) {
- entries.add(res.getString(2) + " (" + res.getString(3) + ")");
+ String info = res.getString(3);
+ if ( !info.isEmpty()) {
+ info = " (" + info + ")";
+ }
+ entries.add(res.getString(2) + info);
}
return entries.toArray(new String[0]);
}
}
}
- public void triggerPasswordReset(String aword, HttpServletRequest req) {
+ public void triggerPasswordReset(String aword, HttpServletRequest req) throws GigiApiException {
Language l = Language.getInstance(target.getPreferredLocale());
String method = l.getTranslation("A password reset was triggered. Please enter the required text sent to you by support on this page:");
String subject = l.getTranslation("Password reset by support.");
PasswordResetPage.initPasswordResetProcess(target, req, aword, l, method, subject);
Outputable message = new TranslateCommand("A password reset was triggered and an email was sent to user.");
sendSupportNotification(subject, message);
+ writeSELog("SE triggered password reset");
}
private void sendBoardNotification(String subject, Outputable message) {
public boolean hasValidTTPAgentChallenge() {
return CATS.isInCatsLimit(getId(), CATSType.TTP_AGENT_CHALLENGE.getId());
}
+
+ public void writeUserLog(User actor, String type) throws GigiApiException {
+ try (GigiPreparedStatement prep = new GigiPreparedStatement("INSERT INTO `adminLog` SET uid=?, admin=?, type=?")) {
+ prep.setInt(1, actor.getId());
+ prep.setInt(2, getId());
+ prep.setString(3, type);
+ prep.executeUpdate();
+ }
+ }
}
throw new GigiApiException("New passwords differ.");
}
u.consumePasswordResetTicket(id, tok, p1);
+ u.writeUserLog(u, "User token based password reset");
return new SuccessMessageResult(new TranslateCommand("Password reset successful."));
}
}
try {
target.changePassword(oldpassword, p1);
+ target.writeUserLog(target, "User triggered password reset");
} catch (GigiApiException e) {
error.mergeInto(e);
}
String subject = langApplicant.getTranslation("Password reset by verification");
PasswordResetPage.initPasswordResetProcess(applicant, req, aword, langApplicant, method, subject);
result = new ConcatOutputable(result, new TranslateCommand("Password reset successful."));
+ agent.writeUserLog(applicant, "RA Agent triggered password reset");
}
return new SuccessMessageResult(result);
}
import java.security.GeneralSecurityException;
import java.sql.Date;
+import org.hamcrest.CoreMatchers;
import org.junit.Test;
import club.wpia.gigi.GigiApiException;
import club.wpia.gigi.dbObjects.CATS.CATSType;
import club.wpia.gigi.dbObjects.NamePart.NamePartType;
+import club.wpia.gigi.testUtils.ArrayContains;
import club.wpia.gigi.testUtils.ClientBusinessTest;
public class TestUser extends ClientBusinessTest {
assertTrue(u.hasValidTTPAgentChallenge());
}
+ @Test
+ public void testWriteUserLog() throws GigiApiException {
+ String type = "Log test";
+ u.writeUserLog(u, type);
+ String[] result = u.getAdminLog();
+ assertThat(result, ArrayContains.contains(CoreMatchers.equalTo(type)));
+
+ String type1 = "Log test1";
+ u.writeUserLog(u, type1);
+ result = u.getAdminLog();
+ assertThat(result, ArrayContains.contains(CoreMatchers.equalTo(type1)));
+ assertThat(result, ArrayContains.contains(CoreMatchers.equalTo(type)));
+ }
+
}
import java.io.IOException;
import java.net.URLEncoder;
+import org.hamcrest.CoreMatchers;
import org.junit.Test;
import club.wpia.gigi.GigiApiException;
-import club.wpia.gigi.pages.account.ChangePasswordPage;
+import club.wpia.gigi.testUtils.ArrayContains;
import club.wpia.gigi.testUtils.ClientTest;
public class TestChangePassword extends ClientTest {
assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2")));
assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD)));
+ String[] result = u.getAdminLog();
+ assertThat(result, ArrayContains.contains(CoreMatchers.equalTo("User triggered password reset")));
+
}
@Test
import java.net.URLEncoder;
import java.security.GeneralSecurityException;
+import org.hamcrest.CoreMatchers;
import org.junit.Test;
import club.wpia.gigi.GigiApiException;
import club.wpia.gigi.dbObjects.User;
import club.wpia.gigi.pages.PasswordResetPage;
import club.wpia.gigi.pages.wot.TestVerification;
+import club.wpia.gigi.testUtils.ArrayContains;
import club.wpia.gigi.testUtils.ClientTest;
import club.wpia.gigi.testUtils.IOUtils;
import club.wpia.gigi.testUtils.TestEmailReceiver.TestMail;
assertNotNull(toPasswordReset(avalue, link, "a", "a"));
assertNull(toPasswordReset(avalue, link, npw, npw));
assertNotNull(login(email, npw));
+
+ String[] result = this.u.getAdminLog();
+ assertThat(result, ArrayContains.contains(CoreMatchers.equalTo("RA Agent triggered password reset")));
+ assertThat(result, ArrayContains.contains(CoreMatchers.equalTo("User token based password reset")));
}
private String toPasswordReset(String avalue, String link, String npw, String npw2) throws IOException, MalformedURLException, UnsupportedEncodingException {
import java.util.HashMap;
import java.util.Locale;
+import org.hamcrest.CoreMatchers;
import org.junit.Test;
import club.wpia.gigi.GigiApiException;
import club.wpia.gigi.localisation.Language;
import club.wpia.gigi.pages.account.MyDetails;
import club.wpia.gigi.pages.admin.support.SupportUserDetailsPage;
+import club.wpia.gigi.testUtils.ArrayContains;
import club.wpia.gigi.testUtils.IOUtils;
import club.wpia.gigi.testUtils.SEClientTest;
import club.wpia.gigi.testUtils.TestEmailReceiver.TestMail;
getMailReceiver().receive(targetEmail);
TestMail tm = getMailReceiver().receive(ServerConstants.getSupportMailAddress());
assertThat(tm.getMessage(), containsString("A password reset was triggered and an email was sent to user."));
+
+ User test = User.getById(targetID);
+ String[] result = test.getAdminLog();
+ assertThat(result, ArrayContains.contains(CoreMatchers.equalTo("SE triggered password reset (a20140808.8)")));
}
@Test
--- /dev/null
+package club.wpia.gigi.testUtils;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+
+public class ArrayContains<T> extends BaseMatcher<T[]> {
+
+ Matcher<T> containee;
+
+ public ArrayContains(Matcher<T> containee) {
+ this.containee = containee;
+ }
+
+ @Override
+ public boolean matches(Object item) {
+ Object[] array = (Object[]) item;
+ for (Object t : array) {
+ if (containee.matches(t)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("contains an element that:");
+ containee.describeTo(description);
+ }
+
+ public static <T> ArrayContains<T> contains(final Matcher<T> element) {
+ return new ArrayContains<T>(element);
+ }
+}