code: @JsonProperty("qrCode")
      public String getQRCode() throws GuacamoleException {
  
          // Do not generate a QR code if no key is being exposed
          URI keyURI = getKeyURI();
          if (keyURI == null)
              return null;
  
          ByteArrayOutputStream stream = new ByteArrayOutputStream();
  
          try {
  
              // Create QR code writer
              QRCodeWriter writer = new QRCodeWriter();
              BitMatrix matrix = writer.encode(keyURI.toString(),
                      BarcodeFormat.QR_CODE, QR_CODE_WIDTH, QR_CODE_HEIGHT);
  
              // Produce PNG image of TOTP key text
              MatrixToImageWriter.writeToStream(matrix, "PNG", stream);
  
          }
          catch (WriterException e) {
              throw new IllegalArgumentException("QR code could not be "
                      + "generated for TOTP key.", e);
          }
          catch (IOException e) {
              throw new IllegalStateException("Image stream of QR code could "
                      + "not be written.", e);
          }
  
          // Return data URI for generated image
          return "data:image/png;base64,"
                  + BaseEncoding.base64().encode(stream.toByteArray());
  
      }
docs: Returns the URL of a QR code describing the user's TOTP key and
  configuration. If the key is not being exposed for enrollment, null is
  returned.
  
  @return
  The URL of a QR code describing the user's TOTP key and
  configuration, or null if the key is not being exposed for
  enrollment.
  
  @throws GuacamoleException
  If the configuration information required for generating the QR code
  cannot be read from guacamole.properties.