squash new oauth2 flow
This commit is contained in:
@@ -3,23 +3,43 @@ defined( 'ABSPATH' ) or die( 'Nope, not accessing this' );
|
||||
// https://codex.wordpress.org/Settings_API
|
||||
|
||||
// Fires as an admin screen or script is being initialized. Register out settings
|
||||
add_action( 'admin_init', 'wpgancio_settings_init' );
|
||||
function wpgancio_settings_init() {
|
||||
if (is_network_admin()) {
|
||||
add_action('network_admin_menu', 'wpgancio_settings_init');
|
||||
} else {
|
||||
add_action('admin_menu', 'wpgancio_settings_init');
|
||||
}
|
||||
|
||||
add_action('add_meta_boxes_event', 'wpgancio_remove_meta_boxes', 10, 2);
|
||||
function wpgancio_remove_meta_boxes () {
|
||||
remove_meta_box('postcustom', 'event', 'normal');
|
||||
}
|
||||
|
||||
function wpgancio_settings_init() {
|
||||
|
||||
// register a new settings page
|
||||
add_settings_section('wpgancio_settings', __('Settings'), FALSE, 'wpgancio');
|
||||
add_settings_section('wpgancio_settings', __('Settings'), false, 'wpgancio');
|
||||
|
||||
// register a new field in the 'wpgancio_settings' section
|
||||
add_settings_field('wpgancio_instance_url', __( 'Instance URL', 'wpgancio' ),
|
||||
add_settings_field('wpgancio_instance_url',
|
||||
__('Instance URL', 'wpgancio'),
|
||||
'wpgancio_instance_url_cb', 'wpgancio',
|
||||
'wpgancio_settings');
|
||||
'wpgancio_settings'
|
||||
);
|
||||
|
||||
register_setting( 'wpgancio', 'wpgancio_instance_url', 'wpgancio_instance_url_validate' );
|
||||
register_setting('wpgancio', 'wpgancio_instance_url', 'wpgancio_instance_url_validate');
|
||||
register_setting('wpgancio', 'wpgancio_client_id');
|
||||
register_setting('wpgancio', 'wpgancio_client_secret');
|
||||
register_setting('wpgancio', 'wpgancio_token');
|
||||
}
|
||||
|
||||
|
||||
add_action( 'update_option_wpgancio_instance_url', 'wpgancio_update_options', 15, 2);
|
||||
function wpgancio_update_options ($old_value, $instance_url) {
|
||||
$redirect_uri = get_site_url(null, '/wp-admin/options-general.php?page=wpgancio' );
|
||||
if (!is_network_admin()) {
|
||||
$redirect_uri = admin_url('options-general.php?page=wpgancio');
|
||||
} else {
|
||||
$redirect_uri = network_admin_url('settings.php?page=wpgancio');
|
||||
}
|
||||
$query = join('&', array(
|
||||
'response_type=code',
|
||||
'redirect_uri=' . esc_url($redirect_uri),
|
||||
@@ -27,18 +47,30 @@ function wpgancio_update_options ($old_value, $instance_url) {
|
||||
'client_id=' . get_option('wpgancio_client_id'),
|
||||
));
|
||||
|
||||
wp_redirect("${instance_url}/authorize?${query}");
|
||||
wp_redirect("${instance_url}/oauth/authorize?${query}");
|
||||
// return $instance_url;
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// Fires before the administration menu loads in the admin, add our options page
|
||||
add_action( 'admin_menu', 'wpgancio_options_page' );
|
||||
add_action('admin_menu', 'wpgancio_options_page');
|
||||
|
||||
function wpgancio_instance_url_validate ($instance_url) {
|
||||
$redirect_uri = get_site_url(null, '/wp-admin/options-general.php?page=wpgancio' );
|
||||
|
||||
$old_instance_url = get_option('wpgancio_instance_url');
|
||||
if ($instance_url === $old_instance_url) {
|
||||
return $instance_url;
|
||||
}
|
||||
|
||||
if (!is_network_admin()) {
|
||||
$redirect_uri = get_site_url(null, '/wp-admin/options-general.php?page=wpgancio');
|
||||
} else {
|
||||
$redirect_uri = get_site_url(null, '/wp-admin/network/settings.php?page=wpgancio');
|
||||
}
|
||||
|
||||
// create this WP instance as a new client in selected gancio instance
|
||||
$response = wp_remote_post( "$instance_url/api/client", array(
|
||||
$response = wp_remote_post("$instance_url/api/client", array(
|
||||
'method' => 'POST',
|
||||
'body' => array(
|
||||
'client_name' => 'WPGancio',
|
||||
@@ -48,13 +80,18 @@ function wpgancio_instance_url_validate ($instance_url) {
|
||||
)
|
||||
));
|
||||
|
||||
if ( is_wp_error( $response ) ) {
|
||||
if (is_wp_error($response)) {
|
||||
add_settings_error('wpgancio_messages', 'wpgancio_messages',
|
||||
$response->get_error_message());
|
||||
} else {
|
||||
$data = json_decode( wp_remote_retrieve_body($response), true);
|
||||
update_option('wpgancio_client_secret', sanitize_key($data['client_secret']));
|
||||
update_option('wpgancio_client_id', sanitize_key($data['client_id']));
|
||||
if (!is_network_admin()) {
|
||||
update_option('wpgancio_client_secret', sanitize_key($data['client_secret']));
|
||||
update_option('wpgancio_client_id', sanitize_key($data['client_id']));
|
||||
} else {
|
||||
update_site_option('wpgancio_client_secret', sanitize_key($data['client_secret']));
|
||||
update_site_option('wpgancio_client_id', sanitize_key($data['client_id']));
|
||||
}
|
||||
return $instance_url;
|
||||
}
|
||||
}
|
||||
@@ -79,12 +116,14 @@ function wpgancio_options_page() {
|
||||
// you can add custom key value pairs to be used inside your callbacks.
|
||||
function wpgancio_instance_url_cb( $args ) {
|
||||
// get the value of the setting we've registered with register_setting()
|
||||
$instance_url = get_option( 'wpgancio_instance_url' );
|
||||
if (empty($instance_url)) {
|
||||
$instance_url = WP_GANCIO_DEFAULT_INSTANCEURL;
|
||||
if (is_network_admin()) {
|
||||
$instance_url = get_site_option( 'wpgancio_instance_url' );
|
||||
} else {
|
||||
$instance_url = get_option( 'wpgancio_instance_url' );
|
||||
}
|
||||
// output the field
|
||||
?>
|
||||
|
||||
// output the field
|
||||
?>
|
||||
|
||||
<input id="wpgancio_instance_url"
|
||||
value="<?php echo esc_attr($instance_url); ?>"
|
||||
@@ -104,13 +143,13 @@ function wpgancio_instance_url_cb( $args ) {
|
||||
*/
|
||||
function wpgancio_options_page_html() {
|
||||
// check user capabilities
|
||||
if ( ! current_user_can( 'manage_options' ) ) { return; }
|
||||
if (! current_user_can('manage_options')) { return; }
|
||||
|
||||
// show error/update messages
|
||||
$code = sanitize_key($_GET['code']);
|
||||
$code = sanitize_key(isset($_GET['code']) ? $_GET['code'] : '');
|
||||
if ( $code ) {
|
||||
update_option('wpgancio_code', $code);
|
||||
$instance_url = get_option( 'wpgancio_instance_url' );
|
||||
$instance_url = get_option('wpgancio_instance_url');
|
||||
|
||||
$response = wp_remote_post($instance_url . "/oauth/token", array(
|
||||
'body' => array(
|
||||
@@ -120,18 +159,18 @@ function wpgancio_options_page_html() {
|
||||
'grant_type' => 'authorization_code',
|
||||
'code' => $code
|
||||
)));
|
||||
if ( is_wp_error( $response ) ) {
|
||||
if (is_wp_error($response)) {
|
||||
add_settings_error('wpgancio_messages', 'wpgancio_messages', $response->get_error_message());
|
||||
settings_errors( 'wpgancio_messages' );
|
||||
} else if ( $response['response']['code'] == 500 ) {
|
||||
settings_errors('wpgancio_messages');
|
||||
} elseif ($response['response']['code'] == 500) {
|
||||
add_settings_error('wpgancio_messages', 'wpgancio_messages', wp_remote_retrieve_body($response));
|
||||
settings_errors( 'wpgancio_messages' );
|
||||
settings_errors('wpgancio_messages');
|
||||
} else {
|
||||
$data = json_decode( wp_remote_retrieve_body($response), true);
|
||||
$data = json_decode(wp_remote_retrieve_body($response), true);
|
||||
update_option('wpgancio_token', sanitize_key($data['access_token']));
|
||||
update_option('wpgancio_refresh', sanitize_key($data['refresh_token']));
|
||||
add_settings_error('wpgancio_messages', 'wpgancio_messages', 'Association completed!', 'success');
|
||||
settings_errors( 'wpgancio_messages' );
|
||||
settings_errors('wpgancio_messages');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,19 +178,20 @@ function wpgancio_options_page_html() {
|
||||
?>
|
||||
|
||||
<div class="wrap">
|
||||
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
|
||||
|
||||
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
|
||||
<form action="options.php" method="post">
|
||||
<?php
|
||||
|
||||
// output security fields for the registered setting "wpgancio"
|
||||
settings_fields( 'wpgancio' );
|
||||
settings_fields('wpgancio');
|
||||
|
||||
// output setting sections and their fields
|
||||
// (sections are registered for "wpgancio", each field is registered to a specific section)
|
||||
do_settings_sections( 'wpgancio' );
|
||||
do_settings_sections('wpgancio');
|
||||
|
||||
// output save settings button
|
||||
submit_button( 'Save Settings' );
|
||||
submit_button('Save Settings');
|
||||
?>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user