@@ -80,18 +80,21 @@ public function filter_nonce_life_filtered(): int {
80
80
/**
81
81
* Provide filter for address roles. Defaults to subscriber.
82
82
*
83
- * @param string $address Address for user.
83
+ * @param string $address Address for user.
84
+ * @param string $filtered_infura_id Filtered Infura ID.
85
+ * @param WP_User|false $user User object, if available.
84
86
*
85
- * @return mixed|void Filtered role for a given address.
87
+ * @return string Filtered role for a given address.
86
88
*/
87
- public function get_role_for_address_filtered ( string $ address ) {
89
+ public function get_role_for_address_filtered ( string $ address, string $ filtered_infura_id , $ user ): string {
88
90
/**
89
91
* Filter the default role for WP Rainbow users.
90
92
*
91
- * @param string $default Default role for new users.
92
- * @param string $address Address of user being added.
93
+ * @param string $default Default role for new users.
94
+ * @param string $address Address of user being added.
95
+ * @param WP_User|false $user User object, if available.
93
96
*/
94
- return apply_filters ( 'wp_rainbow_role_for_address ' , 'subscriber ' , $ address );
97
+ return apply_filters ( 'wp_rainbow_role_for_address ' , 'subscriber ' , $ address, $ filtered_infura_id , $ user );
95
98
}
96
99
97
100
// API ROUTES.
@@ -229,10 +232,12 @@ public function login_callback( WP_REST_Request $request ): WP_REST_Response {
229
232
]
230
233
);
231
234
232
- if ( ! empty ( $ wp_rainbow_options ['wp_rainbow_field_required_token ' ] ) && ! empty ( $ wp_rainbow_options ['wp_rainbow_field_infura_id ' ] ) ) {
235
+ $ filtered_infura_id = WP_Rainbow::instance ()->get_infura_id_filtered ();
236
+
237
+ if ( ! empty ( $ wp_rainbow_options ['wp_rainbow_field_required_token ' ] ) && ! empty ( $ filtered_infura_id ) ) {
233
238
// @TODO Figure out if ABI should be an option (or formatted differently).
234
239
$ example_abi = '[{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}] ' ;
235
- $ contract = new Contract ( 'https://mainnet.infura.io/v3/ ' . $ wp_rainbow_options [ ' wp_rainbow_field_infura_id ' ] , $ example_abi );
240
+ $ contract = new Contract ( 'https://mainnet.infura.io/v3/ ' . $ filtered_infura_id , $ example_abi );
236
241
$ contract ->at ( $ wp_rainbow_options ['wp_rainbow_field_required_token ' ] )->call (
237
242
'balanceOf ' ,
238
243
$ address ,
@@ -247,6 +252,8 @@ function ( $err, $balance ) use ( $wp_rainbow_options ) {
247
252
// Lookup or generate user and then sign them in.
248
253
$ user = get_user_by ( 'login ' , $ address );
249
254
$ sanitized_display_name = sanitize_text_field ( $ display_name );
255
+ $ role = $ this ->get_role_for_address_filtered ( $ address , $ filtered_infura_id , $ user );
256
+
250
257
if ( ! $ user ) {
251
258
// If there's not a user already, double check registration settings.
252
259
$ users_can_register = get_option ( 'users_can_register ' , false );
@@ -262,7 +269,7 @@ function ( $err, $balance ) use ( $wp_rainbow_options ) {
262
269
wp_update_user (
263
270
[
264
271
'ID ' => $ user ->ID ,
265
- 'role ' => $ this -> get_role_for_address_filtered ( $ address ) ,
272
+ 'role ' => $ role ,
266
273
'display_name ' => $ sanitized_display_name ,
267
274
]
268
275
);
@@ -278,20 +285,22 @@ function ( $err, $balance ) use ( $wp_rainbow_options ) {
278
285
*/
279
286
do_action ( 'wp_rainbow_user_created ' , $ user ->ID , $ address , $ sanitized_display_name );
280
287
281
- } elseif ( $ user -> display_name !== $ sanitized_display_name ) {
288
+ } else {
282
289
wp_update_user (
283
290
[
284
291
'ID ' => $ user ->ID ,
285
292
'display_name ' => $ sanitized_display_name ,
286
293
]
287
294
);
288
295
296
+ $ user ->set_role ( $ role );
297
+
289
298
/**
290
- * Fires when a WP Rainbow user's display name is updated.
299
+ * Fires when a WP Rainbow user's is updated on login .
291
300
*
292
- * @param int $user_id ID of new user account.
293
- * @param string $address Address of new user.
294
- * @param string $sanitized_display_name Display name of new user (either ENS or address).
301
+ * @param int $user_id ID of existing user account.
302
+ * @param string $address Address of existing user.
303
+ * @param string $sanitized_display_name Display name of existing user (either ENS or address).
295
304
*/
296
305
do_action ( 'wp_rainbow_user_updated ' , $ user ->ID , $ address , $ sanitized_display_name );
297
306
}
0 commit comments