=begin
#Docusign eSignature REST API

#The Docusign eSignature REST API provides you with a powerful, convenient, and simple Web services API for interacting with Docusign.

OpenAPI spec version: v2.1
Contact: devcenter@docusign.com
Generated by: https://github.com/swagger-api/swagger-codegen.git

=end

require "uri"

module DocuSign_eSign

  class LoginOptions
    # When set to **true**, shows the account API password in the response.
    attr_accessor :api_password

    # 
    attr_accessor :embed_account_id_guid

    # When set to **true**, shows the account ID GUID in the response.
    attr_accessor :include_account_id_guid

    # Determines whether login settings are returned in the response.  Valid Values:  * all -  All the login settings are returned.  * none - no login settings are returned.
    attr_accessor :login_settings

    def self.default
      @@default ||= LoginOptions.new
    end
  end


  class AuthenticationApi
    attr_accessor :api_client

    def initialize(api_client = AuthenticationApi.default)
      @api_client = api_client
    end

    # Deletes user's social account.
    # Deletes a social account from a use's account.
    # @param account_id The external account number (int) or account ID Guid.
    # @param user_id The user ID of the user being accessed. Generally this is the user ID of the authenticated user, but if the authenticated user is an Admin on the account, this may be another user the Admin user is accessing.
    # @param social_account_information  (optional parameter)
    # @return [nil]
    def delete_social_login(account_id, user_id, social_account_information)
      delete_social_login_with_http_info(account_id, user_id,  social_account_information)
      return nil
    end

    # Deletes user&#39;s social account.
    # Deletes a social account from a use&#39;s account.
    # @param account_id The external account number (int) or account ID Guid.
    # @param user_id The user ID of the user being accessed. Generally this is the user ID of the authenticated user, but if the authenticated user is an Admin on the account, this may be another user the Admin user is accessing.
    # @param social_account_information  (optional parameter)
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_social_login_with_http_info(account_id, user_id, social_account_information)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthenticationApi.delete_social_login ..."
      end
      # verify the required parameter 'account_id' is set
      fail ArgumentError, "Missing the required parameter 'account_id' when calling AuthenticationApi.delete_social_login" if account_id.nil?
      # verify the required parameter 'user_id' is set
      fail ArgumentError, "Missing the required parameter 'user_id' when calling AuthenticationApi.delete_social_login" if user_id.nil?
      # resource path
      local_var_path = "/v2.1/accounts/{accountId}/users/{userId}/social".sub('{format}','json').sub('{' + 'accountId' + '}', account_id.to_s).sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(social_account_information)
      auth_names = []
      data, status_code, headers = @api_client.call_api(:DELETE, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthenticationApi#delete_social_login\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Creates an authorization token.
    # Creates an OAuth2 authorization server token endpoint.
    # @return [OauthAccess]
    def get_o_auth_token()
      data, _status_code, _headers = get_o_auth_token_with_http_info()
      return data
    end

    # Creates an authorization token.
    # Creates an OAuth2 authorization server token endpoint.
    # @return [Array<(OauthAccess, Fixnum, Hash)>] OauthAccess data, response status code and response headers
    def get_o_auth_token_with_http_info()
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthenticationApi.get_o_auth_token ..."
      end
      # resource path
      local_var_path = "/v2.1/oauth2/token".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      data, status_code, headers = @api_client.call_api(:POST, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'OauthAccess')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthenticationApi#get_o_auth_token\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Gets a list of a user's social accounts.
    # Retrieves a list of social accounts linked to a user's account.
    # @param account_id The external account number (int) or account ID Guid.
    # @param user_id The user ID of the user being accessed. Generally this is the user ID of the authenticated user, but if the authenticated user is an Admin on the account, this may be another user the Admin user is accessing.
    # @return [UserSocialIdResult]
    def list_social_logins(account_id, user_id)
      data, _status_code, _headers = list_social_logins_with_http_info(account_id, user_id)
      return data
    end

    # Gets a list of a user&#39;s social accounts.
    # Retrieves a list of social accounts linked to a user&#39;s account.
    # @param account_id The external account number (int) or account ID Guid.
    # @param user_id The user ID of the user being accessed. Generally this is the user ID of the authenticated user, but if the authenticated user is an Admin on the account, this may be another user the Admin user is accessing.
    # @return [Array<(UserSocialIdResult, Fixnum, Hash)>] UserSocialIdResult data, response status code and response headers
    def list_social_logins_with_http_info(account_id, user_id)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthenticationApi.list_social_logins ..."
      end
      # verify the required parameter 'account_id' is set
      fail ArgumentError, "Missing the required parameter 'account_id' when calling AuthenticationApi.list_social_logins" if account_id.nil?
      # verify the required parameter 'user_id' is set
      fail ArgumentError, "Missing the required parameter 'user_id' when calling AuthenticationApi.list_social_logins" if user_id.nil?
      # resource path
      local_var_path = "/v2.1/accounts/{accountId}/users/{userId}/social".sub('{format}','json').sub('{' + 'accountId' + '}', account_id.to_s).sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'UserSocialIdResult')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthenticationApi#list_social_logins\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Gets login information for a specified user.
    # Retrieves login information for a specified user. Each account that is associated with the login credentials is listed. You can use the returned information to determine whether a user is authenticated and select an account to use in future operations.    The `baseUrl` property, returned in the response, is used in all future API calls as the base of the request URL. The `baseUrl` property contains the DocuSign server, the API version, and the `accountId` property that is used for the login. This request uses your DocuSign credentials to retrieve the account information.
    # @param DocuSign_eSign::LoginOptions Options for modifying the behavior of the function.
    # @return [LoginInformation]
    def login(options = DocuSign_eSign::LoginOptions.default)
      data, _status_code, _headers = login_with_http_info(options)
      return data
    end

    # Gets login information for a specified user.
    # Retrieves login information for a specified user. Each account that is associated with the login credentials is listed. You can use the returned information to determine whether a user is authenticated and select an account to use in future operations.    The &#x60;baseUrl&#x60; property, returned in the response, is used in all future API calls as the base of the request URL. The &#x60;baseUrl&#x60; property contains the DocuSign server, the API version, and the &#x60;accountId&#x60; property that is used for the login. This request uses your DocuSign credentials to retrieve the account information.
    # @param DocuSign_eSign::LoginOptions Options for modifying the behavior of the function.
    # @return [Array<(LoginInformation, Fixnum, Hash)>] LoginInformation data, response status code and response headers
    def login_with_http_info(options = DocuSign_eSign::LoginOptions.default)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthenticationApi.login ..."
      end
      # resource path
      local_var_path = "/v2.1/login_information".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'api_password'] = options.api_password if !options.api_password.nil?
      query_params[:'embed_account_id_guid'] = options.embed_account_id_guid if !options.embed_account_id_guid.nil?
      query_params[:'include_account_id_guid'] = options.include_account_id_guid if !options.include_account_id_guid.nil?
      query_params[:'login_settings'] = options.login_settings if !options.login_settings.nil?

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'LoginInformation')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthenticationApi#login\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Revokes an authorization token.
    # Revokes an OAuth2 authorization server token. After the revocation is complete, a caller must re-authenticate to restore access.
    # @return [nil]
    def revoke_o_auth_token()
      revoke_o_auth_token_with_http_info()
      return nil
    end

    # Revokes an authorization token.
    # Revokes an OAuth2 authorization server token. After the revocation is complete, a caller must re-authenticate to restore access.
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def revoke_o_auth_token_with_http_info()
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthenticationApi.revoke_o_auth_token ..."
      end
      # resource path
      local_var_path = "/v2.1/oauth2/revoke".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      data, status_code, headers = @api_client.call_api(:POST, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthenticationApi#revoke_o_auth_token\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Updates the password for a specified user.
    # Updates the password for a specified user.
    # @param login_part Currently, only the value **password** is supported.
    # @param user_password_information  (optional parameter)
    # @return [nil]
    def update_password(login_part, user_password_information)
      update_password_with_http_info(login_part,  user_password_information)
      return nil
    end

    # Updates the password for a specified user.
    # Updates the password for a specified user.
    # @param login_part Currently, only the value **password** is supported.
    # @param user_password_information  (optional parameter)
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def update_password_with_http_info(login_part, user_password_information)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthenticationApi.update_password ..."
      end
      # verify the required parameter 'login_part' is set
      fail ArgumentError, "Missing the required parameter 'login_part' when calling AuthenticationApi.update_password" if login_part.nil?
      # resource path
      local_var_path = "/v2.1/login_information/{loginPart}".sub('{format}','json').sub('{' + 'loginPart' + '}', login_part.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(user_password_information)
      auth_names = []
      data, status_code, headers = @api_client.call_api(:PUT, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthenticationApi#update_password\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Adds social account for a user.
    # Adds a new social account to a user's account.
    # @param account_id The external account number (int) or account ID Guid.
    # @param user_id The user ID of the user being accessed. Generally this is the user ID of the authenticated user, but if the authenticated user is an Admin on the account, this may be another user the Admin user is accessing.
    # @param social_account_information  (optional parameter)
    # @return [nil]
    def update_social_login(account_id, user_id, social_account_information)
      update_social_login_with_http_info(account_id, user_id,  social_account_information)
      return nil
    end

    # Adds social account for a user.
    # Adds a new social account to a user&#39;s account.
    # @param account_id The external account number (int) or account ID Guid.
    # @param user_id The user ID of the user being accessed. Generally this is the user ID of the authenticated user, but if the authenticated user is an Admin on the account, this may be another user the Admin user is accessing.
    # @param social_account_information  (optional parameter)
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def update_social_login_with_http_info(account_id, user_id, social_account_information)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthenticationApi.update_social_login ..."
      end
      # verify the required parameter 'account_id' is set
      fail ArgumentError, "Missing the required parameter 'account_id' when calling AuthenticationApi.update_social_login" if account_id.nil?
      # verify the required parameter 'user_id' is set
      fail ArgumentError, "Missing the required parameter 'user_id' when calling AuthenticationApi.update_social_login" if user_id.nil?
      # resource path
      local_var_path = "/v2.1/accounts/{accountId}/users/{userId}/social".sub('{format}','json').sub('{' + 'accountId' + '}', account_id.to_s).sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(social_account_information)
      auth_names = []
      data, status_code, headers = @api_client.call_api(:PUT, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthenticationApi#update_social_login\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end