2FA TOTP Demo.
public class TotpServerTests {
@Test
public void testGenSecret() {
// secret
SecretGenerator secretGenerator = new DefaultSecretGenerator();
String secret = secretGenerator.generate();
log.info("testGenSecret -> secret={}", secret);
}
}
public class TotpServerTests {
@Test
public void testGenQrImage() throws Exception {
// secret
String secret = "QYUBLST6D6QHB4GXK5W754WJEZHS5KUM";
// qr code
QrData qrData = new QrData.Builder()
.label("aaric")
.issuer("InCar")
.secret(secret)
.algorithm(HashingAlgorithm.SHA1)
.digits(6)
.period(30)
.build();
// qr image
QrGenerator qrGenerator = new ZxingPngQrGenerator();
byte[] qrBytes = qrGenerator.generate(qrData);
String qrMimeType = qrGenerator.getImageMimeType();
String qrImageUri = Utils.getDataUriForImage(qrBytes, qrMimeType);
log.info("testGenQrImage -> qrImageUri={}", qrImageUri);
}
}
public class TotpServerTests {
@Test
public void testValidCode() {
// secret
String secret = "QYUBLST6D6QHB4GXK5W754WJEZHS5KUM";
// valid
TimeProvider timeProvider = new SystemTimeProvider();
//CodeGenerator codeGenerator = new DefaultCodeGenerator();
CodeGenerator codeGenerator = new DefaultCodeGenerator(HashingAlgorithm.SHA1, 6);
CodeVerifier codeVerifier = new DefaultCodeVerifier(codeGenerator, timeProvider);
log.info("testValidCode -> isValidCode={}", codeVerifier.isValidCode(secret, "340200"));
}
}
public class TotpServerTests {
@Test
public void testGenRecoveryCodes() {
// recovery
RecoveryCodeGenerator recoveryCodeGenerator = new RecoveryCodeGenerator();
String[] recoveryCodes = recoveryCodeGenerator.generateCodes(12);
for (String code : recoveryCodes) {
log.info("{}", code);
}
}
}
public class TotpServerTests {
@Test
public void testGenCode() throws Exception {
// secret
String secret = "QYUBLST6D6QHB4GXK5W754WJEZHS5KUM";
// valid
int timePeriod = 30;
//TimeProvider timeProvider = new SystemTimeProvider();
TimeProvider timeProvider = new NtpTimeProvider("ntp6.aliyun.com", 3000);
long counter = Math.floorDiv(timeProvider.getTime(), timePeriod);
log.info("counter: {}", counter);
CodeGenerator codeGenerator = new DefaultCodeGenerator();
log.info("code: {}", codeGenerator.generate(secret, counter));
}
}