Jetpack_Client_Server::authorize PHP Method

authorize() public method

public authorize ( $data = [] )
    function authorize($data = array())
    {
        $redirect = isset($data['redirect']) ? esc_url_raw((string) $data['redirect']) : '';
        $jetpack_unique_connection = Jetpack_Options::get_option('unique_connection');
        // Checking if site has been active/connected previously before recording unique connection
        if (!$jetpack_unique_connection) {
            // jetpack_unique_connection option has never been set
            $jetpack_unique_connection = array('connected' => 0, 'disconnected' => 0, 'version' => '3.6.1');
            update_option('jetpack_unique_connection', $jetpack_unique_connection);
            //track unique connection
            $jetpack = $this->get_jetpack();
            $jetpack->stat('connections', 'unique-connection');
            $jetpack->do_stats('server_side');
        }
        // increment number of times connected
        $jetpack_unique_connection['connected'] += 1;
        Jetpack_Options::update_option('unique_connection', $jetpack_unique_connection);
        $role = Jetpack::translate_current_user_to_role();
        if (!$role) {
            return new Jetpack_Error('no_role', 'Invalid request.', 400);
        }
        $cap = Jetpack::translate_role_to_cap($role);
        if (!$cap) {
            return new Jetpack_Error('no_cap', 'Invalid request.', 400);
        }
        if (!empty($data['error'])) {
            return new Jetpack_Error($data['error'], 'Error included in the request.', 400);
        }
        if (!isset($data['state'])) {
            return new Jetpack_Error('no_state', 'Request must include state.', 400);
        }
        if (!ctype_digit($data['state'])) {
            return new Jetpack_Error($data['error'], 'State must be an integer.', 400);
        }
        $current_user_id = get_current_user_id();
        if ($current_user_id != $data['state']) {
            return new Jetpack_Error('wrong_state', 'State does not match current user.', 400);
        }
        if (empty($data['code'])) {
            return new Jetpack_Error('no_code', 'Request must include an authorization code.', 400);
        }
        $token = $this->get_token($data);
        if (is_wp_error($token)) {
            $code = $token->get_error_code();
            if (empty($code)) {
                $code = 'invalid_token';
            }
            return new Jetpack_Error($code, $token->get_error_message(), 400);
        }
        if (!$token) {
            return new Jetpack_Error('no_token', 'Error generating token.', 400);
        }
        $is_master_user = !Jetpack::is_active();
        Jetpack::update_user_token($current_user_id, sprintf('%s.%d', $token, $current_user_id), $is_master_user);
        if (!$is_master_user) {
            Jetpack::state('message', 'linked');
            // Don't activate anything since we are just connecting a user.
            return 'linked';
        }
        $redirect_on_activation_error = 'client' === $data['auth_type'] ? true : false;
        if ($active_modules = Jetpack_Options::get_option('active_modules')) {
            Jetpack::delete_active_modules();
            Jetpack::activate_default_modules(999, 1, $active_modules, $redirect_on_activation_error);
        } else {
            Jetpack::activate_default_modules(false, false, array(), $redirect_on_activation_error);
        }
        // Since this is a fresh connection, be sure to clear out IDC options
        Jetpack_IDC::clear_all_idc_options();
        // Start nonce cleaner
        wp_clear_scheduled_hook('jetpack_clean_nonces');
        wp_schedule_event(time(), 'hourly', 'jetpack_clean_nonces');
        Jetpack::state('message', 'authorized');
        return 'authorized';
    }

Usage Example

 function remote_authorize($request)
 {
     foreach (array('secret', 'state', 'redirect_uri', 'code') as $required) {
         if (!isset($request[$required]) || empty($request[$required])) {
             return $this->error(new Jetpack_Error('missing_parameter', 'One or more parameters is missing from the request.', 400));
         }
     }
     if (!get_user_by('id', $request['state'])) {
         return $this->error(new Jetpack_Error('user_unknown', 'User not found.', 404));
     }
     if (Jetpack::is_active() && Jetpack::is_user_connected($request['state'])) {
         return $this->error(new Jetpack_Error('already_connected', 'User already connected.', 400));
     }
     $verified = $this->verify_action(array('authorize', $request['secret'], $request['state']));
     if (is_a($verified, 'IXR_Error')) {
         return $verified;
     }
     wp_set_current_user($request['state']);
     $client_server = new Jetpack_Client_Server();
     $result = $client_server->authorize($request);
     if (is_wp_error($result)) {
         return $this->error($result);
     }
     return $result;
 }
All Usage Examples Of Jetpack_Client_Server::authorize