Advertisement
stuppid_bot

Base.js

Sep 6th, 2013
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var _this = this,
  2.     http = require('http'),
  3.     fs = require('fs');
  4.  
  5. exports.template = function(str, data) {
  6.     return str.replace(/\{\{(\w+(\.\w+)*)\}\}/g, function(src, name) {
  7.         var part,
  8.             parts = name.split('.'),
  9.             cur = data;
  10.  
  11.          while  (part = parts.shift()) {
  12.             if (!(part in cur)) {
  13.                 return '';
  14.             }
  15.  
  16.             cur = cur[part];
  17.         }
  18.  
  19.         return cur;
  20.     });
  21. };
  22.  
  23. exports.SimpleHttpServer = function(port, host) {
  24.     var VERSION = '0.1';
  25.     port = port === undefined ? 80 : port;
  26.     host = host === undefined ? '127.0.0.1' : host;
  27.     this.allowedMethods = ['GET', 'POST', 'PUT', 'DELETE'];
  28.     this.maxRequestLength = 20000000;
  29.     this.webRoot = './webroot';
  30.     this.indexFiles = ['index.htm', 'index.html', 'default.htm', 'default.html'];  
  31.     this.mimeTypes = {
  32.         "123": "application/vnd.lotus-1-2-3",
  33.         "ice": "x-conference/x-cooltalk",
  34.         "smv": "video/x-smv",
  35.         "movie": "video/x-sgi-movie",
  36.         "avi": "video/x-msvideo",
  37.         "wvx": "video/x-ms-wvx",
  38.         "wmx": "video/x-ms-wmx",
  39.         "wmv": "video/x-ms-wmv",
  40.         "wm": "video/x-ms-wm",
  41.         "vob": "video/x-ms-vob",
  42.         "asx": "video/x-ms-asf",
  43.         "asf": "video/x-ms-asf",
  44.         "mng": "video/x-mng",
  45.         "mks": "video/x-matroska",
  46.         "mk3d": "video/x-matroska",
  47.         "mkv": "video/x-matroska",
  48.         "m4v": "video/x-m4v",
  49.         "flv": "video/x-flv",
  50.         "fli": "video/x-fli",
  51.         "f4v": "video/x-f4v",
  52.         "webm": "video/webm",
  53.         "viv": "video/vnd.vivo",
  54.         "uvvu": "video/vnd.uvvu.mp4",
  55.         "uvu": "video/vnd.uvvu.mp4",
  56.         "pyv": "video/vnd.ms-playready.media.pyv",
  57.         "m4u": "video/vnd.mpegurl",
  58.         "mxu": "video/vnd.mpegurl",
  59.         "fvt": "video/vnd.fvt",
  60.         "dvb": "video/vnd.dvb.file",
  61.         "uvvv": "video/vnd.dece.video",
  62.         "uvv": "video/vnd.dece.video",
  63.         "uvvs": "video/vnd.dece.sd",
  64.         "uvs": "video/vnd.dece.sd",
  65.         "uvvp": "video/vnd.dece.pd",
  66.         "uvp": "video/vnd.dece.pd",
  67.         "uvvm": "video/vnd.dece.mobile",
  68.         "uvm": "video/vnd.dece.mobile",
  69.         "uvvh": "video/vnd.dece.hd",
  70.         "uvh": "video/vnd.dece.hd",
  71.         "mov": "video/quicktime",
  72.         "qt": "video/quicktime",
  73.         "ogv": "video/ogg",
  74.         "m2v": "video/mpeg",
  75.         "m1v": "video/mpeg",
  76.         "mpe": "video/mpeg",
  77.         "mpg": "video/mpeg",
  78.         "mpeg": "video/mpeg",
  79.         "mpg4": "video/mp4",
  80.         "mp4v": "video/mp4",
  81.         "mp4": "video/mp4",
  82.         "mjp2": "video/mj2",
  83.         "mj2": "video/mj2",
  84.         "jpgm": "video/jpm",
  85.         "jpm": "video/jpm",
  86.         "jpgv": "video/jpeg",
  87.         "h264": "video/h264",
  88.         "h263": "video/h263",
  89.         "h261": "video/h261",
  90.         "3g2": "video/3gpp2",
  91.         "3gp": "video/3gpp",
  92.         "vcf": "text/x-vcard",
  93.         "vcs": "text/x-vcalendar",
  94.         "uu": "text/x-uuencode",
  95.         "sfv": "text/x-sfv",
  96.         "etx": "text/x-setext",
  97.         "nfo": "text/x-nfo",
  98.         "pas": "text/x-pascal",
  99.         "p": "text/x-pascal",
  100.         "opml": "text/x-opml",
  101.         "java": "text/x-java-source",
  102.         "f90": "text/x-fortran",
  103.         "f77": "text/x-fortran",
  104.         "for": "text/x-fortran",
  105.         "f": "text/x-fortran",
  106.         "dic": "text/x-c",
  107.         "hh": "text/x-c",
  108.         "h": "text/x-c",
  109.         "cpp": "text/x-c",
  110.         "cxx": "text/x-c",
  111.         "cc": "text/x-c",
  112.         "c": "text/x-c",
  113.         "asm": "text/x-asm",
  114.         "s": "text/x-asm",
  115.         "wmls": "text/vnd.wap.wmlscript",
  116.         "wml": "text/vnd.wap.wml",
  117.         "jad": "text/vnd.sun.j2me.app-descriptor",
  118.         "spot": "text/vnd.in3d.spot",
  119.         "3dml": "text/vnd.in3d.3dml",
  120.         "gv": "text/vnd.graphviz",
  121.         "flx": "text/vnd.fmi.flexstor",
  122.         "fly": "text/vnd.fly",
  123.         "sub": "image/vnd.dvb.subtitle",
  124.         "mcurl": "text/vnd.curl.mcurl",
  125.         "scurl": "text/vnd.curl.scurl",
  126.         "dcurl": "text/vnd.curl.dcurl",
  127.         "curl": "text/vnd.curl",
  128.         "vcard": "text/vcard",
  129.         "urls": "text/uri-list",
  130.         "uris": "text/uri-list",
  131.         "uri": "text/uri-list",
  132.         "ttl": "text/turtle",
  133.         "ms": "text/troff",
  134.         "me": "text/troff",
  135.         "man": "text/troff",
  136.         "roff": "text/troff",
  137.         "tr": "text/troff",
  138.         "t": "text/troff",
  139.         "tsv": "text/tab-separated-values",
  140.         "sgm": "text/sgml",
  141.         "sgml": "text/sgml",
  142.         "rtx": "text/richtext",
  143.         "dsc": "text/prs.lines.tag",
  144.         "in": "text/plain",
  145.         "log": "text/plain",
  146.         "list": "text/plain",
  147.         "def": "text/plain",
  148.         "conf": "text/plain",
  149.         "text": "text/plain",
  150.         "txt": "text/plain",
  151.         "n3": "text/n3",
  152.         "htm": "text/html",
  153.         "html": "text/html",
  154.         "csv": "text/csv",
  155.         "css": "text/css",
  156.         "ifb": "text/calendar",
  157.         "ics": "text/calendar",
  158.         "appcache": "text/cache-manifest",
  159.         "x3dz": "model/x3d+xml",
  160.         "x3d": "model/x3d+xml",
  161.         "x3dvz": "model/x3d+vrml",
  162.         "x3dv": "model/x3d+vrml",
  163.         "x3dbz": "model/x3d+binary",
  164.         "x3db": "model/x3d+binary",
  165.         "vrml": "model/vrml",
  166.         "wrl": "model/vrml",
  167.         "vtu": "model/vnd.vtu",
  168.         "mts": "model/vnd.mts",
  169.         "gtw": "model/vnd.gtw",
  170.         "gdl": "model/vnd.gdl",
  171.         "dwf": "model/vnd.dwf",
  172.         "dae": "model/vnd.collada+xml",
  173.         "silo": "model/mesh",
  174.         "mesh": "model/mesh",
  175.         "msh": "model/mesh",
  176.         "iges": "model/iges",
  177.         "igs": "model/iges",
  178.         "mime": "message/rfc822",
  179.         "eml": "message/rfc822",
  180.         "xwd": "image/x-xwindowdump",
  181.         "xpm": "image/x-xpixmap",
  182.         "xbm": "image/x-xbitmap",
  183.         "tga": "image/x-tga",
  184.         "rgb": "image/x-rgb",
  185.         "ppm": "image/x-portable-pixmap",
  186.         "pgm": "image/x-portable-graymap",
  187.         "pbm": "image/x-portable-bitmap",
  188.         "pnm": "image/x-portable-anymap",
  189.         "pct": "image/x-pict",
  190.         "pic": "image/x-pict",
  191.         "pcx": "image/x-pcx",
  192.         "sid": "image/x-mrsid-image",
  193.         "ico": "image/x-icon",
  194.         "fh7": "image/x-freehand",
  195.         "fh5": "image/x-freehand",
  196.         "fh4": "image/x-freehand",
  197.         "fhc": "image/x-freehand",
  198.         "fh": "image/x-freehand",
  199.         "cmx": "image/x-cmx",
  200.         "ras": "image/x-cmu-raster",
  201.         "3ds": "image/x-3ds",
  202.         "webp": "image/webp",
  203.         "xif": "image/vnd.xiff",
  204.         "wbmp": "image/vnd.wap.wbmp",
  205.         "npx": "image/vnd.net-fpx",
  206.         "wdp": "image/vnd.ms-photo",
  207.         "mdi": "image/vnd.ms-modi",
  208.         "rlc": "image/vnd.fujixerox.edmics-rlc",
  209.         "mmr": "image/vnd.fujixerox.edmics-mmr",
  210.         "fst": "image/vnd.fst",
  211.         "fpx": "image/vnd.fpx",
  212.         "fbs": "image/vnd.fastbidsheet",
  213.         "dxf": "image/vnd.dxf",
  214.         "dwg": "image/vnd.dwg",
  215.         "djv": "image/vnd.djvu",
  216.         "djvu": "image/vnd.djvu",
  217.         "uvvg": "image/vnd.dece.graphic",
  218.         "uvg": "image/vnd.dece.graphic",
  219.         "uvvi": "image/vnd.dece.graphic",
  220.         "uvi": "image/vnd.dece.graphic",
  221.         "psd": "image/vnd.adobe.photoshop",
  222.         "tif": "image/tiff",
  223.         "tiff": "image/tiff",
  224.         "svgz": "image/svg+xml",
  225.         "svg": "image/svg+xml",
  226.         "sgi": "image/sgi",
  227.         "btif": "image/prs.btif",
  228.         "png": "image/png",
  229.         "ktx": "image/ktx",
  230.         "jpe": "image/jpeg",
  231.         "jpg": "image/jpeg",
  232.         "jpeg": "image/jpeg",
  233.         "ief": "image/ief",
  234.         "gif": "image/gif",
  235.         "g3": "image/g3fax",
  236.         "cgm": "image/cgm",
  237.         "bmp": "image/bmp",
  238.         "xyz": "chemical/x-xyz",
  239.         "csml": "chemical/x-csml",
  240.         "cml": "chemical/x-cml",
  241.         "cmdf": "chemical/x-cmdf",
  242.         "cif": "chemical/x-cif",
  243.         "cdx": "chemical/x-cdx",
  244.         "xm": "audio/xm",
  245.         "wav": "audio/x-wav",
  246.         "rmp": "audio/x-pn-realaudio-plugin",
  247.         "ra": "audio/x-pn-realaudio",
  248.         "ram": "audio/x-pn-realaudio",
  249.         "wma": "audio/x-ms-wma",
  250.         "wax": "audio/x-ms-wax",
  251.         "m3u": "audio/x-mpegurl",
  252.         "mka": "audio/x-matroska",
  253.         "flac": "audio/x-flac",
  254.         "caf": "audio/x-caf",
  255.         "aifc": "audio/x-aiff",
  256.         "aiff": "audio/x-aiff",
  257.         "aif": "audio/x-aiff",
  258.         "aac": "audio/x-aac",
  259.         "weba": "audio/webm",
  260.         "rip": "audio/vnd.rip",
  261.         "ecelp9600": "audio/vnd.nuera.ecelp9600",
  262.         "ecelp7470": "audio/vnd.nuera.ecelp7470",
  263.         "ecelp4800": "audio/vnd.nuera.ecelp4800",
  264.         "pya": "audio/vnd.ms-playready.media.pya",
  265.         "lvp": "audio/vnd.lucent.voice",
  266.         "dtshd": "audio/vnd.dts.hd",
  267.         "dts": "audio/vnd.dts",
  268.         "dra": "audio/vnd.dra",
  269.         "eol": "audio/vnd.digital-winds",
  270.         "uvva": "audio/vnd.dece.audio",
  271.         "uva": "audio/vnd.dece.audio",
  272.         "sil": "audio/silk",
  273.         "s3m": "audio/s3m",
  274.         "spx": "audio/ogg",
  275.         "ogg": "audio/ogg",
  276.         "oga": "audio/ogg",
  277.         "m3a": "audio/mpeg",
  278.         "m2a": "audio/mpeg",
  279.         "mp3": "audio/mpeg",
  280.         "mp2a": "audio/mpeg",
  281.         "mp2": "audio/mpeg",
  282.         "mpga": "audio/mpeg",
  283.         "mp4a": "audio/mp4",
  284.         "rmi": "audio/midi",
  285.         "kar": "audio/midi",
  286.         "midi": "audio/midi",
  287.         "mid": "audio/midi",
  288.         "snd": "audio/basic",
  289.         "au": "audio/basic",
  290.         "adp": "audio/adpcm",
  291.         "zip": "application/zip",
  292.         "yin": "application/yin+xml",
  293.         "yang": "application/yang",
  294.         "xvm": "application/xv+xml",
  295.         "xvml": "application/xv+xml",
  296.         "xhvml": "application/xv+xml",
  297.         "mxml": "application/xv+xml",
  298.         "xspf": "application/xspf+xml",
  299.         "xslt": "application/xslt+xml",
  300.         "xpl": "application/xproc+xml",
  301.         "xop": "application/xop+xml",
  302.         "dtd": "application/xml-dtd",
  303.         "xsl": "application/xml",
  304.         "xml": "application/xml",
  305.         "xht": "application/xhtml+xml",
  306.         "xhtml": "application/xhtml+xml",
  307.         "xenc": "application/xenc+xml",
  308.         "xdf": "application/xcap-diff+xml",
  309.         "xaml": "application/xaml+xml",
  310.         "z8": "application/x-zmachine",
  311.         "z7": "application/x-zmachine",
  312.         "z6": "application/x-zmachine",
  313.         "z5": "application/x-zmachine",
  314.         "z4": "application/x-zmachine",
  315.         "z3": "application/x-zmachine",
  316.         "z2": "application/x-zmachine",
  317.         "z1": "application/x-zmachine",
  318.         "xz": "application/x-xz",
  319.         "xpi": "application/x-xpinstall",
  320.         "xlf": "application/x-xliff+xml",
  321.         "fig": "application/x-xfig",
  322.         "crt": "application/x-x509-ca-cert",
  323.         "der": "application/x-x509-ca-cert",
  324.         "src": "application/x-wais-source",
  325.         "ustar": "application/x-ustar",
  326.         "obj": "application/x-tgif",
  327.         "texi": "application/x-texinfo",
  328.         "texinfo": "application/x-texinfo",
  329.         "tfm": "application/x-tex-tfm",
  330.         "tex": "application/x-tex",
  331.         "tcl": "application/x-tcl",
  332.         "tar": "application/x-tar",
  333.         "gam": "application/x-tads",
  334.         "t3": "application/x-t3vm-image",
  335.         "sv4crc": "application/x-sv4crc",
  336.         "sv4cpio": "application/x-sv4cpio",
  337.         "srt": "application/x-subrip",
  338.         "sitx": "application/x-stuffitx",
  339.         "sit": "application/x-stuffit",
  340.         "sql": "application/x-sql",
  341.         "xap": "application/x-silverlight-app",
  342.         "swf": "application/x-shockwave-flash",
  343.         "shar": "application/x-shar",
  344.         "sh": "application/x-sh",
  345.         "ris": "application/x-research-info-systems",
  346.         "rar": "application/x-rar-compressed",
  347.         "p7r": "application/x-pkcs7-certreqresp",
  348.         "spc": "application/x-pkcs7-certificates",
  349.         "p7b": "application/x-pkcs7-certificates",
  350.         "pfx": "application/x-pkcs12",
  351.         "p12": "application/x-pkcs12",
  352.         "nzb": "application/x-nzb",
  353.         "cdf": "application/x-netcdf",
  354.         "nc": "application/x-netcdf",
  355.         "wri": "application/x-mswrite",
  356.         "trm": "application/x-msterminal",
  357.         "scd": "application/x-msschedule",
  358.         "pub": "application/x-mspublisher",
  359.         "mny": "application/x-msmoney",
  360.         "emz": "application/x-msmetafile",
  361.         "emf": "application/x-msmetafile",
  362.         "wmz": "application/x-ms-wmz",
  363.         "wmf": "application/x-msmetafile",
  364.         "m14": "application/x-msmediaview",
  365.         "m13": "application/x-msmediaview",
  366.         "mvb": "application/x-msmediaview",
  367.         "msi": "application/x-msdownload",
  368.         "bat": "application/x-msdownload",
  369.         "com": "application/x-msdownload",
  370.         "dll": "application/x-msdownload",
  371.         "exe": "application/x-msdownload",
  372.         "clp": "application/x-msclip",
  373.         "crd": "application/x-mscardfile",
  374.         "obd": "application/x-msbinder",
  375.         "mdb": "application/x-msaccess",
  376.         "xbap": "application/x-ms-xbap",
  377.         "wmd": "application/x-ms-wmd",
  378.         "lnk": "application/x-ms-shortcut",
  379.         "application": "application/x-ms-application",
  380.         "mobi": "application/x-mobipocket-ebook",
  381.         "prc": "application/x-mobipocket-ebook",
  382.         "mie": "application/x-mie",
  383.         "lha": "application/x-lzh-compressed",
  384.         "lzh": "application/x-lzh-compressed",
  385.         "latex": "application/x-latex",
  386.         "jnlp": "application/x-java-jnlp-file",
  387.         "iso": "application/x-iso9660-image",
  388.         "install": "application/x-install-instructions",
  389.         "hdf": "application/x-hdf",
  390.         "gtar": "application/x-gtar",
  391.         "gramps": "application/x-gramps-xml",
  392.         "gnumeric": "application/x-gnumeric",
  393.         "ulx": "application/x-glulx",
  394.         "gca": "application/x-gca-compressed",
  395.         "spl": "application/x-futuresplash",
  396.         "arc": "application/x-freearc",
  397.         "woff": "application/x-font-woff",
  398.         "afm": "application/x-font-type1",
  399.         "pfm": "application/x-font-type1",
  400.         "pfb": "application/x-font-type1",
  401.         "pfa": "application/x-font-type1",
  402.         "ttc": "application/x-font-ttf",
  403.         "ttf": "application/x-font-ttf",
  404.         "snf": "application/x-font-snf",
  405.         "pcf": "application/x-font-pcf",
  406.         "otf": "application/x-font-otf",
  407.         "psf": "application/x-font-linux-psf",
  408.         "gsf": "application/x-font-ghostscript",
  409.         "bdf": "application/x-font-bdf",
  410.         "eva": "application/x-eva",
  411.         "evy": "application/x-envoy",
  412.         "dvi": "application/x-dvi",
  413.         "res": "application/x-dtbresource+xml",
  414.         "dtb": "application/x-dtbook+xml",
  415.         "ncx": "application/x-dtbncx+xml",
  416.         "wad": "application/x-doom",
  417.         "swa": "application/x-director",
  418.         "fgd": "application/x-director",
  419.         "w3d": "application/x-director",
  420.         "cxt": "application/x-director",
  421.         "cct": "application/x-director",
  422.         "cst": "application/x-director",
  423.         "dxr": "application/x-director",
  424.         "dcr": "application/x-director",
  425.         "dir": "application/x-director",
  426.         "dgc": "application/x-dgc-compressed",
  427.         "udeb": "application/x-debian-package",
  428.         "deb": "application/x-debian-package",
  429.         "csh": "application/x-csh",
  430.         "cpio": "application/x-cpio",
  431.         "nsc": "application/x-conference",
  432.         "pgn": "application/x-chess-pgn",
  433.         "chat": "application/x-chat",
  434.         "cfs": "application/x-cfs-compressed",
  435.         "vcd": "application/x-cdlink",
  436.         "cb7": "application/x-cbr",
  437.         "cbz": "application/x-cbr",
  438.         "cbt": "application/x-cbr",
  439.         "cba": "application/x-cbr",
  440.         "cbr": "application/x-cbr",
  441.         "boz": "application/x-bzip2",
  442.         "bz2": "application/x-bzip2",
  443.         "bz": "application/x-bzip",
  444.         "blorb": "application/x-blorb",
  445.         "blb": "application/x-blorb",
  446.         "torrent": "application/x-bittorrent",
  447.         "bcpio": "application/x-bcpio",
  448.         "aas": "application/x-authorware-seg",
  449.         "aam": "application/x-authorware-map",
  450.         "vox": "application/x-authorware-bin",
  451.         "u32": "application/x-authorware-bin",
  452.         "x32": "application/x-authorware-bin",
  453.         "aab": "application/x-authorware-bin",
  454.         "dmg": "application/x-apple-diskimage",
  455.         "ace": "application/x-ace-compressed",
  456.         "abw": "application/x-abiword",
  457.         "7z": "application/x-7z-compressed",
  458.         "wspolicy": "application/wspolicy+xml",
  459.         "wsdl": "application/wsdl+xml",
  460.         "hlp": "application/winhlp",
  461.         "wgt": "application/widget",
  462.         "vxml": "application/voicexml+xml",
  463.         "zaz": "application/vnd.zzazz.deck+xml",
  464.         "zirz": "application/vnd.zul",
  465.         "zir": "application/vnd.zul",
  466.         "cmp": "application/vnd.yellowriver-custom-menu",
  467.         "spf": "application/vnd.yamaha.smaf-phrase",
  468.         "saf": "application/vnd.yamaha.smaf-audio",
  469.         "osfpvg": "application/vnd.yamaha.openscoreformat.osfpvg+xml",
  470.         "osf": "application/vnd.yamaha.openscoreformat",
  471.         "hvp": "application/vnd.yamaha.hv-voice",
  472.         "hvs": "application/vnd.yamaha.hv-script",
  473.         "hvd": "application/vnd.yamaha.hv-dic",
  474.         "xfdl": "application/vnd.xfdl",
  475.         "xar": "application/vnd.xara",
  476.         "stf": "application/vnd.wt.stf",
  477.         "wqd": "application/vnd.wqd",
  478.         "wpd": "application/vnd.wordperfect",
  479.         "nbp": "application/vnd.wolfram.player",
  480.         "wtb": "application/vnd.webturbo",
  481.         "wmlsc": "application/vnd.wap.wmlscriptc",
  482.         "wmlc": "application/vnd.wap.wmlc",
  483.         "wbxml": "application/vnd.wap.wbxml",
  484.         "vsf": "application/vnd.vsf",
  485.         "vis": "application/vnd.visionary",
  486.         "vsw": "application/vnd.visio",
  487.         "vss": "application/vnd.visio",
  488.         "vst": "application/vnd.visio",
  489.         "vsd": "application/vnd.visio",
  490.         "vcx": "application/vnd.vcx",
  491.         "uoml": "application/vnd.uoml+xml",
  492.         "unityweb": "application/vnd.unity",
  493.         "umj": "application/vnd.umajin",
  494.         "utz": "application/vnd.uiq.theme",
  495.         "ufdl": "application/vnd.ufdl",
  496.         "ufd": "application/vnd.ufdl",
  497.         "tra": "application/vnd.trueapp",
  498.         "mxs": "application/vnd.triscape.mxs",
  499.         "tpt": "application/vnd.trid.tpt",
  500.         "tmo": "application/vnd.tmobile-livetv",
  501.         "dmp": "application/vnd.tcpdump.pcap",
  502.         "cap": "application/vnd.tcpdump.pcap",
  503.         "pcap": "application/vnd.tcpdump.pcap",
  504.         "tao": "application/vnd.tao.intent-module-archive",
  505.         "xdm": "application/vnd.syncml.dm+xml",
  506.         "bdm": "application/vnd.syncml.dm+wbxml",
  507.         "xsm": "application/vnd.syncml+xml",
  508.         "sisx": "application/vnd.symbian.install",
  509.         "sis": "application/vnd.symbian.install",
  510.         "svd": "application/vnd.svd",
  511.         "susp": "application/vnd.sus-calendar",
  512.         "sus": "application/vnd.sus-calendar",
  513.         "stw": "application/vnd.sun.xml.writer.template",
  514.         "sxg": "application/vnd.sun.xml.writer.global",
  515.         "sxw": "application/vnd.sun.xml.writer",
  516.         "sxm": "application/vnd.sun.xml.math",
  517.         "sti": "application/vnd.sun.xml.impress.template",
  518.         "sxi": "application/vnd.sun.xml.impress",
  519.         "std": "application/vnd.sun.xml.draw.template",
  520.         "sxd": "application/vnd.sun.xml.draw",
  521.         "stc": "application/vnd.sun.xml.calc.template",
  522.         "sxc": "application/vnd.sun.xml.calc",
  523.         "sm": "application/vnd.stepmania.stepchart",
  524.         "smzip": "application/vnd.stepmania.package",
  525.         "sgl": "application/vnd.stardivision.writer-global",
  526.         "vor": "application/vnd.stardivision.writer",
  527.         "sdw": "application/vnd.stardivision.writer",
  528.         "smf": "application/vnd.stardivision.math",
  529.         "sdd": "application/vnd.stardivision.impress",
  530.         "sda": "application/vnd.stardivision.draw",
  531.         "sdc": "application/vnd.stardivision.calc",
  532.         "sfs": "application/vnd.spotfire.sfs",
  533.         "dxp": "application/vnd.spotfire.dxp",
  534.         "sdkd": "application/vnd.solent.sdkm+xml",
  535.         "sdkm": "application/vnd.solent.sdkm+xml",
  536.         "teacher": "application/vnd.smart.teacher",
  537.         "mmf": "application/vnd.smaf",
  538.         "twds": "application/vnd.simtech-mindmapper",
  539.         "twd": "application/vnd.simtech-mindmapper",
  540.         "ipk": "application/vnd.shana.informed.package",
  541.         "iif": "application/vnd.shana.informed.interchange",
  542.         "itp": "application/vnd.shana.informed.formtemplate",
  543.         "ifm": "application/vnd.shana.informed.formdata",
  544.         "semf": "application/vnd.semf",
  545.         "semd": "application/vnd.semd",
  546.         "sema": "application/vnd.sema",
  547.         "see": "application/vnd.seemail",
  548.         "st": "application/vnd.sailingtracker.track",
  549.         "link66": "application/vnd.route66.link66+xml",
  550.         "rmvb": "application/vnd.rn-realmedia-vbr",
  551.         "rm": "application/vnd.rn-realmedia",
  552.         "cod": "application/vnd.rim.cod",
  553.         "cryptonote": "application/vnd.rig.cryptonote",
  554.         "musicxml": "application/vnd.recordare.musicxml+xml",
  555.         "mxl": "application/vnd.recordare.musicxml",
  556.         "bed": "application/vnd.realvnc.bed",
  557.         "qxb": "application/vnd.quark.quarkxpress",
  558.         "qxl": "application/vnd.quark.quarkxpress",
  559.         "qwt": "application/vnd.quark.quarkxpress",
  560.         "qwd": "application/vnd.quark.quarkxpress",
  561.         "qxt": "application/vnd.quark.quarkxpress",
  562.         "qxd": "application/vnd.quark.quarkxpress",
  563.         "ptid": "application/vnd.pvi.ptid1",
  564.         "qps": "application/vnd.publishare-delta-tree",
  565.         "mgz": "application/vnd.proteus.magazine",
  566.         "box": "application/vnd.previewsystems.box",
  567.         "pbd": "application/vnd.powerbuilder6",
  568.         "plf": "application/vnd.pocketlearn",
  569.         "wg": "application/vnd.pmi.widget",
  570.         "efif": "application/vnd.picsel",
  571.         "ei6": "application/vnd.pg.osasli",
  572.         "str": "application/vnd.pg.format",
  573.         "paw": "application/vnd.pawaafile",
  574.         "oprc": "application/vnd.palm",
  575.         "pqa": "application/vnd.palm",
  576.         "pdb": "application/vnd.palm",
  577.         "esa": "application/vnd.osgi.subsystem",
  578.         "dp": "application/vnd.osgi.dp",
  579.         "mgp": "application/vnd.osgeo.mapguide.package",
  580.         "dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
  581.         "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  582.         "xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
  583.         "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  584.         "potx": "application/vnd.openxmlformats-officedocument.presentationml.template",
  585.         "ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
  586.         "sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide",
  587.         "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
  588.         "oxt": "application/vnd.openofficeorg.extension",
  589.         "dd2": "application/vnd.oma.dd2+xml",
  590.         "xo": "application/vnd.olpc-sugar",
  591.         "oth": "application/vnd.oasis.opendocument.text-web",
  592.         "ott": "application/vnd.oasis.opendocument.text-template",
  593.         "odm": "application/vnd.oasis.opendocument.text-master",
  594.         "odt": "application/vnd.oasis.opendocument.text",
  595.         "ots": "application/vnd.oasis.opendocument.spreadsheet-template",
  596.         "ods": "application/vnd.oasis.opendocument.spreadsheet",
  597.         "otp": "application/vnd.oasis.opendocument.presentation-template",
  598.         "odp": "application/vnd.oasis.opendocument.presentation",
  599.         "oti": "application/vnd.oasis.opendocument.image-template",
  600.         "odi": "application/vnd.oasis.opendocument.image",
  601.         "otg": "application/vnd.oasis.opendocument.graphics-template",
  602.         "odg": "application/vnd.oasis.opendocument.graphics",
  603.         "odft": "application/vnd.oasis.opendocument.formula-template",
  604.         "odf": "application/vnd.oasis.opendocument.formula",
  605.         "odb": "application/vnd.oasis.opendocument.database",
  606.         "otc": "application/vnd.oasis.opendocument.chart-template",
  607.         "odc": "application/vnd.oasis.opendocument.chart",
  608.         "ext": "application/vnd.novadigm.ext",
  609.         "edx": "application/vnd.novadigm.edx",
  610.         "edm": "application/vnd.novadigm.edm",
  611.         "rpss": "application/vnd.nokia.radio-presets",
  612.         "rpst": "application/vnd.nokia.radio-preset",
  613.         "n-gage": "application/vnd.nokia.n-gage.symbian.install",
  614.         "ngdat": "application/vnd.nokia.n-gage.data",
  615.         "nnw": "application/vnd.noblenet-web",
  616.         "nns": "application/vnd.noblenet-sealer",
  617.         "nnd": "application/vnd.noblenet-directory",
  618.         "nitf": "application/vnd.nitf",
  619.         "ntf": "application/vnd.nitf",
  620.         "nlu": "application/vnd.neurolanguage.nlu",
  621.         "taglet": "application/vnd.mynfc",
  622.         "msty": "application/vnd.muvee.style",
  623.         "mus": "application/vnd.musician",
  624.         "mseq": "application/vnd.mseq",
  625.         "xps": "application/vnd.ms-xpsdocument",
  626.         "wpl": "application/vnd.ms-wpl",
  627.         "wdb": "application/vnd.ms-works",
  628.         "wcm": "application/vnd.ms-works",
  629.         "wks": "application/vnd.ms-works",
  630.         "wps": "application/vnd.ms-works",
  631.         "dotm": "application/vnd.ms-word.template.macroenabled.12",
  632.         "docm": "application/vnd.ms-word.document.macroenabled.12",
  633.         "mpt": "application/vnd.ms-project",
  634.         "mpp": "application/vnd.ms-project",
  635.         "potm": "application/vnd.ms-powerpoint.template.macroenabled.12",
  636.         "ppsm": "application/vnd.ms-powerpoint.slideshow.macroenabled.12",
  637.         "sldm": "application/vnd.ms-powerpoint.slide.macroenabled.12",
  638.         "pptm": "application/vnd.ms-powerpoint.presentation.macroenabled.12",
  639.         "ppam": "application/vnd.ms-powerpoint.addin.macroenabled.12",
  640.         "pot": "application/vnd.ms-powerpoint",
  641.         "pps": "application/vnd.ms-powerpoint",
  642.         "ppt": "application/vnd.ms-powerpoint",
  643.         "stl": "application/vnd.ms-pki.stl",
  644.         "cat": "application/vnd.ms-pki.seccat",
  645.         "thmx": "application/vnd.ms-officetheme",
  646.         "lrm": "application/vnd.ms-lrm",
  647.         "ims": "application/vnd.ms-ims",
  648.         "chm": "application/vnd.ms-htmlhelp",
  649.         "eot": "application/vnd.ms-fontobject",
  650.         "xltm": "application/vnd.ms-excel.template.macroenabled.12",
  651.         "xlsm": "application/vnd.ms-excel.sheet.macroenabled.12",
  652.         "xlsb": "application/vnd.ms-excel.sheet.binary.macroenabled.12",
  653.         "xlam": "application/vnd.ms-excel.addin.macroenabled.12",
  654.         "xlw": "application/vnd.ms-excel",
  655.         "xlt": "application/vnd.ms-excel",
  656.         "xlc": "application/vnd.ms-excel",
  657.         "xla": "application/vnd.ms-excel",
  658.         "xlm": "application/vnd.ms-excel",
  659.         "xls": "application/vnd.ms-excel",
  660.         "cab": "application/vnd.ms-cab-compressed",
  661.         "cil": "application/vnd.ms-artgalry",
  662.         "xul": "application/vnd.mozilla.xul+xml",
  663.         "mpc": "application/vnd.mophun.certificate",
  664.         "mpn": "application/vnd.mophun.application",
  665.         "txf": "application/vnd.mobius.txf",
  666.         "plc": "application/vnd.mobius.plc",
  667.         "msl": "application/vnd.mobius.msl",
  668.         "mqy": "application/vnd.mobius.mqy",
  669.         "mbk": "application/vnd.mobius.mbk",
  670.         "dis": "application/vnd.mobius.dis",
  671.         "daf": "application/vnd.mobius.daf",
  672.         "mif": "application/vnd.mif",
  673.         "igx": "application/vnd.micrografx.igx",
  674.         "flo": "application/vnd.micrografx.flo",
  675.         "mfm": "application/vnd.mfmp",
  676.         "mwf": "application/vnd.mfer",
  677.         "cdkey": "application/vnd.mediastation.cdkey",
  678.         "mc1": "application/vnd.medcalcdata",
  679.         "mcd": "application/vnd.mcd",
  680.         "portpkg": "application/vnd.macports.portpkg",
  681.         "lwp": "application/vnd.lotus-wordpro",
  682.         "scm": "application/vnd.lotus-screencam",
  683.         "org": "application/vnd.lotus-organizer",
  684.         "nsf": "application/vnd.lotus-notes",
  685.         "pre": "application/vnd.lotus-freelance",
  686.         "apr": "application/vnd.lotus-approach",
  687.         "lbe": "application/vnd.llamagraphics.life-balance.exchange+xml",
  688.         "lbd": "application/vnd.llamagraphics.life-balance.desktop",
  689.         "lasxml": "application/vnd.las.las+xml",
  690.         "sse": "application/vnd.kodak-descriptor",
  691.         "skm": "application/vnd.koan",
  692.         "skt": "application/vnd.koan",
  693.         "skd": "application/vnd.koan",
  694.         "skp": "application/vnd.koan",
  695.         "knp": "application/vnd.kinar",
  696.         "kne": "application/vnd.kinar",
  697.         "kia": "application/vnd.kidspiration",
  698.         "htke": "application/vnd.kenameaapp",
  699.         "kwt": "application/vnd.kde.kword",
  700.         "kwd": "application/vnd.kde.kword",
  701.         "ksp": "application/vnd.kde.kspread",
  702.         "kpt": "application/vnd.kde.kpresenter",
  703.         "kpr": "application/vnd.kde.kpresenter",
  704.         "kon": "application/vnd.kde.kontour",
  705.         "flw": "application/vnd.kde.kivio",
  706.         "kfo": "application/vnd.kde.kformula",
  707.         "chrt": "application/vnd.kde.kchart",
  708.         "karbon": "application/vnd.kde.karbon",
  709.         "ktr": "application/vnd.kahootz",
  710.         "ktz": "application/vnd.kahootz",
  711.         "joda": "application/vnd.joost.joda-archive",
  712.         "jisp": "application/vnd.jisp",
  713.         "rms": "application/vnd.jcp.javame.midlet-rms",
  714.         "jam": "application/vnd.jam",
  715.         "fcs": "application/vnd.isac.fcs",
  716.         "xpr": "application/vnd.is-xpr",
  717.         "irp": "application/vnd.irepository.package+xml",
  718.         "rcprofile": "application/vnd.ipunplugged.rcprofile",
  719.         "qfx": "application/vnd.intu.qfx",
  720.         "qbo": "application/vnd.intu.qbo",
  721.         "i2g": "application/vnd.intergeo",
  722.         "xpx": "application/vnd.intercon.formnet",
  723.         "xpw": "application/vnd.intercon.formnet",
  724.         "igm": "application/vnd.insors.igm",
  725.         "ivu": "application/vnd.immervision-ivu",
  726.         "ivp": "application/vnd.immervision-ivp",
  727.         "igl": "application/vnd.igloader",
  728.         "icm": "application/vnd.iccprofile",
  729.         "icc": "application/vnd.iccprofile",
  730.         "sc": "application/vnd.ibm.secure-container",
  731.         "irm": "application/vnd.ibm.rights-management",
  732.         "list3820": "application/vnd.ibm.modcap",
  733.         "listafp": "application/vnd.ibm.modcap",
  734.         "afp": "application/vnd.ibm.modcap",
  735.         "mpy": "application/vnd.ibm.minipay",
  736.         "sfd-hdstx": "application/vnd.hydrostatix.sof-data",
  737.         "pclxl": "application/vnd.hp-pclxl",
  738.         "pcl": "application/vnd.hp-pcl",
  739.         "jlt": "application/vnd.hp-jlyt",
  740.         "hps": "application/vnd.hp-hps",
  741.         "hpid": "application/vnd.hp-hpid",
  742.         "hpgl": "application/vnd.hp-hpgl",
  743.         "les": "application/vnd.hhe.lesson-player",
  744.         "hbci": "application/vnd.hbci",
  745.         "zmm": "application/vnd.handheld-entertainment+xml",
  746.         "hal": "application/vnd.hal+xml",
  747.         "vcg": "application/vnd.groove-vcard",
  748.         "tpl": "application/vnd.groove-tool-template",
  749.         "gtm": "application/vnd.groove-tool-message",
  750.         "grv": "application/vnd.groove-injector",
  751.         "gim": "application/vnd.groove-identity-message",
  752.         "ghf": "application/vnd.groove-help",
  753.         "gac": "application/vnd.groove-account",
  754.         "gqs": "application/vnd.grafeq",
  755.         "gqf": "application/vnd.grafeq",
  756.         "kmz": "application/vnd.google-earth.kmz",
  757.         "kml": "application/vnd.google-earth.kml+xml",
  758.         "gmx": "application/vnd.gmx",
  759.         "g3w": "application/vnd.geospace",
  760.         "g2w": "application/vnd.geoplan",
  761.         "gxt": "application/vnd.geonext",
  762.         "gre": "application/vnd.geometry-explorer",
  763.         "gex": "application/vnd.geometry-explorer",
  764.         "ggt": "application/vnd.geogebra.tool",
  765.         "ggb": "application/vnd.geogebra.file",
  766.         "txd": "application/vnd.genomatix.tuxedo",
  767.         "fzs": "application/vnd.fuzzysheet",
  768.         "xbd": "application/vnd.fujixerox.docuworks.binder",
  769.         "xdw": "application/vnd.fujixerox.docuworks",
  770.         "ddd": "application/vnd.fujixerox.ddd",
  771.         "bh2": "application/vnd.fujitsu.oasysprs",
  772.         "fg5": "application/vnd.fujitsu.oasysgp",
  773.         "oa3": "application/vnd.fujitsu.oasys3",
  774.         "oa2": "application/vnd.fujitsu.oasys2",
  775.         "oas": "application/vnd.fujitsu.oasys",
  776.         "fsc": "application/vnd.fsc.weblaunch",
  777.         "ltf": "application/vnd.frogans.ltf",
  778.         "fnc": "application/vnd.frogans.fnc",
  779.         "book": "application/vnd.framemaker",
  780.         "maker": "application/vnd.framemaker",
  781.         "frame": "application/vnd.framemaker",
  782.         "fm": "application/vnd.framemaker",
  783.         "ftc": "application/vnd.fluxtime.clip",
  784.         "gph": "application/vnd.flographit",
  785.         "dataless": "application/vnd.fdsn.seed",
  786.         "seed": "application/vnd.fdsn.seed",
  787.         "mseed": "application/vnd.fdsn.mseed",
  788.         "fdf": "application/vnd.fdf",
  789.         "ez3": "application/vnd.ezpix-package",
  790.         "ez2": "application/vnd.ezpix-album",
  791.         "et3": "application/vnd.eszigno3+xml",
  792.         "es3": "application/vnd.eszigno3+xml",
  793.         "ssf": "application/vnd.epson.ssf",
  794.         "slt": "application/vnd.epson.salt",
  795.         "qam": "application/vnd.epson.quickanime",
  796.         "msf": "application/vnd.epson.msf",
  797.         "esf": "application/vnd.epson.esf",
  798.         "nml": "application/vnd.enliven",
  799.         "mag": "application/vnd.ecowin.chart",
  800.         "geo": "application/vnd.dynageo",
  801.         "svc": "application/vnd.dvb.service",
  802.         "ait": "application/vnd.dvb.ait",
  803.         "kpxx": "application/vnd.ds-keypoint",
  804.         "dfac": "application/vnd.dreamfactory",
  805.         "dpg": "application/vnd.dpgraph",
  806.         "mlp": "application/vnd.dolby.mlp",
  807.         "dna": "application/vnd.dna",
  808.         "fe_launch": "application/vnd.denovo.fcselayout-link",
  809.         "uvvz": "application/vnd.dece.zip",
  810.         "uvz": "application/vnd.dece.zip",
  811.         "uvvx": "application/vnd.dece.unspecified",
  812.         "uvx": "application/vnd.dece.unspecified",
  813.         "uvvt": "application/vnd.dece.ttml+xml",
  814.         "uvt": "application/vnd.dece.ttml+xml",
  815.         "uvvd": "application/vnd.dece.data",
  816.         "uvd": "application/vnd.dece.data",
  817.         "uvvf": "application/vnd.dece.data",
  818.         "uvf": "application/vnd.dece.data",
  819.         "rdz": "application/vnd.data-vision.rdz",
  820.         "dart": "application/vnd.dart",
  821.         "pcurl": "application/vnd.curl.pcurl",
  822.         "car": "application/vnd.curl.car",
  823.         "ppd": "application/vnd.cups-ppd",
  824.         "pml": "application/vnd.ctc-posml",
  825.         "wbs": "application/vnd.criticaltools.wbs+xml",
  826.         "clkw": "application/vnd.crick.clicker.wordbank",
  827.         "clkt": "application/vnd.crick.clicker.template",
  828.         "clkp": "application/vnd.crick.clicker.palette",
  829.         "clkk": "application/vnd.crick.clicker.keyboard",
  830.         "clkx": "application/vnd.crick.clicker",
  831.         "cmc": "application/vnd.cosmocaller",
  832.         "cdbcmsg": "application/vnd.contact.cmsg",
  833.         "csp": "application/vnd.commonspace",
  834.         "c11amz": "application/vnd.cluetrust.cartomobile-config-pkg",
  835.         "c11amc": "application/vnd.cluetrust.cartomobile-config",
  836.         "c4u": "application/vnd.clonk.c4group",
  837.         "c4p": "application/vnd.clonk.c4group",
  838.         "c4f": "application/vnd.clonk.c4group",
  839.         "c4d": "application/vnd.clonk.c4group",
  840.         "c4g": "application/vnd.clonk.c4group",
  841.         "rp9": "application/vnd.cloanto.rp9",
  842.         "cla": "application/vnd.claymore",
  843.         "cdy": "application/vnd.cinderella",
  844.         "mmd": "application/vnd.chipnuts.karaoke-mmd",
  845.         "cdxml": "application/vnd.chemdraw+xml",
  846.         "rep": "application/vnd.businessobjects",
  847.         "bmi": "application/vnd.bmi",
  848.         "mpm": "application/vnd.blueice.multipass",
  849.         "aep": "application/vnd.audiograph",
  850.         "iota": "application/vnd.astraea-software.iota",
  851.         "swi": "application/vnd.aristanetworks.swi",
  852.         "m3u8": "application/vnd.apple.mpegurl",
  853.         "mpkg": "application/vnd.apple.installer+xml",
  854.         "atx": "application/vnd.antix.game-component",
  855.         "fti": "application/vnd.anser-web-funds-transfer-initiation",
  856.         "cii": "application/vnd.anser-web-certificate-issue-initiation",
  857.         "apk": "application/vnd.android.package-archive",
  858.         "ami": "application/vnd.amiga.ami",
  859.         "acc": "application/vnd.americandynamics.acc",
  860.         "azw": "application/vnd.amazon.ebook",
  861.         "azs": "application/vnd.airzip.filesecure.azs",
  862.         "azf": "application/vnd.airzip.filesecure.azf",
  863.         "ahead": "application/vnd.ahead.space",
  864.         "xfdf": "application/vnd.adobe.xfdf",
  865.         "xdp": "application/vnd.adobe.xdp+xml",
  866.         "fxpl": "application/vnd.adobe.fxp",
  867.         "fxp": "application/vnd.adobe.fxp",
  868.         "fcdt": "application/vnd.adobe.formscentral.fcdt",
  869.         "air": "application/vnd.adobe.air-application-installer-package+zip",
  870.         "acutc": "application/vnd.acucorp",
  871.         "atc": "application/vnd.acucorp",
  872.         "acu": "application/vnd.acucobol",
  873.         "imp": "application/vnd.accpac.simply.imp",
  874.         "aso": "application/vnd.accpac.simply.aso",
  875.         "pwn": "application/vnd.3m.post-it-notes",
  876.         "tcap": "application/vnd.3gpp2.tcap",
  877.         "pvb": "application/vnd.3gpp.pic-bw-var",
  878.         "psb": "application/vnd.3gpp.pic-bw-small",
  879.         "plb": "application/vnd.3gpp.pic-bw-large",
  880.         "tsd": "application/timestamped-data",
  881.         "tfi": "application/thraud+xml",
  882.         "teicorpus": "application/tei+xml",
  883.         "tei": "application/tei+xml",
  884.         "ssml": "application/ssml+xml",
  885.         "ssdl": "application/ssdl+xml",
  886.         "sru": "application/sru+xml",
  887.         "grxml": "application/srgs+xml",
  888.         "gram": "application/srgs",
  889.         "srx": "application/sparql-results+xml",
  890.         "rq": "application/sparql-query",
  891.         "smil": "application/smil+xml",
  892.         "smi": "application/smil+xml",
  893.         "shf": "application/shf+xml",
  894.         "setreg": "application/set-registration-initiation",
  895.         "setpay": "application/set-payment-initiation",
  896.         "sdp": "application/sdp",
  897.         "spp": "application/scvp-vp-response",
  898.         "spq": "application/scvp-vp-request",
  899.         "scs": "application/scvp-cv-response",
  900.         "scq": "application/scvp-cv-request",
  901.         "sbml": "application/sbml+xml",
  902.         "rtf": "application/rtf",
  903.         "rss": "application/rss+xml",
  904.         "rsd": "application/rsd+xml",
  905.         "roa": "application/rpki-roa",
  906.         "mft": "application/rpki-manifest",
  907.         "gbr": "application/rpki-ghostbusters",
  908.         "rs": "application/rls-services+xml",
  909.         "rld": "application/resource-lists-diff+xml",
  910.         "rl": "application/resource-lists+xml",
  911.         "rnc": "application/relax-ng-compact-syntax",
  912.         "rif": "application/reginfo+xml",
  913.         "rdf": "application/rdf+xml",
  914.         "pskcxml": "application/pskc+xml",
  915.         "cww": "application/prs.cww",
  916.         "ps": "application/postscript",
  917.         "eps": "application/postscript",
  918.         "ai": "application/postscript",
  919.         "pls": "application/pls+xml",
  920.         "pki": "application/pkixcmp",
  921.         "pkipath": "application/pkix-pkipath",
  922.         "crl": "application/pkix-crl",
  923.         "cer": "application/pkix-cert",
  924.         "ac": "application/pkix-attr-cert",
  925.         "p8": "application/pkcs8",
  926.         "p7s": "application/pkcs7-signature",
  927.         "p7c": "application/pkcs7-mime",
  928.         "p7m": "application/pkcs7-mime",
  929.         "p10": "application/pkcs10",
  930.         "prf": "application/pics-rules",
  931.         "sig": "application/pgp-signature",
  932.         "asc": "application/pgp-signature",
  933.         "pgp": "application/pgp-encrypted",
  934.         "pdf": "application/pdf",
  935.         "xer": "application/patch-ops-error+xml",
  936.         "oxps": "application/oxps",
  937.         "onepkg": "application/onenote",
  938.         "onetmp": "application/onenote",
  939.         "onetoc2": "application/onenote",
  940.         "onetoc": "application/onenote",
  941.         "omdoc": "application/omdoc+xml",
  942.         "ogx": "application/ogg",
  943.         "opf": "application/oebps-package+xml",
  944.         "oda": "application/oda",
  945.         "deploy": "application/octet-stream",
  946.         "elc": "application/octet-stream",
  947.         "dump": "application/octet-stream",
  948.         "bpk": "application/octet-stream",
  949.         "pkg": "application/octet-stream",
  950.         "distz": "application/octet-stream",
  951.         "dist": "application/octet-stream",
  952.         "so": "application/octet-stream",
  953.         "mar": "application/octet-stream",
  954.         "lrf": "application/octet-stream",
  955.         "dms": "application/octet-stream",
  956.         "bin": "application/octet-stream",
  957.         "mxf": "application/mxf",
  958.         "dot": "application/msword",
  959.         "doc": "application/msword",
  960.         "mp4s": "application/mp4",
  961.         "mp21": "application/mp21",
  962.         "m21": "application/mp21",
  963.         "mods": "application/mods+xml",
  964.         "mets": "application/mets+xml",
  965.         "meta4": "application/metalink4+xml",
  966.         "metalink": "application/metalink+xml",
  967.         "mscml": "application/mediaservercontrol+xml",
  968.         "mbox": "application/mbox",
  969.         "mathml": "application/mathml+xml",
  970.         "mb": "application/mathematica",
  971.         "nb": "application/mathematica",
  972.         "ma": "application/mathematica",
  973.         "mrcx": "application/marcxml+xml",
  974.         "mrc": "application/marc",
  975.         "mads": "application/mads+xml",
  976.         "cpt": "application/mac-compactpro",
  977.         "hqx": "application/mac-binhex40",
  978.         "lostxml": "application/lost+xml",
  979.         "jsonml": "application/jsonml+json",
  980.         "json": "application/json",
  981.         "js": "application/javascript",
  982.         "class": "application/java-vm",
  983.         "ser": "application/java-serialized-object",
  984.         "jar": "application/java-archive",
  985.         "ipfix": "application/ipfix",
  986.         "inkml": "application/inkml+xml",
  987.         "ink": "application/inkml+xml",
  988.         "stk": "application/hyperstudio",
  989.         "gxf": "application/gxf",
  990.         "gpx": "application/gpx+xml",
  991.         "gml": "application/gml+xml",
  992.         "pfr": "application/font-tdpfr",
  993.         "exi": "application/exi",
  994.         "epub": "application/epub+zip",
  995.         "emma": "application/emma+xml",
  996.         "ecma": "application/ecmascript",
  997.         "xdssc": "application/dssc+xml",
  998.         "dssc": "application/dssc+der",
  999.         "dbk": "application/docbook+xml",
  1000.         "davmount": "application/davmount+xml",
  1001.         "cu": "application/cu-seeme",
  1002.         "cdmiq": "application/cdmi-queue",
  1003.         "cdmio": "application/cdmi-object",
  1004.         "cdmid": "application/cdmi-domain",
  1005.         "cdmic": "application/cdmi-container",
  1006.         "cdmia": "application/cdmi-capability",
  1007.         "ccxml": "application/ccxml+xml",
  1008.         "atomsvc": "application/atomsvc+xml",
  1009.         "atomcat": "application/atomcat+xml",
  1010.         "atom": "application/atom+xml",
  1011.         "aw": "application/applixware",
  1012.         "ez": "application/andrew-inset"
  1013.     };
  1014.  
  1015.     this.getMimeType = function(filename) {
  1016.         var matches = filename.match(/\.(\w+)$/);
  1017.  
  1018.         if (matches) {
  1019.             var extension = matches[1];
  1020.  
  1021.             if (extension in this.mimeTypes) {
  1022.                 return this.mimeTypes[extension];
  1023.             }
  1024.         }
  1025.  
  1026.         return null;
  1027.     }
  1028.  
  1029.     var routeMap = {};
  1030.  
  1031.     this.addRoute = function(method, rule, cb) {
  1032.         if (!(method in routeMap)) {
  1033.             routeMap[method] = [];
  1034.         }
  1035.  
  1036.         routeMap[method].push([rule, cb]);
  1037.     };
  1038.  
  1039.     this.get = function(rule, cb) {
  1040.         this.addRoute('GET', rule, cb);
  1041.     };
  1042.  
  1043.     this.post = function(rule, cb) {
  1044.         this.addRoute('POST', rule, cb);
  1045.     };
  1046.  
  1047.     this.put = function(rule, cb) {
  1048.         this.addRoute('PUT', rule, cb);
  1049.     };
  1050.  
  1051.     this.delete = function(rule, cb) {
  1052.         this.addRoute('DELETE', rule, cb);
  1053.     };
  1054.  
  1055.     var pageTemplate = '<!DOCTYPE html>\n\
  1056. <html>\n\
  1057.    <head>\n\
  1058.        <title>{{title}}</title>\n\
  1059.    </head>\n\
  1060.    <body>\n\
  1061.        <h1>{{heading}}</h1>\n\
  1062.        {{message}}\n\
  1063.        <hr><address>SimpleHttpServer/' + VERSION + '(Node.js) server at ' + host + ' port ' + port + '</address>\n\
  1064.    </body>\n\
  1065. </html>';
  1066.  
  1067.     function errPage(res, statusCode, msg) {            
  1068.         var status = http.STATUS_CODES[statusCode],
  1069.             content = _this.template(pageTemplate, {
  1070.                 title: statusCode + ' ' + status,
  1071.                 heading: status,
  1072.                 message: '<p>' + msg + '</p>'
  1073.             });
  1074.         res.writeHead(statusCode, {'Content-Type': 'text/html'});
  1075.         res.end(content);
  1076.     }
  1077.  
  1078.     var self = this,
  1079.         runned;
  1080.  
  1081.     this.run = function() {
  1082.         if (runned) {
  1083.             throw 'Server is already running';
  1084.         }
  1085.  
  1086.         runned = 1;
  1087.         var httpd = http.createServer(function(req, res) {
  1088.             if (self.allowedMethods.indexOf(req.method) == -1) {
  1089.                 return errPage(res, 501, 'HTTP request "' + req.method + '" method is not implemented.');
  1090.             }
  1091.  
  1092.             var length = parseInt(req.headers['content-length']);
  1093.  
  1094.             if (length && length > t.maxRequestLength) {
  1095.                 return errPage(res, 413, 'Maximum request length exceeded.');
  1096.             }              
  1097.  
  1098.             req.on('error', function(err) {
  1099.                 console.log(err.stack);
  1100.             });
  1101.  
  1102.             var received = 0;
  1103.             req.body = '';
  1104.  
  1105.             req.on('data', function(chunk) {
  1106.                 if ((received += chunk.length) > t.maxRequestLength) {
  1107.                     return this.destroy();
  1108.                 }
  1109.  
  1110.                 console.log('Received data: ' + chunk.length + ' bytes');
  1111.                 this.body += chunk;
  1112.             });
  1113.  
  1114.             req.on('end', function() {
  1115.                 var uri = decodeURI(req.url.split('?')[0]).replace(/[\\/]+/g, '/');
  1116.  
  1117.                 if (req.method in routeMap) {
  1118.                     var routes = routeMap[req.method],
  1119.                         i = routes.length,
  1120.                         route,
  1121.                         rule,
  1122.                         cb,
  1123.                         matches;
  1124.  
  1125.                     while (i--) {
  1126.                         route = routes[i];
  1127.                         rule = route[0];
  1128.                         cb = route[1];
  1129.  
  1130.                         if (rule instanceof RegExp) {
  1131.                             matches = uri.match(rule);
  1132.  
  1133.                             if (matches) {
  1134.                                 return cb.apply(null, [this, res].concat(matches.slice(1)));
  1135.                             }
  1136.                         }
  1137.                         else if (rule == uri) {
  1138.                             return cb(this, res);
  1139.                         }
  1140.                     }
  1141.                 }            
  1142.  
  1143.                 var path = self.webRoot + uri;
  1144.  
  1145.                 var err404 = function() {
  1146.                     errPage(res, 404, 'File or directory not found.');
  1147.                 };
  1148.  
  1149.                 var err500 = function() {
  1150.                     errPage(res, 500, 'An application error cccured.');
  1151.                 };
  1152.  
  1153.                 var sendFile = function(filename, info) {                  
  1154.                     var rs = fs.createReadStream(filename);
  1155.  
  1156.                     rs.on('error', function() {
  1157.                         console.log(err.stack);
  1158.                     });
  1159.  
  1160.                     rs.on('open', function() {
  1161.                         var mime = self.getMimeType(filename);
  1162.  
  1163.                         if (mime) {
  1164.                             res.setHeader('Content-Type', mime);
  1165.                         }
  1166.  
  1167.                         res.setHeader('Last-Modified', info.mtime.toUTCString());              
  1168.                         res.setHeader('Content-Length', info.size);
  1169.                     });
  1170.  
  1171.                     rs.pipe(res);
  1172.                 };
  1173.  
  1174.                 fs.exists(path, function(exists) {
  1175.                     if (!exists) {
  1176.                         return err404();
  1177.                     }
  1178.  
  1179.                     if (req.method != 'GET') {
  1180.                         return errPage(res, 405, 'HTTP request "' + req.method + '" method is not supported by this URL.');
  1181.                     }
  1182.  
  1183.                     fs.stat(path, function(err, stats) {
  1184.                         if (err) {
  1185.                             console.log(err.stack);
  1186.                             return;
  1187.                         }
  1188.  
  1189.                         if (stats.isFile()) {
  1190.                             if (/\/$/.test(uri)) {
  1191.                                 return err404();
  1192.                             }
  1193.  
  1194.                             return sendFile(path, stats);
  1195.                         }
  1196.                         else if (stats.isDirectory()) {
  1197.                             fs.readdir(path, function(err, files) {
  1198.                                 if (err) {
  1199.                                     console.log(err.stack);
  1200.                                     return;
  1201.                                 }
  1202.  
  1203.                                 var i = 0;
  1204.  
  1205.                                 while (i < self.indexFiles.length) {
  1206.                                     if (files.indexOf(self.indexFiles[i]) >= 0) {
  1207.                                         var filename = path + '/' + self.indexFiles[i];
  1208.  
  1209.                                         fs.stat(filename, function(err, stats) {
  1210.                                             if (stats && stats.isFile()) {
  1211.                                                 return sendFile(filename, stats);
  1212.                                             }
  1213.  
  1214.                                             err500();
  1215.                                         });
  1216.  
  1217.                                         return;
  1218.                                     }
  1219.  
  1220.                                     ++i;
  1221.                                 }
  1222.  
  1223.                                 if (!/\/$/.test(uri)) {
  1224.                                     uri += '/';
  1225.                                 }
  1226.  
  1227.                                 var content = _this.template(pageTemplate, {
  1228.                                     title: 'Directory listing',
  1229.                                     heading: 'Index of ' + uri,
  1230.                                     message: '<a href="' + uri.replace(/([^/]+)\/$/, '') + '">Dir Up</a><ul>'
  1231.                                         + files.map(function(_) {
  1232.                                             return '<li><a href="' + uri + encodeURIComponent(_)  + '">' + _ + '</a></li>';
  1233.                                         }).join('') + '</ul>'
  1234.                                 });
  1235.                                 res.writeHead(200, {'Content-Type': 'text/html'});
  1236.                                 res.end(content);
  1237.                             });
  1238.                         }
  1239.                         else {
  1240.                             errPage(res, 403, 'Access denied.');
  1241.                         }
  1242.                     });
  1243.                 })
  1244.             });
  1245.         });
  1246.  
  1247.         httpd.listen(port, host);
  1248.         console.log('Server running at http://%s:%s/', host, port);
  1249.     };
  1250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement