22
33namespace Cleantalk \ApbctWP \FindSpam ;
44
5+ use Cleantalk \Common \Helper ;
56use Cleantalk \Common \TT ;
67
78/**
@@ -16,24 +17,6 @@ class LoginIPKeeper
1617 * @var string WordPress option name for storing user IP data.
1718 */
1819 private static $ wp_meta_name = '_cleantalk_ip_keeper_data ' ;
19- /**
20- * @var int Time in seconds after which inactive users are deleted (30 days by default).
21- */
22- private static $ user_inactive_time_to_being_deleted = 86400 * 30 ;
23-
24- /**
25- * Hook action.
26- *
27- * @param \WP_User $wp_user WordPress user object.
28- * @return void
29- */
30- public function hookSaveLoggedInUserData ($ wp_user )
31- {
32- // run rotation on every login event
33- $ this ->rotateData ();
34- // run record adding to user meta
35- $ this ->addRecord ($ wp_user );
36- }
3720
3821 /**
3922 * Save the provided in user's IP and last login from session_tokens.
@@ -42,19 +25,16 @@ public function hookSaveLoggedInUserData($wp_user)
4225 *
4326 * @return void
4427 */
45- public function addRecord ($ wp_user )
28+ public function addUserIP ($ wp_user )
4629 {
4730 // run record adding to user meta
4831 if ($ wp_user instanceof \WP_User && 0 !== $ wp_user ->ID ) {
4932 $ session_tokens = get_user_meta ($ wp_user ->ID , 'session_tokens ' , true );
5033 $ data = reset ($ session_tokens );
51- $ record = array ();
5234 if ($ data ) {
53- $ record ['ip ' ] = TT ::getArrayValueAsString ($ data , 'ip ' );
54- $ record ['last_login ' ] = TT ::getArrayValueAsString ($ data , 'login ' );
55- $ record = json_encode ($ record );
56- if (false !== $ record ) {
57- $ this ->updateMetaRecord ($ wp_user ->ID , $ record );
35+ $ ip = TT ::getArrayValueAsString ($ data , 'ip ' );
36+ if ( Helper::ipValidate ($ ip ) ) {
37+ update_user_meta ($ wp_user ->ID , self ::$ wp_meta_name , $ ip );
5838 }
5939 }
6040 }
@@ -64,90 +44,14 @@ public function addRecord($wp_user)
6444 * Retrieves data from user meta of a user by his user ID.
6545 *
6646 * @param int|string $user_id User ID to search for.
67- * @param string $property ip|last_login, default is ip
6847 *
6948 * @return string|null The selected record property value of user meta data.
7049 * @psalm-suppress PossiblyUnusedMethod
7150 */
72- public function getMetaRecordValue ($ user_id, $ property = ' ip ' )
51+ public function getIP ($ user_id )
7352 {
74- $ result = null ;
7553 $ user_id = TT ::toInt ($ user_id );
76- $ meta = get_user_meta ($ user_id , self ::$ wp_meta_name , true );
77- $ meta = json_decode ($ meta , true );
78- if (!empty ($ meta ) && !empty ($ meta [$ property ])) {
79- $ result = $ meta [$ property ];
80- }
81- return $ result ;
82- }
83-
84- /**
85- * Remove inactive users from the stored data.
86- *
87- * @return void
88- * @psalm-suppress PossiblyUnusedMethod
89- */
90- private function rotateData ()
91- {
92- global $ wpdb ;
93- $ meta_values = $ wpdb ->get_results (
94- $ wpdb ->prepare (
95- "SELECT user_id, meta_value
96- FROM {$ wpdb ->usermeta }
97- WHERE meta_key = %s " ,
98- self ::$ wp_meta_name
99- ),
100- ARRAY_A
101- );
102- foreach ($ meta_values as $ _meta => $ data ) {
103- $ user_id = isset ($ data ['user_id ' ])
104- ? $ data ['user_id ' ]
105- : false ;
106- $ user_exists = !empty ($ user_id )
107- ? !empty (get_user_by ('ID ' , $ user_id ))
108- : false ;
109- if ($ user_id && (!$ user_exists || !$ this ->isUserAlive ($ user_id ))) {
110- $ this ->deleteUserMetaRecord ($ user_id );
111- }
112- }
113- }
114-
115- /**
116- * @param int|string $user_id
117- *
118- * @return void
119- */
120- public function deleteUserMetaRecord ($ user_id )
121- {
122- $ user_id = TT ::toInt ($ user_id );
123- delete_user_meta ($ user_id , self ::$ wp_meta_name );
124- }
125-
126- /**
127- * Adds a new record to the keeper data.
128- *
129- * @param int $user_id User ID.
130- * @param string $record JSON of meta record to add.
131- * @return void
132- */
133- private function updateMetaRecord ($ user_id , $ record )
134- {
135- update_user_meta ($ user_id , self ::$ wp_meta_name , $ record );
136- }
137-
138- /**
139- * Check if IP record meta last login value is lesser than inactivity time.
140- * @param int|string $user_id
141- *
142- * @return bool False if no record found or last login is more that inactivity time, true otherwise.
143- */
144- private function isUserAlive ($ user_id )
145- {
146- $ last_login = $ this ->getMetaRecordValue ($ user_id , 'last_login ' );
147- if ($ last_login ) {
148- $ last_login = TT ::toInt ($ last_login );
149- return time () - $ last_login < self ::$ user_inactive_time_to_being_deleted ;
150- }
151- return false ;
54+ $ ip = get_user_meta ($ user_id , self ::$ wp_meta_name , true );
55+ return Helper::ipValidate ($ ip ) ? $ ip : null ;
15256 }
15357}
0 commit comments