ScribeController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Services\Client\AccountService;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\File;
  6. use Illuminate\Support\Facades\Artisan;
  7. class ScribeController extends Controller
  8. {
  9. protected AccountService $accountService;
  10. public function __construct(AccountService $accountService)
  11. {
  12. $this->accountService = $accountService;
  13. }
  14. /**
  15. * 更新API文档的认证Token
  16. *
  17. * 通过手机号获取验证码并登录,然后更新API文档的认证Token
  18. *
  19. * @urlParam mobile string required 手机号码. Example: 13800138000
  20. * @response {
  21. * "code": 200,
  22. * "message": "Token更新成功",
  23. * "data": {
  24. * "token": "your_new_token_here"
  25. * }
  26. * }
  27. */
  28. public function updateAuthToken(Request $request, $mobile)
  29. {
  30. try {
  31. // 1. 发送验证码
  32. $result = $this->accountService->sendVerifyCode($mobile);
  33. $code = $result['code'];
  34. // 2. 登录获取token
  35. $loginResult = $this->accountService->login($mobile, $code);
  36. $token = $loginResult['token'];
  37. // 3. 更新.env文件
  38. $envPath = base_path('.env');
  39. $envContent = File::get($envPath);
  40. // 更新或添加YOUR_AUTH_KEY
  41. if (preg_match('/^YOUR_AUTH_KEY=.*$/m', $envContent)) {
  42. $envContent = preg_replace('/^YOUR_AUTH_KEY=.*$/m', 'YOUR_AUTH_KEY=' . $token, $envContent);
  43. } else {
  44. $envContent .= "\nYOUR_AUTH_KEY=" . $token;
  45. }
  46. File::put($envPath, $envContent);
  47. // 5. 直接更新 auth.md 文件
  48. $authPath = base_path('.scribe/auth.md');
  49. if (File::exists($authPath)) {
  50. $authContent = File::get($authPath);
  51. $authContent = preg_replace(
  52. '/\*\*`"Bearer [^"`]*"`\*\*/',
  53. '**`"Bearer ' . $token . '"`**',
  54. $authContent
  55. );
  56. File::put($authPath, $authContent);
  57. }
  58. // 6. 更新静态 HTML 文件
  59. $docsPath = public_path('docs/index.html');
  60. if (File::exists($docsPath)) {
  61. $docsContent = File::get($docsPath);
  62. $docsContent = preg_replace(
  63. '/Bearer [a-zA-Z0-9|]*/',
  64. 'Bearer ' . $token,
  65. $docsContent
  66. );
  67. File::put($docsPath, $docsContent);
  68. }
  69. return response()->json([
  70. 'code' => 200,
  71. 'message' => 'Token更新成功',
  72. 'data' => [
  73. 'token' => $token
  74. ]
  75. ]);
  76. } catch (\Exception $e) {
  77. return response()->json([
  78. 'code' => 500,
  79. 'message' => '更新失败: ' . $e->getMessage()
  80. ], 500);
  81. }
  82. }
  83. }