Initial commit
diff --git a/includes/admin/class-wc-rest-stripe-connection-tokens-controller.php b/includes/admin/class-wc-rest-stripe-connection-tokens-controller.php
new file mode 100644
index 0000000..b60e12c
--- /dev/null
+++ b/includes/admin/class-wc-rest-stripe-connection-tokens-controller.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Class WC_REST_Stripe_Connection_Tokens_Controller
+ */
+
+defined( 'ABSPATH' ) || exit;
+
+/**
+ * REST controller for connection tokens.
+ */
+class WC_REST_Stripe_Connection_Tokens_Controller extends WC_Stripe_REST_Base_Controller {
+
+ /**
+ * Endpoint path.
+ *
+ * @var string
+ */
+ protected $rest_base = 'wc_stripe/connection_tokens';
+
+ /**
+ * Stripe payment gateway.
+ *
+ * @var WC_Gateway_Stripe
+ */
+ private $gateway;
+
+ /**
+ * Constructor.
+ *
+ * @param WC_Gateway_Stripe $gateway Stripe payment gateway.
+ */
+ public function __construct( WC_Gateway_Stripe $gateway ) {
+ $this->gateway = $gateway;
+ }
+
+ /**
+ * Configure REST API routes.
+ */
+ public function register_routes() {
+ register_rest_route(
+ $this->namespace,
+ '/' . $this->rest_base,
+ [
+ 'methods' => WP_REST_Server::CREATABLE,
+ 'callback' => [ $this, 'create_token' ],
+ 'permission_callback' => [ $this, 'check_permission' ],
+ ]
+ );
+ }
+
+ /**
+ * Create a connection token via API.
+ *
+ * @param WP_REST_Request $request Full data about the request.
+ */
+ public function create_token( $request ) {
+ $response = WC_Stripe_API::request( [], 'terminal/connection_tokens' );
+
+ if ( ! isset( $response->secret ) ) {
+ return rest_ensure_response( new WP_Error( 'wc_stripe_no_token', __( 'Stripe API did not return a connection token.', 'woocommerce-gateway-stripe' ) ) );
+ }
+
+ $response->test_mode = $this->gateway->is_in_test_mode();
+ return rest_ensure_response( $response );
+ }
+}