@@ -20,30 +20,40 @@ class TwoFactorAuthController extends Controller
2020 * @param \Illuminate\Http\Request $request
2121 * @return \Inertia\Response
2222 */
23- public function edit (Request $ request )
23+ public function show (Request $ request )
2424 {
25+ $ user = $ request ->user ();
26+ $ confirmed = !is_null ($ user ->two_factor_confirmed_at );
27+
2528 return Inertia::render ('settings/two-factor ' , [
26- 'confirmed ' => ! is_null ( $ request -> user ()-> two_factor_confirmed_at ) ,
27- 'recoveryCodes ' => $ this ->getRecoveryCodes ($ request -> user () ),
29+ 'confirmed ' => $ confirmed ,
30+ 'recoveryCodes ' => $ this ->getRecoveryCodes ($ user ),
2831 ]);
2932 }
3033
3134 /**
3235 * Enable two factor authentication for the user.
3336 *
3437 * @param \Illuminate\Http\Request $request
35- * @return \Illuminate\Http\RedirectResponse
38+ * @return \Illuminate\Http\JsonResponse
3639 */
3740 public function enable (Request $ request )
3841 {
3942 [$ qrCode , $ secret ] = app (GenerateQrCodeAndSecretKey::class)($ request ->user ());
4043
44+ $ recoveryCodes = $ this ->generateRecoveryCodes ($ request ->user ());
45+
4146 $ request ->user ()->forceFill ([
4247 'two_factor_secret ' => encrypt ($ secret ),
43- 'two_factor_recovery_codes ' => encrypt (json_encode ($ this -> generateRecoveryCodes ( $ request -> user ()) ))
48+ 'two_factor_recovery_codes ' => encrypt (json_encode ($ recoveryCodes ))
4449 ])->save ();
4550
46- return back ()->with ('status ' , 'two-factor-authentication-enabled ' );
51+ return response ()->json ([
52+ 'status ' => 'two-factor-authentication-enabled ' ,
53+ 'svg ' => $ qrCode ,
54+ 'secret ' => $ secret ,
55+ 'recovery_codes ' => $ recoveryCodes
56+ ]);
4757 }
4858
4959 /**
@@ -98,45 +108,6 @@ public function confirm(Request $request)
98108 return back ()->withErrors (['code ' => 'The provided two-factor authentication code was invalid. ' ]);
99109 }
100110
101- /**
102- * Get the QR code SVG for the user's two factor authentication.
103- *
104- * @param \Illuminate\Http\Request $request
105- * @return \Illuminate\Http\Response
106- */
107- public function qrCode (Request $ request )
108- {
109- if (empty ($ request ->user ()->two_factor_secret )) {
110- return response ('' , 404 );
111- }
112-
113- // Get the existing secret key instead of generating a new one
114- $ secret = decrypt ($ request ->user ()->two_factor_secret );
115-
116- // Generate QR code based on the existing secret
117- $ google2fa = new \PragmaRX \Google2FA \Google2FA ();
118- $ companyName = config ('app.name ' , 'Laravel ' );
119-
120- $ g2faUrl = $ google2fa ->getQRCodeUrl (
121- $ companyName ,
122- $ request ->user ()->email ,
123- $ secret
124- );
125-
126- $ writer = new \BaconQrCode \Writer (
127- new \BaconQrCode \Renderer \ImageRenderer (
128- new \BaconQrCode \Renderer \RendererStyle \RendererStyle (400 ),
129- new \BaconQrCode \Renderer \Image \SvgImageBackEnd ()
130- )
131- );
132-
133- $ qrCode = base64_encode ($ writer ->writeString ($ g2faUrl ));
134-
135- return response ()->json ([
136- 'svg ' => $ qrCode ,
137- 'secret ' => $ secret
138- ]);
139- }
140111
141112 /**
142113 * Get the recovery codes for the user.
@@ -177,7 +148,7 @@ private function getRecoveryCodes($user)
177148 * Generate new recovery codes for the user.
178149 *
179150 * @param \Illuminate\Http\Request $request
180- * @return \Illuminate\Http\RedirectResponse
151+ * @return \Illuminate\Http\Response
181152 */
182153 public function regenerateRecoveryCodes (Request $ request )
183154 {
@@ -187,6 +158,14 @@ public function regenerateRecoveryCodes(Request $request)
187158 'two_factor_recovery_codes ' => encrypt (json_encode ($ codes ))
188159 ])->save ();
189160
161+ // Check if this is an AJAX request
162+ if ($ request ->wantsJson () || $ request ->ajax ()) {
163+ return response ()->json ([
164+ 'status ' => 'recovery-codes-generated ' ,
165+ 'recovery_codes ' => $ codes
166+ ]);
167+ }
168+
190169 return back ()->with ('status ' , 'recovery-codes-generated ' );
191170 }
192171}
0 commit comments