];
}
else {
- $defaultName = WCF::getLanguage()->getDynamicVariable('wcf.user.security.multifactor.totp.deviceName.default');
- $deviceName = $formData['data']['deviceName'] ?: $defaultName;
+ $deviceName = $formData['data']['deviceName'];
+ if (!$deviceName) {
+ $defaultName = WCF::getLanguage()->getDynamicVariable('wcf.user.security.multifactor.totp.deviceName.placeholder');
+
+ $sql = "SELECT deviceName
+ FROM wcf".WCF_N."_user_multifactor_totp
+ WHERE setupID = ?";
+ $statement = WCF::getDB()->prepareStatement($sql);
+ $statement->execute([
+ $setup->getId(),
+ ]);
+ $deviceNames = $statement->fetchAll(\PDO::FETCH_COLUMN);
+
+ for ($i = 1;; $i++) {
+ $deviceName = $defaultName.($i > 1 ? " ($i)" : '');
+ if (!in_array($deviceName, $deviceNames)) {
+ break;
+ }
+ }
+ }
$sql = "INSERT INTO wcf".WCF_N."_user_multifactor_totp
(setupID, deviceID, deviceName, secret, minCounter, createTime)
<item name="wcf.user.security.multifactor.active"><![CDATA[Aktiv]]></item>
<item name="wcf.user.security.multifactor.backup.generateCodes"><![CDATA[Codes generieren]]></item>
<item name="wcf.user.security.multifactor.totp.devices"><![CDATA[Aktive Smartphones]]></item>
- <item name="wcf.user.security.multifactor.totp.deviceName.default"><![CDATA[{TIME_NOW|plainTime}]]></item>
<item name="wcf.user.security.multifactor.totp.error.flood"><![CDATA[Bitte {if LANGUAGE_USE_INFORMAL_VARIANT}versuche es{else}versuchen Sie es{/if} später erneut.]]></item>
<item name="wcf.user.security.multifactor.backup.error.flood"><![CDATA[Bitte {if LANGUAGE_USE_INFORMAL_VARIANT}versuche es{else}versuchen Sie es{/if} später erneut.]]></item>
<item name="wcf.user.security.multifactor.totp.deviceName.description"><![CDATA[Ein beliebiger Name, der dieses Gerät identifiziert.]]></item>
<item name="wcf.user.security.multifactor.active"><![CDATA[Active]]></item>
<item name="wcf.user.security.multifactor.backup.generateCodes"><![CDATA[Generate Codes]]></item>
<item name="wcf.user.security.multifactor.totp.devices"><![CDATA[Active Smartphones]]></item>
- <item name="wcf.user.security.multifactor.totp.deviceName.default"><![CDATA[{TIME_NOW|plainTime}]]></item>
<item name="wcf.user.security.multifactor.totp.error.flood"><![CDATA[Please try again later.]]></item>
<item name="wcf.user.security.multifactor.backup.error.flood"><![CDATA[Please try again later.]]></item>
<item name="wcf.user.security.multifactor.totp.deviceName.description"><![CDATA[An arbitrary name identifying this device.]]></item>