docs: def build_uri(secret, name, initial_count=None, issuer_name=None):
      """
      Returns the provisioning URI for the OTP; works for either TOTP or HOTP.
  
      This can then be encoded in a QR Code and used to provision the Google
      Authenticator app.
  
      For module-internal use.
  
      See also:
          http://code.google.com/p/google-authenticator/wiki/KeyUriFormat
  
      @param [String] the hotp/totp secret used to generate the URI
      @param [String] name of the account
      @param [Integer] initial_count starting counter value, defaults to None.
          If none, the OTP type will be assumed as TOTP.
      @param [String] the name of the OTP issuer; this will be the
          organization title of the OTP entry in Authenticator
      @return [String] provisioning uri
      """
      # initial_count may be 0 as a valid param
      is_initial_count_present = (initial_count is not None)
  
      otp_type = 'hotp' if is_initial_count_present else 'totp'
      base = 'otpauth://%s/' % otp_type
  
      if issuer_name:
          issuer_name = quote(issuer_name)
          base += '%s:' % issuer_name
  
      uri = '%(base)s%(name)s?secret=%(secret)s' % {
          'name': quote(name, safe='@'),
          'secret': secret,
          'base': base,
      }
  
      if is_initial_count_present:
          uri += '&counter=%s' % initial_count
  
      if issuer_name:
          uri += '&issuer=%s' % issuer_name
  
      return uri