403) ); } if (Akkedli_Connector_State::exists()) { wp_safe_redirect(admin_url('admin.php?page=akkedli-connector&error=v2_state')); exit; } if ('POST' === self::method()) { self::handle_post(); return; } $webhook_url = isset($_GET['webhook_url']) ? esc_url_raw(wp_unslash($_GET['webhook_url'])) : ''; $return_url = isset($_GET['return_url']) ? esc_url_raw(wp_unslash($_GET['return_url'])) : ''; if (empty($webhook_url)) { wp_safe_redirect(admin_url('admin.php?page=akkedli-connector&error=missing_params')); exit; } self::render_form($webhook_url, $return_url); exit; } public static function render_form($webhook_url, $return_url = '') { ?>

403) ); } $api_key = isset($_POST['api_key']) ? sanitize_text_field(wp_unslash($_POST['api_key'])) : ''; $webhook_url = isset($_POST['webhook_url']) ? esc_url_raw(wp_unslash($_POST['webhook_url'])) : ''; $return_url = isset($_POST['return_url']) ? esc_url_raw(wp_unslash($_POST['return_url'])) : ''; if (empty($api_key) || empty($webhook_url)) { wp_safe_redirect(admin_url('admin.php?page=akkedli-connector&error=missing_params')); exit; } $values = array('akkedli_api_key' => $api_key, 'akkedli_webhook_url' => $webhook_url, 'akkedli_connected_at' => current_time('mysql'), 'akkedli_store_domain' => home_url()); if (!self::persist($values)) { unset($_POST['api_key'], $api_key); wp_safe_redirect(admin_url('admin.php?page=akkedli-connector&error=persistence_failed')); exit; } unset($_POST['api_key']); $api_key = ''; if (!empty($return_url)) { $redirect_url = add_query_arg(array( 'status' => 'success', 'domain' => rawurlencode(home_url()), 'store_name' => rawurlencode(get_bloginfo('name')), ), $return_url); wp_redirect(esc_url_raw($redirect_url)); // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- Existing Dashboard return URL behavior. exit; } wp_safe_redirect(admin_url('admin.php?page=akkedli-connector&connected=1')); exit; } public static function persist(array $values) { global $wpdb; $suppressed = $wpdb->suppress_errors(true); try { update_option('akkedli_api_key_validated', 0); foreach ($values as $name => $value) update_option($name, $value); foreach ($values as $name => $value) { $stored = $wpdb->get_var($wpdb->prepare("SELECT option_value FROM {$wpdb->options} WHERE option_name=%s", $name)); if (!is_string($stored) || !hash_equals((string) $value, $stored)) return false; } $legacy = Akkedli_Legacy_Connection_State::load(); if (null !== $legacy) { if (!is_array($legacy) || 'disconnected' !== $legacy['status']) return false; $raw = Akkedli_Legacy_Connection_State::raw(); if (1 !== $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->options} WHERE option_name=%s AND option_value=%s", Akkedli_Legacy_Connection_State::OPTION, $raw))) return false; wp_cache_delete(Akkedli_Legacy_Connection_State::OPTION, 'options'); } update_option('akkedli_api_key_validated', 1); return '1' === (string) $wpdb->get_var($wpdb->prepare( "SELECT option_value FROM {$wpdb->options} WHERE option_name=%s", 'akkedli_api_key_validated')); } finally { $wpdb->suppress_errors($suppressed); } } private static function is_request() { return isset($_GET['action'], $_GET['page']) && 'auto_connect' === sanitize_text_field(wp_unslash($_GET['action'])) && 'akkedli-connector' === sanitize_text_field(wp_unslash($_GET['page'])); } private static function method() { return isset($_SERVER['REQUEST_METHOD']) ? strtoupper(sanitize_text_field(wp_unslash($_SERVER['REQUEST_METHOD']))) : 'GET'; } }