summaryrefslogtreecommitdiff
path: root/daggerhart-openid-connect-generic/includes/openid-connect-generic-option-settings.php
diff options
context:
space:
mode:
Diffstat (limited to 'daggerhart-openid-connect-generic/includes/openid-connect-generic-option-settings.php')
-rw-r--r--[-rwxr-xr-x]daggerhart-openid-connect-generic/includes/openid-connect-generic-option-settings.php179
1 files changed, 163 insertions, 16 deletions
diff --git a/daggerhart-openid-connect-generic/includes/openid-connect-generic-option-settings.php b/daggerhart-openid-connect-generic/includes/openid-connect-generic-option-settings.php
index 7b9b9a0..7b6ec2a 100755..100644
--- a/daggerhart-openid-connect-generic/includes/openid-connect-generic-option-settings.php
+++ b/daggerhart-openid-connect-generic/includes/openid-connect-generic-option-settings.php
@@ -1,60 +1,207 @@
<?php
/**
- * Class OpenId_Connect_Generic_Option_Settings
+ * WordPress options handling class.
+ *
+ * @package OpenID_Connect_Generic
+ * @category Settings
+ * @author Jonathan Daggerhart <jonathan@daggerhart.com>
+ * @copyright 2015-2020 daggerhart
+ * @license http://www.gnu.org/licenses/gpl-2.0.txt GPL-2.0+
+ */
+
+/**
+ * OpenId_Connect_Generic_Option_Settings class.
+ *
+ * WordPress options handling.
+ *
+ * @package OpenID_Connect_Generic
+ * @category Settings
+ *
+ * Legacy Settings:
+ *
+ * @property string $ep_login The login endpoint.
+ * @property string $ep_token The token endpoint.
+ * @property string $ep_userinfo The userinfo endpoint.
+ *
+ * OAuth Client Settings:
+ *
+ * @property string $login_type How the client (login form) should provide login options.
+ * @property string $client_id The ID the client will be recognized as when connecting the to Identity provider server.
+ * @property string $client_secret The secret key the IDP server expects from the client.
+ * @property string $scope The list of scopes this client should access.
+ * @property string $endpoint_login The IDP authorization endpoint URL.
+ * @property string $endpoint_userinfo The IDP User information endpoint URL.
+ * @property string $endpoint_token The IDP token validation endpoint URL.
+ * @property string $endpoint_end_session The IDP logout endpoint URL.
+ *
+ * Non-standard Settings:
+ *
+ * @property bool $no_sslverify The flag to enable/disable SSL verification during authorization.
+ * @property int $http_request_timeout The timeout for requests made to the IDP. Default value is 5.
+ * @property string $identity_key The key in the user claim array to find the user's identification data.
+ * @property string $nickname_key The key in the user claim array to find the user's nickname.
+ * @property string $email_format The key(s) in the user claim array to formulate the user's email address.
+ * @property string $displayname_format The key(s) in the user claim array to formulate the user's display name.
+ * @property bool $identify_with_username The flag which indicates how the user's identity will be determined.
+ * @property int $state_time_limit The valid time limit of the state, in seconds. Defaults to 180 seconds.
+ *
+ * Plugin Settings:
+ *
+ * @property bool $enforce_privacy The flag to indicates whether a user us required to be authenticated to access the site.
+ * @property bool $alternate_redirect_uri The flag to indicate whether to use the alternative redirect URI.
+ * @property bool $token_refresh_enable The flag whether to support refresh tokens by IDPs.
+ * @property bool $link_existing_users The flag to indicate whether to link to existing WordPress-only accounts or greturn an error.
+ * @property bool $create_if_does_not_exist The flag to indicate whether to create new users or not.
+ * @property bool $redirect_user_back The flag to indicate whether to redirect the user back to the page on which they started.
+ * @property bool $redirect_on_logout The flag to indicate whether to redirect to the login screen on session expiration.
+ * @property bool $enable_logging The flag to enable/disable logging.
+ * @property int $log_limit The maximum number of log entries to keep.
*/
class OpenID_Connect_Generic_Option_Settings {
- // wp option name/key
+ /**
+ * WordPress option name/key.
+ *
+ * @var string
+ */
private $option_name;
- // stored option values array
+ /**
+ * Stored option values array.
+ *
+ * @var array<mixed>
+ */
private $values;
- // default plugin settings values
+ /**
+ * Default plugin settings values.
+ *
+ * @var array<mixed>
+ */
private $default_settings;
/**
- * @param $option_name
- * @param array $default_settings
- * @param bool|TRUE $granular_defaults
+ * List of settings that can be defined by environment variables.
+ *
+ * @var array<string,string>
*/
- function __construct( $option_name, $default_settings = array(), $granular_defaults = true ){
+ private $environment_settings = array(
+ 'client_id' => 'OIDC_CLIENT_ID',
+ 'client_secret' => 'OIDC_CLIENT_SECRET',
+ 'endpoint_login' => 'OIDC_ENDPOINT_LOGIN_URL',
+ 'endpoint_userinfo' => 'OIDC_ENDPOINT_USERINFO_URL',
+ 'endpoint_token' => 'OIDC_ENDPOINT_TOKEN_URL',
+ 'endpoint_end_session' => 'OIDC_ENDPOINT_LOGOUT_URL',
+ );
+
+ /**
+ * The class constructor.
+ *
+ * @param string $option_name The option name/key.
+ * @param array<mixed> $default_settings The default plugin settings values.
+ * @param bool $granular_defaults The granular defaults.
+ */
+ function __construct( $option_name, $default_settings = array(), $granular_defaults = true ) {
$this->option_name = $option_name;
$this->default_settings = $default_settings;
- $this->values = get_option( $this->option_name, $this->default_settings );
+ $this->values = array();
+
+ if ( ! empty( $this->option_name ) ) {
+ $this->values = (array) get_option( $this->option_name, $this->default_settings );
+ }
+
+ // For each defined environment variable/constant be sure the settings key is set.
+ foreach ( $this->environment_settings as $key => $constant ) {
+ if ( defined( $constant ) ) {
+ $this->__set( $key, constant( $constant ) );
+ }
+ }
if ( $granular_defaults ) {
$this->values = array_replace_recursive( $this->default_settings, $this->values );
}
}
- function __get( $key ){
+ /**
+ * Magic getter for settings.
+ *
+ * @param string $key The array key/option name.
+ *
+ * @return mixed
+ */
+ function __get( $key ) {
if ( isset( $this->values[ $key ] ) ) {
return $this->values[ $key ];
}
}
- function __set( $key, $value ){
+ /**
+ * Magic setter for settings.
+ *
+ * @param string $key The array key/option name.
+ * @param mixed $value The option value.
+ *
+ * @return void
+ */
+ function __set( $key, $value ) {
$this->values[ $key ] = $value;
}
- function __isset( $key ){
+ /**
+ * Magic method to check is an attribute isset.
+ *
+ * @param string $key The array key/option name.
+ *
+ * @return bool
+ */
+ function __isset( $key ) {
return isset( $this->values[ $key ] );
}
- function __unset( $key ){
- unset( $this->values[ $key ]);
+ /**
+ * Magic method to clear an attribute.
+ *
+ * @param string $key The array key/option name.
+ *
+ * @return void
+ */
+ function __unset( $key ) {
+ unset( $this->values[ $key ] );
}
- function get_values(){
+ /**
+ * Get the plugin settings array.
+ *
+ * @return array
+ */
+ function get_values() {
return $this->values;
}
+ /**
+ * Get the plugin WordPress options name.
+ *
+ * @return string
+ */
function get_option_name() {
return $this->option_name;
}
- function save(){
+ /**
+ * Save the plugin options to the WordPress options table.
+ *
+ * @return void
+ */
+ function save() {
+
+ // For each defined environment variable/constant be sure it isn't saved to the database.
+ foreach ( $this->environment_settings as $key => $constant ) {
+ if ( defined( $constant ) ) {
+ $this->__unset( $key );
+ }
+ }
+
update_option( $this->option_name, $this->values );
+
}
}