/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.core.utils; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.datatype.XMLGregorianCalendar; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.orcid.utils.DateUtils; import org.orcid.utils.NullUtils; public class PasswordResetToken { // public static final String RESET_TOKEN_DATE_FORMAT = "dd/MM/yyyy HH:mm:ss"; private static final String EMAIL_PARAM_KEY = "email"; private static final String ISSUE_DATE_PARAM_KEY = "issueDate"; private static final String EQUALS = "="; private static final String SEPARATOR = "&"; private String email; private XMLGregorianCalendar issueDate; public PasswordResetToken() { } public PasswordResetToken(String paramsString) { String[] pairs = StringUtils.split(paramsString, SEPARATOR); Map<String, String> params = new HashMap<String, String>(); for (String pair : pairs) { String[] keyValue = StringUtils.split(pair, EQUALS); if (keyValue.length == 2) { params.put(keyValue[0], keyValue[1]); } } email = params.get(EMAIL_PARAM_KEY); issueDate = DateUtils.convertToXMLGregorianCalendar(params.get(ISSUE_DATE_PARAM_KEY)); } public String getEmail() { return email; } public Date getIssueDate() { return issueDate.toGregorianCalendar().getTime(); } /** * * @return The params encoded as a single string, as if in a URL query. The string is not url encoded because will * be encrypted by a manager first. email=?&gNames=?&fName=?&sponsor=?&identifier=?&institution=? */ public String toParamsString() { List<Pair<String, String>> pairs = new ArrayList<Pair<String, String>>(); pairs.add(new ImmutablePair<String, String>(EMAIL_PARAM_KEY, email)); pairs.add(new ImmutablePair<String, String>(ISSUE_DATE_PARAM_KEY, String.valueOf(issueDate))); List<String> items = new ArrayList<String>(pairs.size()); for (Pair<String, String> pair : pairs) { items.add(pair.getLeft() + EQUALS + NullUtils.blankIfNull(pair.getRight())); } return StringUtils.join(items, SEPARATOR); } @Override public String toString() { return toParamsString(); } }