module Lumberg
  module Cpanel
    # Public: This module provides access to cPanel's password scoring system.
    class PasswordStrength < Base
      def self.api_module; "PasswdStrength"; end

      # Public: Retrieve the strength of a specified password. This API call
      #         is only available in cPanel & WHM 11.32.
      #
      # options - Hash options for API call params (default: {})
      #   :password - String password to test strength
      #
      # Examples
      #   api_args = { host: "x.x.x.x", hash: "pass", api_username: "user" }
      #   passwd_strength = Lumberg::Cpanel::PasswordStrength.new(api_args.dup)
      #
      #   passwd_strength.strength(password: "weakpass")
      #
      # Returns Hash API response.
      def strength(options = {})
        perform_request(options.merge(api_function: 'get_password_strength'))
      end

      # Public: Return the required password strength for a specific
      #         application.
      #
      # options - Hash options for API call params (default: {})
      #   :app - String The application corresponding to the password strength
      #          you would like to retrieve. Accepted values include 'htaccess',
      #          'passwd', 'ftp', 'createacct', 'bandmin', 'cpaddons', 'pop',
      #          'sshkey', 'postgres', 'webdisk', and 'mysql'.
      #
      # Examples
      #   api_args = { host: "x.x.x.x", hash: "pass", api_username: "user" }
      #   password_strength = Lumberg::Cpanel::PasswordStrength.new(api_args.dup)
      #
      #   password_strength.required_strength(app: 'htaccess')
      #
      # Returns Hash API response.
      def required_strength(options = {})
        perform_request(options.merge(api_function: 'get_required_strength'))
      end

      # Public: Return password strength settings set in WHM's 'Main >>
      #         Security Center >> Password Strength Configuration' section.
      #         If this requirement is in place, this function will return
      #         all password strength requirements on a per-application basis.
      #
      # options - Hash options for API call params (default: {})
      #
      # Examples
      #   api_args = { host: "x.x.x.x", hash: "pass", api_username: "user" }
      #   password_strength = Lumberg::Cpanel::PasswordStrength.new(api_args.dup)
      #
      #   password_strength.all_required_strengths
      #
      # Returns Hash API response.
      def all_required_strengths(options = {})
        perform_request(options.merge(api_function: 'appstrengths'))
      end
    end
  end
end
