| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?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(){
- wp_die( json_encode( [
- 'data' => [
- 'connected' => ( $this->client_id ),
- 'connect_url' => self::connect_url(),
- ]
- ] ) );
- });
- 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() {
- // wp_verify_nonce( $_REQUEST['nonce'], 'nf-oauth-connect' );
- 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() {
- 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;
- }
- }
|