Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
21 | class AccountSecurityController extends BaseController |
||
22 | { |
||
23 | /** |
||
24 | * Check if Feature Status is Enabled. |
||
25 | * |
||
26 | * @return Response |
||
27 | */ |
||
28 | public function featureStatus(): Response |
||
38 | |||
39 | /** |
||
40 | * Save Security Questions. |
||
41 | * |
||
42 | * @param Request $request |
||
43 | * |
||
44 | * @return JsonResponse |
||
45 | */ |
||
46 | public function saveQuestions(Request $request): JsonResponse |
||
47 | { |
||
48 | if (UserFacade::getUser()->getChocolateyId()->password != hash(Config::get('chocolatey.security.hash'), $request->json()->get('password'))) { |
||
49 | return response()->json(['error' => 'invalid_password'], 400); |
||
|
|||
50 | } |
||
51 | |||
52 | UserSecurity::updateOrCreate([ |
||
53 | 'user_id' => UserFacade::getUser()->uniqueId, |
||
54 | 'firstQuestion' => $request->json()->get('questionId1'), |
||
55 | 'secondQuestion' => $request->json()->get('questionId2'), |
||
56 | 'firstAnswer' => $request->json()->get('answer1'), |
||
57 | 'secondAnswer' => $request->json()->get('answer2'), ]); |
||
58 | |||
59 | return response()->json(null, 204); |
||
60 | } |
||
61 | |||
62 | /** |
||
63 | * Disable Safety Lock. |
||
64 | * |
||
65 | * @return JsonResponse |
||
66 | */ |
||
67 | public function disable(): JsonResponse |
||
73 | |||
74 | /** |
||
75 | * Reset Trusted Devices. |
||
76 | * |
||
77 | * @return JsonResponse |
||
78 | */ |
||
79 | public function reset(): JsonResponse |
||
85 | |||
86 | /** |
||
87 | * Change User Password. |
||
88 | * |
||
89 | * @TODO: Implement Notification E-mail of Password change |
||
90 | * |
||
91 | * @param Request $request |
||
92 | * |
||
93 | * @return JsonResponse |
||
94 | */ |
||
95 | public function changePassword(Request $request): JsonResponse |
||
102 | |||
103 | /** |
||
104 | * Confirm E-Mail Activation. |
||
105 | * |
||
106 | * @param Request $request |
||
107 | * |
||
108 | * @return JsonResponse |
||
109 | */ |
||
110 | public function confirmActivation(Request $request): JsonResponse |
||
111 | { |
||
112 | View Code Duplication | if (Mail::get($request->json()->get('token')) == null) { |
|
113 | return response()->json(['error' => 'activation.invalid_token'], 400); |
||
114 | } |
||
115 | |||
116 | ChocolateyId::find(Mail::get()->mail)->update(['mail_verified' => '1']); |
||
117 | |||
118 | if (strpos(Mail::get()->link, 'change-email') !== false) { |
||
119 | $email = str_replace('change-email/', '', Mail::get()->link); |
||
120 | |||
121 | User::where('mail', Mail::get()->mail)->update(['mail' => $email]); |
||
122 | |||
123 | ChocolateyId::find(Mail::get()->mail)->update(['mail' => $email]); |
||
124 | } |
||
125 | |||
126 | return response()->json(['email' => Mail::get()->mail, 'emailVerified' => true, 'identityVerified' => true]); |
||
127 | } |
||
128 | |||
129 | /** |
||
130 | * Change User E-mail. |
||
131 | * |
||
132 | * @param Request $request |
||
133 | * |
||
134 | * @return JsonResponse |
||
135 | */ |
||
136 | public function changeMail(Request $request): JsonResponse |
||
150 | |||
151 | /** |
||
152 | * Send the E-Mail confirmation. |
||
153 | * |
||
154 | * @param Request $request |
||
155 | */ |
||
156 | protected function sendChangeMailConfirmation(Request $request) |
||
169 | |||
170 | /** |
||
171 | * Get User Security Questions. |
||
172 | * |
||
173 | * @return JsonResponse |
||
174 | */ |
||
175 | public function getQuestions(): JsonResponse |
||
190 | |||
191 | /** |
||
192 | * Verify User Security Questions. |
||
193 | * |
||
194 | * @param Request $request |
||
195 | * |
||
196 | * @return JsonResponse |
||
197 | */ |
||
198 | public function verifyQuestions(Request $request): JsonResponse |
||
212 | |||
213 | /** |
||
214 | * Confirm User Change Password. |
||
215 | * |
||
216 | * @param Request $request |
||
217 | * |
||
218 | * @return mixed |
||
219 | */ |
||
220 | public function confirmChangePassword(Request $request): JsonResponse |
||
230 | } |
||
231 |
It seems like the method you are trying to call exists only in some of the possible types.
Let’s take a look at an example:
Available Fixes
Add an additional type-check:
Only allow a single type to be passed if the variable comes from a parameter: