<commit_before>/**
 * Handles the export requests
 */

/*
 * 2011 Peter 'Pita' Martischka (Primary Technology Ltd)
 * 2014 <NAME> (Etherpad Foundation / McLear Ltd)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var ERR = require("async-stacktrace");
var exporthtml = require("../utils/ExportHtml");
var exporttxt = require("../utils/ExportTxt");
var exportEtherpad = require("../utils/ExportEtherpad");
var async = require("async");
var fs = require("fs");
var settings = require('../utils/Settings');
var os = require('os');
var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
var TidyHtml = require('../utils/TidyHtml');

var convertor = null;

//load abiword only if its enabled
if(settings.abiword != null)
  convertor = require("../utils/Abiword");

// Use LibreOffice if an executable has been defined in the settings
if(settings.soffice != null)
  convertor = require("../utils/LibreOffice");

var tempDirectory = "/tmp";

//tempDirectory changes if the operating system is windows
if(os.type().indexOf("Windows") > -1)
{
  tempDirectory = process.env.TEMP;
}

/**
 * do a requested export
 */
exports.doExport = function(req, res, padId, type)
{
  var fileName = padId;

  // allow fileName to be overwritten by a hook, the type type is kept static for security reasons
  hooks.aCallFirst("exportFileName", padId,
    function(err, hookFileName){
      // if fileName is set then set it to the padId, note that fileName is returned as an array.
      if(hookFileName.length) fileName = hookFileName;

      //tell the browser that this is a downloadable file
      res.attachment(fileName + "." + type);

      //if this is a plain text export, we can do this directly
      // We have to over engineer this because tabs are stored as attributes and not plain text
      if(type == "etherpad"){
        exportEtherpad.getPadRaw(padId, function(err, pad){
          if(!err){
            res.send(pad);
            // return;
          }
        });
      }
      else if(type == "txt")
      {
        exporttxt.getPadTXTDocument(padId, req.params.rev, function(err, txt)
        {
          if(ERR(err)) return;
          res.send(txt);
        });
      }
      else
      {
        var html;
        var randNum;
        var srcFile, destFile;

        async.series([
          //render the html document
          function(callback)
          {
            exporthtml.getPadHTMLDocument(padId, req.params.rev, function(err, _html)
            {
              if(ERR(err, callback)) return;
              html = _html;
              callback();
            });
          },
          //decide what to do with the html export<commit_msg>Fixed crash on invalid export url<commit_after>/**
 * Handles the export requests
 */

/*
 * 2011 Peter 'Pita' Martischka (Primary Technology Ltd)
 * 2014 <NAME> (Etherpad Foundation / McLear Ltd)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var ERR = require("async-stacktrace");
var exporthtml = require("../utils/ExportHtml");
var exporttxt = require("../utils/ExportTxt");
var exportEtherpad = require("../utils/ExportEtherpad");
var async = require("async");
var fs = require("fs");
var settings = require('../utils/Settings');
var os = require('os');
var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
var TidyHtml = require('../utils/TidyHtml');

var convertor = null;

//load abiword only if its enabled
if(settings.abiword != null)
  convertor = require("../utils/Abiword");

// Use LibreOffice if an executable has been defined in the settings
if(settings.soffice != null)
  convertor = require("../utils/LibreOffice");

var tempDirectory = "/tmp";

//tempDirectory changes if the operating system is windows
if(os.type().indexOf("Windows") > -1)
{
  tempDirectory = process.env.TEMP;
}

/**
 * do a requested export
 */
exports.doExport = function(req, res, padId, type)
{
  var fileName = padId;

  // allow fileName to be overwritten by a hook, the type type is kept static for security reasons
  hooks.aCallFirst("exportFileName", padId,
    function(err, hookFileName){
      // if fileName is set then set it to the padId, note that fileName is returned as an array.
      if(hookFileName.length) fileName = hookFileName;

      //tell the browser that this is a downloadable file
      res.attachment(fileName + "." + type);

      //if this is a plain text export, we can do this directly
      // We have to over engineer this because tabs are stored as attributes and not plain text
      if(type == "etherpad"){
        exportEtherpad.getPadRaw(padId, function(err, pad){
          if(!err){
            res.send(pad);
            // return;
          }
        });
      }
      else if(type == "txt")
      {
        exporttxt.getPadTXTDocument(padId, req.params.rev, function(err, txt)
        {
          if(!err) {
            res.send(txt);
          }
        });
      }
      else
      {
        var html;
        var randNum;
        var srcFile, destFile;

        async.series([
          //render the html document
          function(callback)
          {
            exporthtml.getPadHTMLDocument(padId, req.params.rev, function(err, _html)
            {
              if(ERR(err, callback)) return;
              html = _html;
              callback();
            });
          },
          //decide what to do with the html export
{'fraction_non_alphanumeric': 0.11375744280789721, 'fraction_numerical': 0.00407395800689439, 'mean_word_length': 2.6164305949008497, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5608834', 'n_tokens_mistral': 1804, 'n_tokens_neox': 1771, 'n_words': 625}