first commit
This commit is contained in:
213
wp-content/plugins/brizy/admin/cloud/api.php
Normal file
213
wp-content/plugins/brizy/admin/cloud/api.php
Normal file
@@ -0,0 +1,213 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: alex
|
||||
* Date: 7/18/18
|
||||
* Time: 10:48 AM
|
||||
*/
|
||||
|
||||
|
||||
class Brizy_Admin_Cloud_Api extends Brizy_Admin_AbstractApi {
|
||||
|
||||
use Brizy_Admin_Cloud_SyncAware;
|
||||
|
||||
const nonce = 'brizy-api';
|
||||
|
||||
const AJAX_SIGNIN_ACTION = '-cloud-signin';
|
||||
const AJAX_SIGNUP_ACTION = '-cloud-signup';
|
||||
const AJAX_SIGNOUT_ACTION = '-cloud-signout';
|
||||
const AJAX_RESET_PASSWORD_ACTION = '-cloud-resetpassword';
|
||||
const AJAX_TRIGGER_SYNC_ACTION = '-cloud-sync';
|
||||
const AJAX_SYNC_ALLOWED = '-cloud-sync-allowed';
|
||||
|
||||
/**
|
||||
* @var Brizy_Editor_Project
|
||||
*/
|
||||
private $project;
|
||||
|
||||
/**
|
||||
* @var Brizy_Admin_Cloud_Client
|
||||
*/
|
||||
private $cloudClient;
|
||||
|
||||
/**
|
||||
* Brizy_Admin_Cloud_Api constructor.
|
||||
*
|
||||
* @param Brizy_Editor_Project $project
|
||||
*/
|
||||
public function __construct( $project ) {
|
||||
|
||||
$this->project = $project;
|
||||
$this->setClient( Brizy_Admin_Cloud_Client::instance( $project, new WP_Http() ) );
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Brizy_Editor_Project $project
|
||||
*
|
||||
* @return Brizy_Admin_Cloud_Api
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function _init( $project ) {
|
||||
static $instance;
|
||||
|
||||
if ( ! $instance ) {
|
||||
$instance = new self( $project );
|
||||
}
|
||||
|
||||
return $instance;
|
||||
}
|
||||
|
||||
|
||||
protected function initializeApiActions() {
|
||||
$pref = 'wp_ajax_' . Brizy_Editor::prefix();
|
||||
add_action( $pref . self::AJAX_SIGNIN_ACTION, array( $this, 'actionSignIn' ) );
|
||||
add_action( $pref . self::AJAX_SIGNUP_ACTION, array( $this, 'actionSignUp' ) );
|
||||
add_action( $pref . self::AJAX_SIGNOUT_ACTION, array( $this, 'actionSignOut' ) );
|
||||
add_action( $pref . self::AJAX_RESET_PASSWORD_ACTION, array( $this, 'actionResetPassword' ) );
|
||||
add_action( $pref . self::AJAX_TRIGGER_SYNC_ACTION, array( $this, 'actionSync' ) );
|
||||
add_action( $pref . self::AJAX_SYNC_ALLOWED, array( $this, 'actionSyncAllowed' ) );
|
||||
}
|
||||
|
||||
public function actionSignIn() {
|
||||
|
||||
$this->verifyNonce( self::nonce );
|
||||
|
||||
$data = file_get_contents( "php://input" );
|
||||
|
||||
if ( ( $data = json_decode( $data ) ) === false ) {
|
||||
$this->error( 400, 'Bad request' );
|
||||
}
|
||||
|
||||
if ( $token = $this->getClient()->signIn( $data->email, $data->password ) ) {
|
||||
|
||||
// this is important when you delete block from cloud the local blocks
|
||||
// will be deleted based on this valued
|
||||
$this->project->setCloudAccountId( $token );
|
||||
$this->project->setCloudToken( $token );
|
||||
|
||||
$containers = $this->getClient()->getContainers();
|
||||
|
||||
if ( isset( $containers[0] ) ) {
|
||||
$this->project->setCloudContainer( $containers[0]->id );
|
||||
} else {
|
||||
$this->error( 400, 'SingIn failed. Invalid container.' );
|
||||
}
|
||||
|
||||
$this->project->saveStorage();
|
||||
|
||||
$this->success( [] );
|
||||
} else {
|
||||
$this->error( 400, 'SingIn failed' );
|
||||
}
|
||||
}
|
||||
|
||||
public function actionSignUp() {
|
||||
|
||||
$this->verifyNonce( self::nonce );
|
||||
|
||||
$data = file_get_contents( "php://input" );
|
||||
|
||||
if ( ( $data = json_decode( $data ) ) === false ) {
|
||||
$this->error( 400, 'Bad request' );
|
||||
}
|
||||
|
||||
if ( $token = $this->getClient()->signUp( $data->firstName, $data->lastName, $data->email, $data->password, $data->confirmPassword ) ) {
|
||||
|
||||
// this is important when you delete block from cloud the local blocks
|
||||
// will be deleted based on this valued
|
||||
$this->project->setCloudAccountId( $token );
|
||||
$this->project->setCloudToken( $token );
|
||||
|
||||
$containers = $this->getClient()->getContainers();
|
||||
|
||||
if ( isset( $containers[0] ) ) {
|
||||
$this->project->setCloudContainer( $containers[0]->id );
|
||||
} else {
|
||||
$this->error( 400, 'Unable to obtain the container.' );
|
||||
}
|
||||
|
||||
$this->project->saveStorage();
|
||||
$this->success( [] );
|
||||
} else {
|
||||
$this->error( 400, 'Sing Up failed' );
|
||||
}
|
||||
}
|
||||
|
||||
public function actionSignOut() {
|
||||
|
||||
$this->verifyNonce( self::nonce );
|
||||
|
||||
// clear version in case something gets wonrg.
|
||||
Brizy_Admin_Cloud_Client::clearVersionCache();
|
||||
|
||||
// this is important when you delete block from cloud the local blocks
|
||||
// will be deleted based on this valued
|
||||
$this->project->setCloudAccountId( null );
|
||||
$this->project->setCloudToken( null );
|
||||
$this->project->saveStorage();
|
||||
|
||||
wp_clear_scheduled_hook( Brizy_Admin_Cloud_Cron::BRIZY_CLOUD_CRON_KEY );
|
||||
|
||||
$this->success( [] );
|
||||
}
|
||||
|
||||
public function actionResetPassword() {
|
||||
|
||||
$this->verifyNonce( self::nonce );
|
||||
|
||||
$data = file_get_contents( "php://input" );
|
||||
|
||||
if ( ( $data = json_decode( $data ) ) === false ) {
|
||||
$this->error( 400, 'Bad request' );
|
||||
}
|
||||
|
||||
if ( ! $data->email ) {
|
||||
$this->error( 400, 'Invalid email' );
|
||||
}
|
||||
|
||||
if ( $token = $this->getClient()->resetPassword( $data->email ) ) {
|
||||
$this->success( [] );
|
||||
} else {
|
||||
$this->error( 400, 'Reset password failed' );
|
||||
}
|
||||
}
|
||||
|
||||
public function actionSync() {
|
||||
try {
|
||||
|
||||
if ( ! $this->project->getCloudToken() ) {
|
||||
$this->error( 400, 'Unauthorized' );
|
||||
}
|
||||
|
||||
$merged = array_merge( $this->syncLayouts(0, true ), $this->syncBlocks(0, true ) );
|
||||
|
||||
return $this->success( [ 'synchronized' => count( $merged ) ] );
|
||||
} catch ( Exception $e ) {
|
||||
Brizy_Logger::instance()->critical( 'Sync failed', [ $e ] );
|
||||
$this->error( 500, 'Sync failed' );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function actionSyncAllowed() {
|
||||
|
||||
try {
|
||||
$versions = $this->getClient()->getCloudEditorVersions();
|
||||
$response = [];
|
||||
$response['isSyncAllowed'] = $versions['sync'] == BRIZY_SYNC_VERSION;
|
||||
|
||||
return $this->success( $response );
|
||||
} catch ( Exception $e ) {
|
||||
Brizy_Logger::instance()->critical( 'Sync failed', [ $e ] );
|
||||
$this->error( 400, 'Sync unauthorized.' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null
|
||||
*/
|
||||
protected function getRequestNonce() {
|
||||
return $this->param( 'hash' );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user