set_twofas_encryption_key( base64_encode( $key->getValue() ) ); } public function save_aes_key() { $this->store( new AESGeneratedKey() ); } /** * @return Key */ public function retrieve() { $key = base64_decode( $this->get_twofas_encryption_key() ); return new AESKey( $key ); } /** * @return bool */ public function is_plugin_enabled() { $status = get_option( self::TWOFAS_PLUGIN_STATUS ); return '1' === $status; } public function enable_plugin() { update_option( self::TWOFAS_PLUGIN_STATUS, '1' ); } public function disable_plugin() { update_option( self::TWOFAS_PLUGIN_STATUS, '0' ); } /** * @param string $plan */ public function set_plan( $plan ) { update_option( self::TWOFAS_PLAN_KEY, $plan ); } public function set_premium_plan() { $this->set_plan( self::PLAN_PREMIUM ); } public function set_basic_plan() { $this->set_plan( self::PLAN_BASIC ); } /** * @return bool */ public function is_plan_premium() { $plan = get_option( self::TWOFAS_PLAN_KEY ); return self::PLAN_PREMIUM === $plan; } /** * @return bool */ public function is_plan_basic() { return ! $this->is_plan_premium(); } public function enable_trusted_devices() { update_option( self::TWOFAS_TRUSTED_DEVICES_ENABLED, '1' ); } public function disable_trusted_devices() { update_option( self::TWOFAS_TRUSTED_DEVICES_ENABLED, '0' ); } public function add_privacy_policy() { update_option( self::TWOFAS_PRIVACY_POLICY_ACCEPTED, '0' ); } public function accept_privacy_policy() { update_option( self::TWOFAS_PRIVACY_POLICY_ACCEPTED, '1' ); } public function add_user_migration_status() { update_option( self::TWOFAS_USER_MIGRATION_ALLOWED, '0' ); } public function is_user_migration_allowed() { return (bool) get_option( self::TWOFAS_USER_MIGRATION_ALLOWED, false ); } public function allow_user_migration() { update_option( self::TWOFAS_USER_MIGRATION_ALLOWED, '1' ); } public function get_plugins() { return get_option( 'active_plugins', [] ); } /** * @return bool */ public function are_trusted_devices_enabled() { return (bool) get_option( self::TWOFAS_TRUSTED_DEVICES_ENABLED, false ); } /** * @return array * * @throws UnexpectedValueException */ public function get_twofas_roles() { $roles = get_option( self::TWOFAS_ROLES, [] ); if ( is_array( $roles ) ) { return $roles; } throw new UnexpectedValueException( 'Option ' . self::TWOFAS_ROLES . ' should be an array.' ); } /** * @param array $roles */ public function set_twofas_roles( array $roles ) { update_option( self::TWOFAS_ROLES, $roles ); } /** * @param array $user_roles * * @return bool * * @throws UnexpectedValueException */ public function has_twofas_role( array $user_roles ) { $roles = $this->get_twofas_roles(); $intersection = array_intersect( $user_roles, $roles ); return ! empty( $intersection ); } public function enable_logging() { update_option( self::TWOFAS_LOGGING_ALLOWED, '1' ); } public function disable_logging() { update_option( self::TWOFAS_LOGGING_ALLOWED, '0' ); } /** * @return bool */ public function is_logging_allowed() { return (bool) get_option( self::TWOFAS_LOGGING_ALLOWED, false ); } public function delete_wp_options() { foreach ( $this->wp_options as $option_name ) { delete_option( $option_name ); } } /** * @param string $except */ public function delete_wp_options_except( $except ) { foreach ( $this->wp_options as $option_name ) { if ( $option_name !== $except ) { delete_option( $option_name ); } } } }