diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/KeyUriFormat.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/OtpKeyUriFormat.java similarity index 83% rename from maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/KeyUriFormat.java rename to maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/OtpKeyUriFormat.java index 35d62c82733e2b6f80de30f04d1977778a3d28e8..705dea30fe6c2aeef361a9bb5e43a0852a3b10ed 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/KeyUriFormat.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/OtpKeyUriFormat.java @@ -17,7 +17,7 @@ package org.maxkey.password.onetimepwd.algorithm; -public class KeyUriFormat { +public class OtpKeyUriFormat { public class Types { public static final String HOTP = "hotp"; @@ -38,7 +38,7 @@ public class KeyUriFormat { String account; - public KeyUriFormat() { + public OtpKeyUriFormat() { } @@ -46,7 +46,7 @@ public class KeyUriFormat { * @param type * @param secret */ - public KeyUriFormat(String type, String secret) { + public OtpKeyUriFormat(String type, String secret) { this.type = type; this.secret = secret; } @@ -56,12 +56,35 @@ public class KeyUriFormat { * @param secret * @param issuer */ - public KeyUriFormat(String type, String secret, String issuer) { + public OtpKeyUriFormat(String type, String secret, String issuer) { this.type = type; this.secret = secret; this.issuer = issuer; } + public OtpKeyUriFormat(String crypto, String type, String secret, String issuer, String domain, int digits, + Long counter, int period, String account) { + super(); + this.crypto = crypto; + this.type = type; + this.secret = secret; + this.issuer = issuer; + this.domain = domain; + this.digits = digits; + this.counter = counter; + this.period = period; + this.account = account; + } + + public OtpKeyUriFormat(String type, String issuer, String domain, int digits,int period) { + super(); + this.type = type; + this.issuer = issuer; + this.domain = domain; + this.digits = digits; + this.period = period; + } + /** * @return the type */ diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java index dd18b829ecbdfd1fe2dc3b0a59c86f48113052ef..241eeb463c15e660bbab48fad6d201de2f4f8d39 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java @@ -18,17 +18,17 @@ package org.maxkey.password.onetimepwd.impl; import java.io.IOException; -import java.util.Properties; import org.maxkey.entity.UserInfo; import org.maxkey.password.onetimepwd.AbstractOtpAuthn; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.env.StandardEnvironment; public class SmsOtpAuthn extends AbstractOtpAuthn { private static final Logger logger = LoggerFactory.getLogger(SmsOtpAuthn.class); - protected Properties properties; + protected StandardEnvironment properties; @Override @@ -44,7 +44,7 @@ public class SmsOtpAuthn extends AbstractOtpAuthn { return true; } - public void setProperties(Properties properties) { + public void setProperties(StandardEnvironment properties) { this.properties = properties; } diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java index 37eb467021168b940438c8bd7ae7384d08d4eba6..c3d48bc024965d54b60a3dab22a300ccd14608aa 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java @@ -38,6 +38,12 @@ public class TimeBasedOtpAuthn extends AbstractOtpAuthn { dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); } + public TimeBasedOtpAuthn(int digits , int interval) { + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + super.digits = digits; + super.interval = interval; + } + @Override public boolean produce(UserInfo userInfo) { return true; diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java index f60aa651c1bf69d2f70df5d2cebc970585414fe8..d21c78be01b057cc0a44dbdc8b7e5eb607aa95da 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java @@ -138,10 +138,10 @@ public class SmsOtpAuthnAliyun extends SmsOtpAuthn { e.printStackTrace(); } - this.accessKeyId = this.properties.getProperty("maxkey.otp.sms.aliyun.accesskeyid"); - this.accessSecret = this.properties.getProperty("maxkey.otp.sms.aliyun.accesssecret"); - this.templateCode = this.properties.getProperty("maxkey.otp.sms.aliyun.templatecode"); - this.signName = this.properties.getProperty("maxkey.otp.sms.aliyun.signname"); + this.accessKeyId = properties.getProperty("maxkey.otp.sms.aliyun.accesskeyid"); + this.accessSecret = properties.getProperty("maxkey.otp.sms.aliyun.accesssecret"); + this.templateCode = properties.getProperty("maxkey.otp.sms.aliyun.templatecode"); + this.signName = properties.getProperty("maxkey.otp.sms.aliyun.signname"); } } diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java index 70d40e6abf60f4ce18b64f4722d6fa08e54cd833..c6da9fb243bbb3eaef198a36ef66f3a54dde013d 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java @@ -55,7 +55,6 @@ public class SmsOtpAuthnTencentCloud extends SmsOtpAuthn { otpType = OtpTypes.SMS; } - @Override @@ -181,11 +180,11 @@ public class SmsOtpAuthnTencentCloud extends SmsOtpAuthn { e.printStackTrace(); } - this.secretId = this.properties.getProperty("maxkey.otp.sms.tencentcloud.secretid"); - this.secretKey = this.properties.getProperty("maxkey.otp.sms.tencentcloud.secretkey"); - this.smsSdkAppid = this.properties.getProperty("maxkey.otp.sms.tencentcloud.smssdkappid"); - this.templateId = this.properties.getProperty("maxkey.otp.sms.tencentcloud.templateid"); - this.sign = this.properties.getProperty("maxkey.otp.sms.tencentcloud.sign"); + this.secretId = properties.getProperty("maxkey.otp.sms.tencentcloud.secretid"); + this.secretKey = properties.getProperty("maxkey.otp.sms.tencentcloud.secretkey"); + this.smsSdkAppid = properties.getProperty("maxkey.otp.sms.tencentcloud.smssdkappid"); + this.templateId = properties.getProperty("maxkey.otp.sms.tencentcloud.templateid"); + this.sign = properties.getProperty("maxkey.otp.sms.tencentcloud.sign"); } } diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java index 90c03cb9dc126a456711ad5bbc29f40a507e68d3..80c1380a54e7b3277536836be78579fd6611ba87 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java @@ -212,9 +212,9 @@ public class SmsOtpAuthnYunxin extends SmsOtpAuthn { e.printStackTrace(); } - this.appKey = this.properties.getProperty("maxkey.otp.sms.yunxin.appkey"); - this.appSecret = this.properties.getProperty("maxkey.otp.sms.yunxin.appsecret"); - this.templateId = this.properties.getProperty("maxkey.otp.sms.yunxin.templateid"); + this.appKey = properties.getProperty("maxkey.otp.sms.yunxin.appkey"); + this.appSecret = properties.getProperty("maxkey.otp.sms.yunxin.appsecret"); + this.templateId = properties.getProperty("maxkey.otp.sms.yunxin.templateid"); } /** diff --git a/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java b/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java index a99c2cf2548a5503d5f2e95bfff840d1a886896f..e2e8427d4cb08cd5ba2c66174074834a0f8a654c 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java @@ -19,7 +19,7 @@ package org.maxkey.otp.algorithm; import java.io.File; -import org.maxkey.password.onetimepwd.algorithm.KeyUriFormat; +import org.maxkey.password.onetimepwd.algorithm.OtpKeyUriFormat; import org.maxkey.util.QRCode; import com.google.zxing.BarcodeFormat; @@ -29,7 +29,7 @@ import com.google.zxing.common.BitMatrix; public class KeyUriFormatTest { public static void main(String[] args) { try { - KeyUriFormat kuf=new KeyUriFormat(KeyUriFormat.Types.TOTP, + OtpKeyUriFormat kuf=new OtpKeyUriFormat(OtpKeyUriFormat.Types.TOTP, "GIWVWOL7EI5WLVZPDMROEPSTFBEVO77Q", "connsec.com"); kuf.setPeriod(60); diff --git a/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java b/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java index a807cc4d0006b89eb6a54214984fd0b2c6b6cc13..b1eb30060ceeecdd16daa4544ff7c1a4cdf7924f 100644 --- a/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java +++ b/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java @@ -30,7 +30,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.StandardEnvironment; import org.springframework.jdbc.core.JdbcTemplate; @@ -44,26 +43,21 @@ public class SocialSignOnAutoConfiguration implements InitializingBean { @Bean(name = "socialSignOnProviderService") @ConditionalOnClass(SocialSignOnProvider.class) public SocialSignOnProviderService socialSignOnProviderService( - PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer) throws IOException { + StandardEnvironment environment) throws IOException { SocialSignOnProviderService socialSignOnProviderService = new SocialSignOnProviderService(); - - StandardEnvironment properties = (StandardEnvironment) propertySourcesPlaceholderConfigurer - .getAppliedPropertySources() - .get(PropertySourcesPlaceholderConfigurer.ENVIRONMENT_PROPERTIES_PROPERTY_SOURCE_NAME) - .getSource(); List socialSignOnProviderList = new ArrayList(); - String [] providerList =properties.getProperty("maxkey.login.socialsignon.providers").toString().split(","); + String [] providerList =environment.getProperty("maxkey.login.socialsignon.providers").toString().split(","); for(String provider : providerList) { - String providerName = properties.getProperty("maxkey.socialsignon."+provider+".provider.name"); - String icon=properties.getProperty("maxkey.socialsignon."+provider+".icon"); - String clientId=properties.getProperty("maxkey.socialsignon."+provider+".client.id"); - String clientSecret=properties.getProperty("maxkey.socialsignon."+provider+".client.secret"); - String sortOrder = properties.getProperty("maxkey.socialsignon."+provider+".sortorder"); - String agentId = properties.getProperty("maxkey.socialsignon."+provider+".agent.id"); - String hidden = properties.getProperty("maxkey.socialsignon."+provider+".hidden"); + String providerName = environment.getProperty("maxkey.socialsignon."+provider+".provider.name"); + String icon=environment.getProperty("maxkey.socialsignon."+provider+".icon"); + String clientId=environment.getProperty("maxkey.socialsignon."+provider+".client.id"); + String clientSecret=environment.getProperty("maxkey.socialsignon."+provider+".client.secret"); + String sortOrder = environment.getProperty("maxkey.socialsignon."+provider+".sortorder"); + String agentId = environment.getProperty("maxkey.socialsignon."+provider+".agent.id"); + String hidden = environment.getProperty("maxkey.socialsignon."+provider+".hidden"); SocialSignOnProvider socialSignOnProvider = new SocialSignOnProvider(); socialSignOnProvider.setProvider(provider); diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java index 41258a2af13c8c8c55ec7e619ed89022526d3f87..1cd8e6a4c17e8c21a09e0f55cd203ea92a9012d3 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; -import java.util.Properties; import java.util.stream.Collectors; import org.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm; @@ -38,7 +37,7 @@ import org.maxkey.authn.support.rememberme.AbstractRemeberMeService; import org.maxkey.configuration.EmailConfig; import org.maxkey.constants.ConstantsPersistence; import org.maxkey.password.onetimepwd.AbstractOtpAuthn; -import org.maxkey.password.onetimepwd.algorithm.KeyUriFormat; +import org.maxkey.password.onetimepwd.algorithm.OtpKeyUriFormat; import org.maxkey.password.onetimepwd.impl.MailOtpAuthn; import org.maxkey.password.onetimepwd.impl.SmsOtpAuthn; import org.maxkey.password.onetimepwd.impl.TimeBasedOtpAuthn; @@ -60,6 +59,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.StandardEnvironment; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.jdbc.core.JdbcTemplate; @@ -87,27 +87,22 @@ public class MaxKeyConfig implements InitializingBean { private static final Logger _logger = LoggerFactory.getLogger(MaxKeyConfig.class); - @Bean(name = "keyUriFormat") - public KeyUriFormat keyUriFormat( - @Value("${maxkey.otp.keyuri.format.type:totp}") - String keyuriFormatType, - @Value("${maxkey.otp.keyuri.format.domain:MaxKey.top}") - String keyuriFormatDomain, - @Value("${maxkey.otp.keyuri.format.issuer:MaxKey}") - String keyuriFormatIssuer, - @Value("${maxkey.otp.keyuri.format.digits:6}") - int keyuriFormatDigits, - @Value("${maxkey.otp.keyuri.format.period:30}") - int keyuriFormatPeriod) { + @Bean(name = "otpKeyUriFormat") + public OtpKeyUriFormat otpKeyUriFormat( + @Value("${maxkey.otp.policy.type:totp}") + String type, + @Value("${maxkey.otp.policy.domain:MaxKey.top}") + String domain, + @Value("${maxkey.otp.policy.issuer:MaxKey}") + String issuer, + @Value("${maxkey.otp.policy.digits:6}") + int digits, + @Value("${maxkey.otp.policy.period:30}") + int period) { - KeyUriFormat keyUriFormat=new KeyUriFormat(); - keyUriFormat.setType(keyuriFormatType); - keyUriFormat.setDomain(keyuriFormatDomain); - keyUriFormat.setIssuer(keyuriFormatIssuer); - keyUriFormat.setDigits(keyuriFormatDigits); - keyUriFormat.setPeriod(keyuriFormatPeriod); - _logger.debug("KeyUri Format " + keyUriFormat); - return keyUriFormat; + OtpKeyUriFormat otpKeyUriFormat=new OtpKeyUriFormat(type,issuer,domain,digits,period); + _logger.debug("OTP KeyUri Format " + otpKeyUriFormat); + return otpKeyUriFormat; } public AbstractAuthenticationRealm ldapAuthenticationRealm( @@ -194,18 +189,26 @@ public class MaxKeyConfig implements InitializingBean { } @Bean(name = "timeBasedOtpAuthn") - public TimeBasedOtpAuthn timeBasedOtpAuthn() { - TimeBasedOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(); + public TimeBasedOtpAuthn timeBasedOtpAuthn( + @Value("${maxkey.otp.policy.digits:6}") + int digits, + @Value("${maxkey.otp.policy.period:30}") + int period) { + TimeBasedOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(digits , period); _logger.debug("TimeBasedOtpAuthn inited."); return tfaOtpAuthn; } @Bean(name = "tfaOtpAuthn") public AbstractOtpAuthn tfaOptAuthn( - @Value("${maxkey.login.mfa.type}")String mfaType, - @Value("${maxkey.server.persistence}") int persistence, - RedisConnectionFactory redisConnFactory) { - AbstractOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(); + @Value("${maxkey.login.mfa.type}")String mfaType, + @Value("${maxkey.otp.policy.digits:6}") + int digits, + @Value("${maxkey.otp.policy.period:30}") + int period, + @Value("${maxkey.server.persistence}") int persistence, + RedisConnectionFactory redisConnFactory) { + AbstractOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(digits , period); _logger.debug("TimeBasedOtpAuthn inited."); if (persistence == ConstantsPersistence.REDIS) { @@ -251,14 +254,14 @@ public class MaxKeyConfig implements InitializingBean { @Bean(name = "smsOtpAuthn") public SmsOtpAuthn smsOtpAuthn( - @Value("${maxkey.otp.sms}")String optSmsProvider, + @Value("${maxkey.otp.sms.provider}")String provider, @Value("${maxkey.server.persistence}") int persistence, - Properties applicationProperty, + StandardEnvironment environment, RedisConnectionFactory redisConnFactory) { SmsOtpAuthn smsOtpAuthn = null; - if(optSmsProvider.equalsIgnoreCase("SmsOtpAuthnAliyun")) { + if(provider.equalsIgnoreCase("aliyun")) { smsOtpAuthn = new SmsOtpAuthnAliyun(); - }else if(optSmsProvider.equalsIgnoreCase("SmsOtpAuthnTencentCloud")) { + }else if(provider.equalsIgnoreCase("tencentcloud")) { smsOtpAuthn = new SmsOtpAuthnTencentCloud(); }else { smsOtpAuthn = new SmsOtpAuthnYunxin(); @@ -267,10 +270,11 @@ public class MaxKeyConfig implements InitializingBean { RedisOtpTokenStore redisOptTokenStore = new RedisOtpTokenStore(redisConnFactory); smsOtpAuthn.setOptTokenStore(redisOptTokenStore); } - smsOtpAuthn.setProperties(applicationProperty); + + smsOtpAuthn.setProperties(environment); smsOtpAuthn.initPropertys(); - _logger.debug("SmsOtpAuthn inited."); + _logger.debug("SmsOtpAuthn {} inited." ,smsOtpAuthn.getClass().getCanonicalName()); return smsOtpAuthn; } diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java index 1880e6dbb44a81e5f2734f74d7f74177e203f565..784b22abc204d3cd87692b89177e2b90aeed2803 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java @@ -23,7 +23,7 @@ import org.apache.commons.codec.binary.Hex; import org.maxkey.crypto.Base32Utils; import org.maxkey.crypto.password.PasswordReciprocal; import org.maxkey.entity.UserInfo; -import org.maxkey.password.onetimepwd.algorithm.KeyUriFormat; +import org.maxkey.password.onetimepwd.algorithm.OtpKeyUriFormat; import org.maxkey.password.onetimepwd.algorithm.OtpSecret; import org.maxkey.persistence.service.UserInfoService; import org.maxkey.util.RQCodeUtils; @@ -53,8 +53,8 @@ public class OneTimePasswordController { private UserInfoService userInfoService; @Autowired - @Qualifier("keyUriFormat") - KeyUriFormat keyUriFormat; + @Qualifier("otpKeyUriFormat") + OtpKeyUriFormat otpKeyUriFormat; @Autowired @Qualifier("passwordReciprocal") @@ -65,13 +65,13 @@ public class OneTimePasswordController { ModelAndView modelAndView = new ModelAndView("safe/timeBased"); UserInfo userInfo = WebContext.getUserInfo(); String sharedSecret = passwordReciprocal.decoder(userInfo.getSharedSecret()); - keyUriFormat.setSecret(sharedSecret); - String otpauth = keyUriFormat.format(userInfo.getUsername()); + otpKeyUriFormat.setSecret(sharedSecret); + String otpauth = otpKeyUriFormat.format(userInfo.getUsername()); byte[] byteSharedSecret = Base32Utils.decode(sharedSecret); String hexSharedSecret = Hex.encodeHexString(byteSharedSecret); modelAndView.addObject("id", genRqCode(otpauth)); modelAndView.addObject("userInfo", userInfo); - modelAndView.addObject("format", keyUriFormat); + modelAndView.addObject("format", otpKeyUriFormat); modelAndView.addObject("sharedSecret", sharedSecret); modelAndView.addObject("hexSharedSecret", hexSharedSecret); return modelAndView; @@ -80,7 +80,7 @@ public class OneTimePasswordController { @RequestMapping(value = {"gen/timebased"}) public ModelAndView gentimebased() { UserInfo userInfo = WebContext.getUserInfo(); - byte[] byteSharedSecret = OtpSecret.generate(keyUriFormat.getCrypto()); + byte[] byteSharedSecret = OtpSecret.generate(otpKeyUriFormat.getCrypto()); String sharedSecret = Base32Utils.encode(byteSharedSecret); sharedSecret = passwordReciprocal.encode(sharedSecret); userInfo.setSharedSecret(sharedSecret); @@ -95,15 +95,15 @@ public class OneTimePasswordController { ModelAndView modelAndView = new ModelAndView("safe/counterBased"); UserInfo userInfo = WebContext.getUserInfo(); String sharedSecret = passwordReciprocal.decoder(userInfo.getSharedSecret()); - keyUriFormat.setSecret(sharedSecret); - keyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); - String otpauth = keyUriFormat.format(userInfo.getUsername()); + otpKeyUriFormat.setSecret(sharedSecret); + otpKeyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); + String otpauth = otpKeyUriFormat.format(userInfo.getUsername()); byte[] byteSharedSecret = Base32Utils.decode(sharedSecret); String hexSharedSecret = Hex.encodeHexString(byteSharedSecret); modelAndView.addObject("id", genRqCode(otpauth)); modelAndView.addObject("userInfo", userInfo); - modelAndView.addObject("format", keyUriFormat); + modelAndView.addObject("format", otpKeyUriFormat); modelAndView.addObject("sharedSecret", sharedSecret); modelAndView.addObject("hexSharedSecret", hexSharedSecret); return modelAndView; @@ -113,7 +113,7 @@ public class OneTimePasswordController { @RequestMapping(value = {"gen/counterbased"}) public ModelAndView gencounterbased() { UserInfo userInfo = WebContext.getUserInfo(); - byte[] byteSharedSecret = OtpSecret.generate(keyUriFormat.getCrypto()); + byte[] byteSharedSecret = OtpSecret.generate(otpKeyUriFormat.getCrypto()); String sharedSecret = Base32Utils.encode(byteSharedSecret); sharedSecret = passwordReciprocal.encode(sharedSecret); userInfo.setSharedSecret(sharedSecret); @@ -128,14 +128,14 @@ public class OneTimePasswordController { ModelAndView modelAndView = new ModelAndView("safe/hotp"); UserInfo userInfo = WebContext.getUserInfo(); String sharedSecret = passwordReciprocal.decoder(userInfo.getSharedSecret()); - keyUriFormat.setSecret(sharedSecret); - keyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); - String otpauth = keyUriFormat.format(userInfo.getUsername()); + otpKeyUriFormat.setSecret(sharedSecret); + otpKeyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); + String otpauth = otpKeyUriFormat.format(userInfo.getUsername()); byte[] byteSharedSecret = Base32Utils.decode(sharedSecret); String hexSharedSecret = Hex.encodeHexString(byteSharedSecret); modelAndView.addObject("id", genRqCode(otpauth)); modelAndView.addObject("userInfo", userInfo); - modelAndView.addObject("format", keyUriFormat); + modelAndView.addObject("format", otpKeyUriFormat); modelAndView.addObject("sharedSecret", sharedSecret); modelAndView.addObject("hexSharedSecret", hexSharedSecret); return modelAndView; @@ -145,7 +145,7 @@ public class OneTimePasswordController { @RequestMapping(value = {"gen/hotp"}) public ModelAndView genhotp() { UserInfo userInfo = WebContext.getUserInfo(); - byte[] byteSharedSecret = OtpSecret.generate(keyUriFormat.getCrypto()); + byte[] byteSharedSecret = OtpSecret.generate(otpKeyUriFormat.getCrypto()); String sharedSecret = Base32Utils.encode(byteSharedSecret); sharedSecret = passwordReciprocal.encode(sharedSecret); userInfo.setSharedSecret(sharedSecret); diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties index d90d8ea405198d8d83a014de78d4f8f60f8dc240..a3050bf48571b3f39507f188aceb5210d6ad2855 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties @@ -176,10 +176,10 @@ spring.kafka.producer.value-serializer =org.apache.kafka.common.seriali ############################################################################ #SMS Message Login configuration # -#SmsOtpAuthnYunxin SmsOtpAuthnAliyun SmsOtpAuthnTencentCloud # +#aliyun yunxin tencentcloud # ############################################################################ #default -maxkey.otp.sms =${SMS_IMPL:SmsOtpAuthnYunxin} +maxkey.otp.sms.provider =${SMS_PROVIDER:yunxin} #aliyun maxkey.otp.sms.aliyun.accesskeyid =${SMS_ALIYUN_ACCESSKEYID:94395d754eb55693043f5d6a2b772ef4} maxkey.otp.sms.aliyun.accesssecret =${SMS_ALIYUN_ACCESSSECRET:05d5485357bc} @@ -199,11 +199,11 @@ maxkey.otp.sms.tencentcloud.sign =${SMS_TENCENTCLOUD_SIGN:1486009 ############################################################################ #Time-based One-Time Password configuration # ############################################################################ -maxkey.otp.keyuri.format.type =totp -maxkey.otp.keyuri.format.digits =6 -maxkey.otp.keyuri.format.issuer =${OTP_KEYURI_ISSUER:MaxKey} -maxkey.otp.keyuri.format.domain =${maxkey.server.domain} -maxkey.otp.keyuri.format.period =30 +maxkey.otp.policy.type =totp +maxkey.otp.policy.digits =6 +maxkey.otp.policy.issuer =${OTP_POLICY_ISSUER:MaxKey} +maxkey.otp.policy.domain =${maxkey.server.domain} +maxkey.otp.policy.period =30 ############################################################################ #LDAP Login support configuration # diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties index e340c32617b43e858131ae9e19fc3c12f0d58199..bf48e0dd94c1230ecbaa1c53967fd1262c133963 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties @@ -178,10 +178,10 @@ spring.kafka.producer.value-serializer =org.apache.kafka.common.seriali ############################################################################ #SMS Message Login configuration # -#SmsOtpAuthnYunxin SmsOtpAuthnAliyun SmsOtpAuthnTencentCloud # +#aliyun yunxin tencentcloud # ############################################################################ #default -maxkey.otp.sms =${SMS_IMPL:SmsOtpAuthnYunxin} +maxkey.otp.sms.provider =${SMS_PROVIDER:yunxin} #aliyun maxkey.otp.sms.aliyun.accesskeyid =${SMS_ALIYUN_ACCESSKEYID:94395d754eb55693043f5d6a2b772ef4} maxkey.otp.sms.aliyun.accesssecret =${SMS_ALIYUN_ACCESSSECRET:05d5485357bc} @@ -201,11 +201,11 @@ maxkey.otp.sms.tencentcloud.sign =${SMS_TENCENTCLOUD_SIGN:1486009 ############################################################################ #Time-based One-Time Password configuration # ############################################################################ -maxkey.otp.keyuri.format.type =totp -maxkey.otp.keyuri.format.digits =6 -maxkey.otp.keyuri.format.issuer =${OTP_KEYURI_ISSUER:MaxKey} -maxkey.otp.keyuri.format.domain =${maxkey.server.domain} -maxkey.otp.keyuri.format.period =30 +maxkey.otp.policy.type =totp +maxkey.otp.policy.digits =6 +maxkey.otp.policy.issuer =${OTP_POLICY_ISSUER:MaxKey} +maxkey.otp.policy.domain =${maxkey.server.domain} +maxkey.otp.policy.period =30 ############################################################################ #LDAP Login support configuration # diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml b/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml index 918bf4498a4475080bf62dea2e9b050bc24f14dd..2664a8420fbb2f7785e9b8d80a0591c7dc7c93d8 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml @@ -24,6 +24,8 @@ + + diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties b/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties index 30e1984969a6b2dedf9adcc267d0a838229b233a..625194edfd0cf0c573080b1451e73fa5fd38ca5b 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties @@ -157,6 +157,14 @@ spring.kafka.producer.key-serializer =org.apache.kafka.common.seriali spring.kafka.producer.value-serializer =org.apache.kafka.common.serialization.StringSerializer # partitioner #spring.kafka.producer.properties.partitioner.class=com.felix.kafka.producer.CustomizePartitioner +############################################################################ +#Time-based One-Time Password configuration # +############################################################################ +maxkey.otp.policy.type =totp +maxkey.otp.policy.digits =6 +maxkey.otp.policy.issuer =${OTP_POLICY_ISSUER:MaxKey} +maxkey.otp.policy.domain =${maxkey.server.domain} +maxkey.otp.policy.period =30 ############################################################################# #SAML V2.0 configuration # diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml b/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml index e6843e23f504cc762cc0178a6734d5a8204abf80..af7cad3cede9e2d3c5d1afb27efebfb0dc728e23 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml @@ -25,6 +25,7 @@ +