class_docstr: Implementation of ZAP authentication for zmq connections.
  
  Note:
  
  - libzmq provides four levels of security: default NULL (which the Authenticator does
    not see), and authenticated NULL, PLAIN, CURVE, and GSSAPI, which the Authenticator can see.
  - until you add policies, all incoming NULL connections are allowed.
    (classic ZeroMQ behavior), and all PLAIN and CURVE connections are denied.
  - GSSAPI requires no configuration.
docstr: Send a ZAP reply to finish the authentication.
docstr_tok: ["Send","a","ZAP","reply","to","finish","the","authentication","."]
code: def _send_zap_reply(
      self, request_id, status_code, status_text, user_id="anonymous"
  ):
      """Send a ZAP reply to finish the authentication."""
      user_id = user_id if status_code == b"200" else b""
      if isinstance(user_id, unicode):
          user_id = user_id.encode(self.encoding, "replace")
      metadata = b""  # not currently used
      self.log.debug(
          "ZAP reply code=%s text=%s", status_code, status_text
      )
      reply = [
          VERSION,
          request_id,
          status_code,
          status_text,
          user_id,
          metadata,
      ]
      self.zap_socket.send_multipart(reply)
  
imports: import logging
  import zmq
  from zmq.utils import z85
  from zmq.utils.strtypes import bytes, unicode, b, u
  from zmq.error import _check_version
  from .certs import load_certificates
label_desc: Use image node_id 15 for calling the Authenticator obj's underlying member method code with example usage: obj._send_zap_reply(request_id, status_code, status_text, user_id) without return types