delete( "{$wpdb->prefix}forum_user_meta", [ 'user_id' => $uid, 'meta_key' => self::META_SECRET ], [ '%d', '%s' ] ); $wpdb->delete( "{$wpdb->prefix}forum_user_meta", [ 'user_id' => $uid, 'meta_key' => self::META_PENDING ], [ '%d', '%s' ] ); } // ── Base32 ──────────────────────────────────────────────────────────────── private static $b32 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; public static function base32_encode( $input ) { $output = ''; $buf = 0; $buf_bits = 0; for ( $i = 0, $len = strlen($input); $i < $len; $i++ ) { $buf = ( $buf << 8 ) | ord( $input[$i] ); $buf_bits += 8; while ( $buf_bits >= 5 ) { $buf_bits -= 5; $output .= self::$b32[ ( $buf >> $buf_bits ) & 0x1f ]; } } if ( $buf_bits > 0 ) { $output .= self::$b32[ ( $buf << ( 5 - $buf_bits ) ) & 0x1f ]; } // Padding to multiple of 8 while ( strlen($output) % 8 !== 0 ) $output .= '='; return $output; } public static function base32_decode( $input ) { // Leerzeichen & Padding entfernen, Uppercase $input = strtoupper( preg_replace( '/\s+/', '', $input ) ); $input = rtrim( $input, '=' ); $map = array_flip( str_split( self::$b32 ) ); $output = ''; $buf = 0; $bits = 0; for ( $i = 0, $len = strlen($input); $i < $len; $i++ ) { if ( ! isset( $map[ $input[$i] ] ) ) continue; // ungültiges Zeichen ignorieren $buf = ( $buf << 5 ) | $map[ $input[$i] ]; $bits += 5; if ( $bits >= 8 ) { $bits -= 8; $output .= chr( ( $buf >> $bits ) & 0xff ); } } return $output; } }