/*
* Password Management Servlets (PWM)
* http://www.pwm-project.org
*
* Copyright (c) 2006-2009 Novell, Inc.
* Copyright (c) 2009-2017 The PWM Project
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package password.pwm.http.bean;
import password.pwm.config.option.SessionBeanMode;
import password.pwm.util.logging.PwmLogger;
import password.pwm.util.operations.otp.OTPUserRecord;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetupOtpBean extends PwmSessionBean {
private static final PwmLogger LOGGER = PwmLogger.forClass(SetupOtpBean.class);
private OTPUserRecord otpUserRecord;
private boolean confirmed;
private boolean codeSeen;
private boolean written;
private List<String> recoveryCodes;
private Long challenge; // for HOTP only
private boolean hasPreExistingOtp;
public SetupOtpBean() {
}
public OTPUserRecord getOtpUserRecord() {
return otpUserRecord;
}
public boolean isHasPreExistingOtp()
{
return hasPreExistingOtp;
}
public void setHasPreExistingOtp(final boolean hasPreExistingOtp)
{
this.hasPreExistingOtp = hasPreExistingOtp;
}
public void setOtpUserRecord(final OTPUserRecord otp) {
this.otpUserRecord = otp;
}
public boolean isConfirmed() {
return confirmed;
}
public void setConfirmed(final boolean confirmed) {
this.confirmed = confirmed;
}
public Long getChallenge() {
if (challenge == null) {
SecureRandom random;
try {
random = SecureRandom.getInstance("SHA1PRNG", "SUN");
} catch (NoSuchAlgorithmException ex) {
random = new SecureRandom();
LOGGER.error(ex.getMessage(), ex);
} catch (NoSuchProviderException ex) {
random = new SecureRandom();
LOGGER.error(ex.getMessage(), ex);
}
random.setSeed((new Date()).getTime());
challenge = random.nextLong() % (10 ^ 6);
}
return challenge;
}
public void setChallenge(final Long challenge) {
this.challenge = challenge;
}
public List<String> getRecoveryCodes()
{
return recoveryCodes;
}
public void setRecoveryCodes(final List<String> recoveryCodes)
{
this.recoveryCodes = recoveryCodes;
}
public boolean isCodeSeen()
{
return codeSeen;
}
public void setCodeSeen(final boolean codeSeen)
{
this.codeSeen = codeSeen;
}
public boolean isWritten()
{
return written;
}
public void setWritten(final boolean written)
{
this.written = written;
}
public Type getType() {
return Type.AUTHENTICATED;
}
@Override
public Set<SessionBeanMode> supportedModes() {
return Collections.unmodifiableSet(new HashSet<>(Arrays.asList(SessionBeanMode.LOCAL, SessionBeanMode.CRYPTCOOKIE)));
}
}