LLMS_REST_API_Keys
LLMS_REST_API_Keys class.
Source Source
File: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php
class LLMS_REST_API_Keys extends LLMS_REST_Database_Resource { use LLMS_REST_Trait_Singleton; /** * Resource Name/ID key. * * EG: key. * * @var string */ protected $id = 'key'; /** * Resource Model classname. * * EG: LLMS_REST_API_Key. * * @var string */ protected $model = 'LLMS_REST_API_Key'; /** * Default column values (for creating). * * @var array */ protected $default_column_values = array( 'permissions' => 'read', ); /** * Array of read only column names. * * @var array */ protected $read_only_columns = array( 'id', 'consumer_key', 'consumer_secret', 'truncated_key', ); /** * Array of required columns (for creating). * * @var array */ protected $required_columns = array( 'description', 'user_id', 'permissions', ); /** * Create a new API Key * * @since 1.0.0-beta.1 * * @param array $data { * Associative array of data to set to a key's properties. * * @type string $description (Required) A friendly name for the key. * @type int $user_id WP_User (Required) ID of the key's owner. * @type string $permissions (Required) Permission string for the key. Accepts `read`, `write`, or `read_write`. * } * @return WP_Error|LLMS_REST_API_Key */ public function create( $data ) { $data = $this->create_prepare( $data ); if ( is_wp_error( $data ) ) { return $data; } $api_key = new LLMS_REST_API_Key(); $key = 'ck_' . llms_rest_random_hash(); $secret = 'cs_' . llms_rest_random_hash(); $data['consumer_key'] = llms_rest_api_hash( $key ); $data['consumer_secret'] = $secret; $data['truncated_key'] = substr( $key, -7 ); // Set and save. $api_key->setup( $data )->save(); // Return the unhashed key on creation to be displayed once and never stored. $api_key->set( 'consumer_key_one_time', $key ); return $api_key; } /** * Retrieve the base admin url for managing API keys. * * @since 1.0.0-beta.1 * * @return string */ public function get_admin_url() { return add_query_arg( array( 'page' => 'llms-settings', 'tab' => 'rest-api', 'section' => 'keys', ), admin_url( 'admin.php' ) ); } /** * Retrieve the translated resource name. * * @since 1.0.0-beta.1 * * @return string */ protected function get_i18n_name() { return __( 'API Key', 'lifterlms' ); } /** * Retrieve an array of options for API Key Permissions. * * @since 1.0.0-beta.1 * * @return array */ public function get_permissions() { return array( 'read' => __( 'Read', 'lifterlms' ), 'write' => __( 'Write', 'lifterlms' ), 'read_write' => __( 'Read / Write', 'lifterlms' ), ); } /** * Validate data supplied for creating/updating a key. * * @since 1.0.0-beta.1 * * @param array $data { * Associative array of data to set to a key's properties. * * @type string $description A friendly name for the key. * @type int $user_id WP_User ID of the key's owner. * @type string $permissions Permission string for the key. Accepts `read`, `write`, or `read_write`. * } * @return WP_Error|true When data is invalid will return a WP_Error with information about the invalid properties, * otherwise `true` denoting data is valid. */ protected function is_data_valid( $data ) { // First conditions prevents '', '0', 0, etc... & second prevents invalid / non existant user ids. if ( ( isset( $data['user_id'] ) && empty( $data['user_id'] ) ) || ( ! empty( $data['user_id'] ) && ! get_user_by( 'id', $data['user_id'] ) ) ) { // Translators: %s = Invalid user id. return new WP_Error( 'llms_rest_key_invalid_user_id', sprintf( __( '"%s" is not a valid user ID.', 'lifterlms' ), $data['user_id'] ) ); } // Prevent blank/empty descriptions. if ( isset( $data['description'] ) && empty( $data['description'] ) ) { return new WP_Error( 'llms_rest_key_invalid_description', __( 'An API Description is required.', 'lifterlms' ) ); } // Validate Permissions. if ( ! empty( $data['permissions'] ) && ! in_array( $data['permissions'], array_keys( $this->get_permissions() ), true ) ) { // Translators: %s = Invalid permission string. return new WP_Error( 'llms_rest_key_invalid_permissions', sprintf( __( '"%s" is not a valid permission.', 'lifterlms' ), $data['permissions'] ) ); } return true; } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- create — Create a new API Key
- get_admin_url — Retrieve the base admin url for managing API keys.
- get_i18n_name — Retrieve the translated resource name.
- get_permissions — Retrieve an array of options for API Key Permissions.
- is_data_valid — Validate data supplied for creating/updating a key.
Changelog Changelog
Version | Description |
---|---|
1.0.0-beta.1 | Introduced. |