Current Path : /storage/v11800/salandingpage/public_html/wp-content/plugins/ninja-forms/services/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/salandingpage/public_html/wp-content/plugins/ninja-forms/services/oauth.php |
<?php
namespace NinjaForms;
class OAuth
{
protected static $instance;
protected $base_url;
protected $client_id,
$client_secret;
public static function getInstance() {
if ( null == self::$instance ) {
self::$instance = new static();
}
return self::$instance;
}
public static function set_base_url( $base_url ) {
self::getInstance()->base_url = trailingslashit( $base_url );
}
protected function __construct() {
$this->client_id = get_option( 'ninja_forms_oauth_client_id' );
$this->client_secret = get_option( 'ninja_forms_oauth_client_secret' );
if( ! $this->client_secret ){
$this->client_secret = self::generate_secret();
update_option( 'ninja_forms_oauth_client_secret', $this->client_secret );
}
}
public function setup() {
add_action( 'wp_ajax_nf_oauth', function(){
// Does the current user have admin privileges
if (!current_user_can(apply_filters('ninja_forms_admin_all_forms_capabilities', 'manage_options'))) {
return;
}
wp_die( json_encode( [
'data' => [
'connected' => ( $this->client_id ),
'connect_url' => self::connect_url(),
]
] ) );
});
// These Ajax calls handled in 'connect' and 'disconnect', respectively
add_action( 'wp_ajax_nf_oauth_connect', [ $this, 'connect' ] );
add_action( 'wp_ajax_nf_oauth_disconnect', [ $this, 'disconnect' ] );
}
public static function is_connected() {
return ( self::getInstance()->client_id );
}
public static function get_client_id() {
return self::getInstance()->client_id;
}
public static function get_client_secret() {
return self::getInstance()->client_secret;
}
public static function connect_url( $endpoint = 'connect' ) {
$client_redirect = add_query_arg( [
'action' => 'nf_oauth_connect',
'nonce' => wp_create_nonce( 'nf-oauth-connect' )
], admin_url( 'admin-ajax.php' ) );
return add_query_arg([
'client_secret' => self::get_client_secret(),
'client_redirect' => urlencode( $client_redirect ),
'client_site_url' => urlencode( site_url() ),
], self::getInstance()->base_url . $endpoint );
}
public function connect() {
// Does the current user have admin privileges
if (!current_user_can('manage_options')) {
return;
}
if( ! wp_verify_nonce( $_REQUEST['nonce'], 'nf-oauth-connect' ) ) return;
if( ! isset( $_GET[ 'client_id' ] ) ) return;
$client_id = sanitize_text_field( $_GET[ 'client_id' ] );
update_option( 'ninja_forms_oauth_client_id', $client_id );
if( isset( $_GET[ 'redirect' ] ) ){
$redirect = sanitize_text_field( $_GET[ 'redirect' ] );
$redirect = add_query_arg( 'client_id', $client_id, $redirect );
wp_redirect( $redirect );
exit;
}
wp_safe_redirect( admin_url( 'admin.php?page=ninja-forms#services' ) );
exit;
}
public function disconnect() {
// Does the current user have admin privileges
if (!current_user_can('manage_options')) {
return;
}
if( ! wp_verify_nonce( $_REQUEST['nonce'], 'nf-oauth-disconnect' ) ) return;
do_action( 'ninja_forms_oauth_disconnect' );
$url = trailingslashit( $this->base_url ) . 'disconnect';
$args = [
'blocking' => false,
'method' => 'DELETE',
'body' => [
'client_id' => get_option( 'ninja_forms_oauth_client_id' ),
'client_secret' => get_option( 'ninja_forms_oauth_client_secret' )
]
];
$response = wp_remote_request( $url, $args );
delete_option( 'ninja_forms_oauth_client_id' );
delete_option( 'ninja_forms_oauth_client_secret' );
wp_die( 1 );
}
public static function generate_secret( $length = 40 ) {
if( 0 >= $length ) $length = 40; // Min key length.
if( 255 <= $length ) $length = 255; // Max key length.
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$random_string = '';
for ( $i = 0; $i < $length; $i ++ ) {
$random_string .= $characters[ rand( 0, strlen( $characters ) - 1 ) ];
}
return $random_string;
}
}