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 |
||
42 | class Manager { |
||
43 | |||
44 | const SESSION_UID_KEY = 'two_factor_auth_uid'; |
||
45 | const SESSION_UID_DONE = 'two_factor_auth_passed'; |
||
46 | const BACKUP_CODES_APP_ID = 'twofactor_backupcodes'; |
||
47 | const BACKUP_CODES_PROVIDER_ID = 'backup_codes'; |
||
48 | const REMEMBER_LOGIN = 'two_factor_remember_login'; |
||
49 | |||
50 | /** @var AppManager */ |
||
51 | private $appManager; |
||
52 | |||
53 | /** @var ISession */ |
||
54 | private $session; |
||
55 | |||
56 | /** @var IConfig */ |
||
57 | private $config; |
||
58 | |||
59 | /** @var IManager */ |
||
60 | private $activityManager; |
||
61 | |||
62 | /** @var ILogger */ |
||
63 | private $logger; |
||
64 | |||
65 | /** @var TokenProvider */ |
||
66 | private $tokenProvider; |
||
67 | |||
68 | /** @var ITimeFactory */ |
||
69 | private $timeFactory; |
||
70 | |||
71 | /** |
||
72 | * @param AppManager $appManager |
||
73 | * @param ISession $session |
||
74 | * @param IConfig $config |
||
75 | * @param IManager $activityManager |
||
76 | * @param ILogger $logger |
||
77 | * @param TokenProvider $tokenProvider |
||
78 | * @param ITimeFactory $timeFactory |
||
79 | */ |
||
80 | View Code Duplication | public function __construct(AppManager $appManager, |
|
95 | |||
96 | /** |
||
97 | * Determine whether the user must provide a second factor challenge |
||
98 | * |
||
99 | * @param IUser $user |
||
100 | * @return boolean |
||
101 | */ |
||
102 | public function isTwoFactorAuthenticated(IUser $user) { |
||
106 | |||
107 | /** |
||
108 | * Disable 2FA checks for the given user |
||
109 | * |
||
110 | * @param IUser $user |
||
111 | */ |
||
112 | public function disableTwoFactorAuthentication(IUser $user) { |
||
115 | |||
116 | /** |
||
117 | * Enable all 2FA checks for the given user |
||
118 | * |
||
119 | * @param IUser $user |
||
120 | */ |
||
121 | public function enableTwoFactorAuthentication(IUser $user) { |
||
124 | |||
125 | /** |
||
126 | * Get a 2FA provider by its ID |
||
127 | * |
||
128 | * @param IUser $user |
||
129 | * @param string $challengeProviderId |
||
130 | * @return IProvider|null |
||
131 | */ |
||
132 | public function getProvider(IUser $user, $challengeProviderId) { |
||
136 | |||
137 | /** |
||
138 | * @param IUser $user |
||
139 | * @return IProvider|null the backup provider, if enabled for the given user |
||
140 | */ |
||
141 | public function getBackupProvider(IUser $user) { |
||
148 | |||
149 | /** |
||
150 | * Get the list of 2FA providers for the given user |
||
151 | * |
||
152 | * @param IUser $user |
||
153 | * @param bool $includeBackupApp |
||
154 | * @return IProvider[] |
||
155 | * @throws Exception |
||
156 | */ |
||
157 | public function getProviders(IUser $user, $includeBackupApp = false) { |
||
187 | |||
188 | /** |
||
189 | * Load an app by ID if it has not been loaded yet |
||
190 | * |
||
191 | * @param string $appId |
||
192 | */ |
||
193 | protected function loadTwoFactorApp($appId) { |
||
198 | |||
199 | /** |
||
200 | * Verify the given challenge |
||
201 | * |
||
202 | * @param string $providerId |
||
203 | * @param IUser $user |
||
204 | * @param string $challenge |
||
205 | * @return boolean |
||
206 | */ |
||
207 | public function verifyChallenge($providerId, IUser $user, $challenge) { |
||
239 | |||
240 | /** |
||
241 | * Push a 2fa event the user's activity stream |
||
242 | * |
||
243 | * @param IUser $user |
||
244 | * @param string $event |
||
245 | */ |
||
246 | private function publishEvent(IUser $user, $event, array $params) { |
||
260 | |||
261 | /** |
||
262 | * Check if the currently logged in user needs to pass 2FA |
||
263 | * |
||
264 | * @param IUser $user the currently logged in user |
||
265 | * @return boolean |
||
266 | */ |
||
267 | public function needsSecondFactor(IUser $user = null) { |
||
317 | |||
318 | /** |
||
319 | * Prepare the 2FA login |
||
320 | * |
||
321 | * @param IUser $user |
||
322 | * @param boolean $rememberMe |
||
323 | */ |
||
324 | public function prepareTwoFactorLogin(IUser $user, $rememberMe) { |
||
332 | |||
333 | } |
||
334 |