Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
71.43% covered (warning)
71.43%
5 / 7
CRAP
89.47% covered (warning)
89.47%
34 / 38
init
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
WPGraphQL\JWT_Authentication\JWT_Authentication
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
4 / 6
15.31
88.89% covered (warning)
88.89%
32 / 36
 instance
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
7 / 7
 __clone
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 __wakeup
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 setup_constants
100.00% covered (success)
100.00%
1 / 1
6
100.00% covered (success)
100.00%
11 / 11
 includes
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
3 / 3
 init
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
11 / 11
<?php
/**
 * Plugin Name: WPGraphQL JWT Authentication
 * Plugin URI: https://www.wpgraphql.com
 * Description: JWT Authentication for WPGraphQL
 * Author: WPGraphQL, Jason Bahl
 * Author URI: https://www.wpgraphql.com
 * Text Domain: wp-graphql-jwt-authentication-jwt-authentication
 * Domain Path: /languages
 * Version: 0.3.0
 * Requires at least: 4.7.0
 * Tested up to: 4.8.3
 * Requires PHP: 5.5
 * License: GPL-3
 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
 *
 * @package         WPGraphQL_JWT_Authentication
 */
namespace WPGraphQL\JWT_Authentication;
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
    die;
}
if ( file_exists( __DIR__ . '/c3.php' ) ) {
    require_once( 'c3.php' );
}
if ( ! class_exists( '\WPGraphQL\JWT_Authentication' ) ) :
    final class JWT_Authentication {
        /**
         * Stores the instance of the JWT_Authentication class
         *
         * @var JWT_Authentication The one true JWT_Authentication
         * @since  0.0.1
         * @access private
         */
        private static $instance;
        /**
         * The instance of the JWT_Authentication object
         *
         * @return object|JWT_Authentication - The one true JWT_Authentication
         * @since  0.0.1
         * @access public
         */
        public static function instance() {
            if ( ! isset( self::$instance ) && ! ( self::$instance instanceof JWT_Authentication ) ) {
                self::$instance = new JWT_Authentication;
                self::$instance->setup_constants();
                self::$instance->includes();
            }
            self::$instance->init();
            /**
             * Fire off init action
             *
             * @param JWT_Authentication $instance The instance of the Init_JWT_Authentication class
             */
            do_action( 'graphql_jwt_authentication_init', self::$instance );
            /**
             * Return the Init_JWT_Authentication Instance
             */
            return self::$instance;
        }
        /**
         * Throw error on object clone.
         * The whole idea of the singleton design pattern is that there is a single object
         * therefore, we don't want the object to be cloned.
         *
         * @since  0.0.1
         * @access public
         * @return void
         */
        public function __clone() {
            // Cloning instances of the class is forbidden.
            _doing_it_wrong( __FUNCTION__, esc_html__( 'The Init_JWT_Authentication class should not be cloned.', 'wp-graphql-jwt-authentication' ), '0.0.1' );
        }
        /**
         * Disable unserializing of the class.
         *
         * @since  0.0.1
         * @access protected
         * @return void
         */
        public function __wakeup() {
            // De-serializing instances of the class is forbidden.
            _doing_it_wrong( __FUNCTION__, esc_html__( 'De-serializing instances of the WPGraphQL class is not allowed', 'wp-graphql-jwt-authentication' ), '0.0.1' );
        }
        /**
         * Setup plugin constants.
         *
         * @access private
         * @since  0.0.1
         * @return void
         */
        private function setup_constants() {
            // Plugin version.
            if ( ! defined( 'WPGRAPHQL_JWT_AUTHENTICATION_VERSION' ) ) {
                define( 'WPGRAPHQL_JWT_AUTHENTICATION_VERSION', '0.3.0' );
            }
            // Plugin Folder Path.
            if ( ! defined( 'WPGRAPHQL_JWT_AUTHENTICATION_PLUGIN_DIR' ) ) {
                define( 'WPGRAPHQL_JWT_AUTHENTICATION_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
            }
            // Plugin Folder URL.
            if ( ! defined( 'WPGRAPHQL_JWT_AUTHENTICATION_PLUGIN_URL' ) ) {
                define( 'WPGRAPHQL_JWT_AUTHENTICATION_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
            }
            // Plugin Root File.
            if ( ! defined( 'WPGRAPHQL_JWT_AUTHENTICATION_PLUGIN_FILE' ) ) {
                define( 'WPGRAPHQL_JWT_AUTHENTICATION_PLUGIN_FILE', __FILE__ );
            }
            // Whether to autoload the files or not
            if ( ! defined( 'WPGRAPHQL_JWT_AUTHENTICATION_AUTOLOAD' ) ) {
                define( 'WPGRAPHQL_JWT_AUTHENTICATION_AUTOLOAD', true );
            }
        }
        /**
         * Include required files.
         * Uses composer's autoload
         *
         * @access private
         * @since  0.0.1
         * @return void
         */
        private function includes() {
            // Autoload Required Classes
            if ( defined( 'WPGRAPHQL_JWT_AUTHENTICATION_AUTOLOAD' ) && true == WPGRAPHQL_JWT_AUTHENTICATION_AUTOLOAD ) {
                require_once( WPGRAPHQL_JWT_AUTHENTICATION_PLUGIN_DIR . 'vendor/autoload.php' );
            }
        }
        /**
         * Initialize the plugin
         */
        private static function init() {
            /**
             * Initialize the GraphQL fields for managing tokens
             */
            ManageTokens::init();
            /**
             * Filter the rootMutation fields
             */
            add_filter( 'graphql_rootMutation_fields', [
                '\WPGraphQL\JWT_Authentication\Login',
                'root_mutation_fields'
            ], 10, 1 );
            add_filter( 'graphql_rootMutation_fields', [
                '\WPGraphQL\JWT_Authentication\RefreshToken',
                'root_mutation_fields'
            ], 10, 1 );
            /**
             * Filter how WordPress determines the current user
             */
            add_filter( 'determine_current_user', [
                '\WPGraphQL\JWT_Authentication\Auth',
                'filter_determine_current_user'
            ], 10 );
        }
    }
endif;
function init() {
    return JWT_Authentication::instance();
}
add_action( 'graphql_init', '\WPGraphQL\JWT_Authentication\init' );