2025073100-refactor_mfa.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. declare(strict_types=1);
  3. use App\Interfaces\MigrationInterface;
  4. use App\Models\MFADevice;
  5. use App\Models\User;
  6. use App\Services\DB;
  7. return new class() implements MigrationInterface {
  8. public function up(): int
  9. {
  10. DB::getPdo()->exec("
  11. CREATE TABLE `mfa_devices` (
  12. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  13. `userid` int(11) unsigned NOT NULL COMMENT '用户ID',
  14. `body` text NOT NULL COMMENT '密钥内容',
  15. `name` varchar(255) DEFAULT NULL COMMENT '设备名称',
  16. `rawid` varchar(255) DEFAULT NULL COMMENT '设备ID',
  17. `created_at` datetime NOT NULL COMMENT '创建时间',
  18. `used_at` datetime DEFAULT NULL COMMENT '上次使用时间',
  19. `type` varchar(50) DEFAULT NULL COMMENT '设备类型',
  20. PRIMARY KEY (`id`),
  21. KEY `userid` (`userid`)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  23. ");
  24. $users = (new User())->where('ga_enable', 1)->get();
  25. foreach ($users as $user) {
  26. $token = $user->ga_token;
  27. $MFADevice = new MFADevice();
  28. $MFADevice->userid = $user->id;
  29. $MFADevice->name = 'TOTP';
  30. $MFADevice->rawid = 'TOTP';
  31. $MFADevice->body = json_encode(['token' => $token]);
  32. $MFADevice->type = 'totp';
  33. $MFADevice->created_at = date('Y-m-d H:i:s');
  34. $MFADevice->save();
  35. }
  36. DB::getPdo()->exec('ALTER TABLE `user` DROP COLUMN `ga_enable`, DROP COLUMN `ga_token`;');
  37. return 2025073100;
  38. }
  39. public function down(): int
  40. {
  41. DB::getPdo()->exec('
  42. DROP TABLE IF EXISTS `mfa_devices`;
  43. ');
  44. return 2024061600;
  45. }
  46. };