class_docstr: Duo base app integration. This is subclassed for the auth and admin APIs
class_docstr_tok: ["Duo","base","app","integration",".","This","is","subclassed","for","the","auth","and","admin","APIs"]
code: def _required_auth_info(cls):
      return {
          "api_hostname": {
              "description": (
                  "the API URL for your duosecurity instance. This should "
                  "be in a format similar to 'api-abcdef12.duosecurity.com'"
              ),
              "format": re.compile(
                  r"^api-[a-f0-9]{8}\.duosecurity\.com$"
              ),
          },
          "integration_key": {
              "description": (
                  "the integration key for your duosecurity Admin API. This "
                  "should be in a format similar to 'DIABCDEFGHIJKLMN1234'"
              ),
              "format": re.compile(r"^DI[A-Z0-9]{18}$"),
          },
          "secret_key": {
              "description": (
                  "the secret key for your duosecurity Admin API. This "
                  "should be a string of 40 alphanumeric characters"
              ),
              "format": re.compile(r"^[a-zA-Z0-9]{40}$"),
          },
      }
  
imports: from base64 import b64encode
  from datetime import datetime
  import hashlib
  import hmac
  import re
  import urllib.request
  import urllib.parse
  import urllib.error
  import requests
  from .None import AppIntegration, StreamAlertApp, get_logger
label_desc: Use image node_id 6 for calling the DuoApp obj's underlying member method code with example usage: obj._required_auth_info(cls) and returns: dict