PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.1-a.1
16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / extensions / blocks / subscriber-login / subscriber-login.php
jetpack / extensions / blocks / subscriber-login Last commit date
class-jetpack-subscription-site.php 1 year ago subscriber-login.php 5 days ago
subscriber-login.php
166 lines
1 <?php
2 /**
3 * Subscriber Login Block.
4 *
5 * @since 13.1
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\Subscriber_Login;
11
12 use Automattic\Jetpack\Blocks;
13 use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Abstract_Token_Subscription_Service;
14 use Automattic\Jetpack\Status\Host;
15 use Automattic\Jetpack\Status\Request;
16 use Jetpack;
17 use Jetpack_Gutenberg;
18 use Jetpack_Memberships;
19 use Jetpack_Options;
20
21 if ( ! defined( 'ABSPATH' ) ) {
22 exit( 0 );
23 }
24
25 require_once __DIR__ . '/class-jetpack-subscription-site.php';
26
27 /**
28 * Registers the block for use in Gutenberg
29 * This is done via an action so that we can disable
30 * registration if we need to.
31 */
32 function register_block() {
33 if (
34 ! Jetpack::is_module_active( 'subscriptions' ) ||
35 ! class_exists( 'Jetpack_Memberships' ) ||
36 ! class_exists( 'Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Abstract_Token_Subscription_Service' )
37 ) {
38 return;
39 }
40
41 Blocks::jetpack_register_block(
42 __DIR__,
43 array( 'render_callback' => __NAMESPACE__ . '\render_block' )
44 );
45
46 add_filter(
47 'jetpack_options_whitelist',
48 function ( $options ) {
49 $options[] = 'jetpack_subscriptions_login_navigation_enabled';
50
51 return $options;
52 }
53 );
54
55 // If called via REST API, we need to register later in the lifecycle
56 if ( ( new Host() )->is_wpcom_platform() && ! Request::is_frontend() ) {
57 add_action(
58 'restapi_theme_init',
59 function () {
60 Jetpack_Subscription_Site::init()->handle_subscriber_login_block_placements();
61 }
62 );
63 } else {
64 Jetpack_Subscription_Site::init()->handle_subscriber_login_block_placements();
65 }
66 }
67 add_action( 'init', __NAMESPACE__ . '\register_block' );
68
69 /**
70 * Returns current URL.
71 *
72 * @return string
73 */
74 function get_current_url() {
75 if ( ! isset( $_SERVER['HTTP_HOST'] ) || ! isset( $_SERVER['REQUEST_URI'] ) ) {
76 return '';
77 }
78
79 return ( is_ssl() ? 'https://' : 'http://' ) . wp_unslash( $_SERVER['HTTP_HOST'] ) . wp_unslash( $_SERVER['REQUEST_URI'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
80 }
81
82 /**
83 * Returns subscriber log in URL.
84 *
85 * @param string $redirect Path to redirect to on login.
86 *
87 * @return string
88 */
89 function get_subscriber_login_url( $redirect ) {
90 $redirect = ! empty( $redirect ) ? $redirect : get_site_url();
91
92 if ( ( new Host() )->is_wpcom_simple() ) {
93 // On WPCOM we will redirect immediately
94 return wpcom_logmein_redirect_url( $redirect, false, null, 'link', get_current_blog_id() );
95 }
96
97 // On self-hosted we will save and hide the token.
98 // rawurlencode the redirect before nesting it: it is already percent-encoded
99 // (e.g. an emoji or non-ASCII slug comes through as %F0%9F%8C%91), and add_query_arg
100 // does not encode the values it inserts. Without this extra layer the value is
101 // over-decoded to raw bytes by the time it reaches the subscribers/auth endpoint,
102 // which strips it and 404s. See NL-273.
103 $redirect_url = get_site_url() . '/wp-json/jetpack/v4/subscribers/auth';
104 $redirect_url = add_query_arg( 'redirect_url', rawurlencode( $redirect ), $redirect_url );
105
106 return add_query_arg(
107 array(
108 'site_id' => intval( Jetpack_Options::get_option( 'id' ) ),
109 'redirect_url' => rawurlencode( $redirect_url ),
110 ),
111 'https://subscribe.wordpress.com/memberships/jwt/'
112 );
113 }
114
115 /**
116 * Determines whether the current visitor is a logged in user or a subscriber.
117 *
118 * @return bool
119 */
120 function is_subscriber_logged_in() {
121 return is_user_logged_in() || Abstract_Token_Subscription_Service::has_token_from_cookie();
122 }
123
124 /**
125 * Renders Subscriber Login block.
126 *
127 * @param array $attributes The block attributes.
128 *
129 * @return string
130 */
131 function render_block( $attributes ) {
132 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
133
134 $block_template = '<div %1$s><a href="%2$s">%3$s</a></div>';
135 $redirect_url = ! empty( $attributes['redirectToCurrent'] ) ? get_current_url() : get_site_url();
136 $log_in_label = ! empty( $attributes['logInLabel'] ) ? sanitize_text_field( $attributes['logInLabel'] ) : esc_html__( 'Log in', 'jetpack' );
137 $log_out_label = ! empty( $attributes['logOutLabel'] ) ? sanitize_text_field( $attributes['logOutLabel'] ) : esc_html__( 'Log out', 'jetpack' );
138 $show_manage_link = ! empty( $attributes['showManageSubscriptionsLink'] );
139 $manage_subscriptions_label = ! empty( $attributes['manageSubscriptionsLabel'] ) ? sanitize_text_field( $attributes['manageSubscriptionsLabel'] ) : esc_html__( 'Manage subscription', 'jetpack' );
140
141 if ( ! is_subscriber_logged_in() ) {
142 return sprintf(
143 $block_template,
144 get_block_wrapper_attributes(),
145 get_subscriber_login_url( $redirect_url ),
146 $log_in_label
147 );
148 }
149
150 if ( $show_manage_link && Jetpack_Memberships::is_current_user_subscribed() ) {
151 return sprintf(
152 $block_template,
153 get_block_wrapper_attributes(),
154 'https://wordpress.com/reader/site/subscription/' . Jetpack_Memberships::get_blog_id(),
155 $manage_subscriptions_label
156 );
157 }
158
159 return sprintf(
160 $block_template,
161 get_block_wrapper_attributes(),
162 wp_logout_url( $redirect_url ),
163 $log_out_label
164 );
165 }
166