Use the placeholder as the default device name
authorTim Düsterhus <duesterhus@woltlab.com>
Mon, 16 Nov 2020 12:51:05 +0000 (13:51 +0100)
committerTim Düsterhus <duesterhus@woltlab.com>
Mon, 16 Nov 2020 16:29:07 +0000 (17:29 +0100)
wcfsetup/install/files/lib/system/user/multifactor/TotpMultifactorMethod.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 5279a6d4f2dc59ea1e2c668c21e40acbee10ff19..abf110540f4a3e90912cb7f1e3bd9d6d5dcea698 100644 (file)
@@ -198,8 +198,26 @@ class TotpMultifactorMethod implements IMultifactorMethod {
                        ];
                }
                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)
index 7d6f2c4521ce05f418faf657c62f1d36070c4b6d..574d1638a5e0f37b08c607cc7b341ba94bb18b53 100644 (file)
@@ -4856,7 +4856,6 @@ Die E-Mail-Adresse des neuen Benutzers lautet: {@$user->email}
                <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>
index 934f3e999a5dda9bbd0552e79254bd28989db486..14a6e40df32013422c5d9e450edc61f8432a7f28 100644 (file)
@@ -4853,7 +4853,6 @@ Open the link below to access the user profile:
                <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>