diff --git a/pom.xml b/pom.xml index a8ec515..3db28be 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.swisspush rest-mirror - 3.0.5-SNAPSHOT + 3.1.0-SNAPSHOT rest-mirror A verticle that mirrors resources, which are provided as zip into a rest storage. @@ -37,14 +37,6 @@ https://github.com/swisspush/vertx-rest-mirror.git - - - org.swisspush - rest-storage - 3.0.0 - - - io.vertx vertx-core @@ -60,25 +52,25 @@ commons-io commons-io - 2.4 + 2.15.1 compile commons-lang commons-lang - 2.4 + 2.6 compile org.slf4j slf4j-api - 1.7.6 + 2.0.10 compile org.slf4j - slf4j-log4j12 - 1.7.6 + slf4j-reload4j + 2.0.10 compile @@ -91,7 +83,7 @@ junit junit - 4.10 + 4.13.2 test @@ -101,9 +93,9 @@ test - com.jayway.restassured + io.rest-assured rest-assured - 2.4.1 + 5.4.0 test @@ -381,7 +373,7 @@ - 4.2.1 + 4.5.1 UTF8 https://oss.sonatype.org/content/repositories/snapshots/ diff --git a/src/main/java/org/swisspush/mirror/ZipEntryPutter.java b/src/main/java/org/swisspush/mirror/ZipEntryPutter.java index a1c3376..8dea242 100644 --- a/src/main/java/org/swisspush/mirror/ZipEntryPutter.java +++ b/src/main/java/org/swisspush/mirror/ZipEntryPutter.java @@ -9,7 +9,7 @@ import io.vertx.core.json.JsonObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.swisspush.reststorage.MimeTypeResolver; +import org.swisspush.mirror.util.MimeTypeResolver; import java.util.Map; diff --git a/src/main/java/org/swisspush/mirror/util/MimeTypeResolver.java b/src/main/java/org/swisspush/mirror/util/MimeTypeResolver.java new file mode 100644 index 0000000..ecd8509 --- /dev/null +++ b/src/main/java/org/swisspush/mirror/util/MimeTypeResolver.java @@ -0,0 +1,61 @@ +package org.swisspush.mirror.util; + +import org.slf4j.Logger; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import static org.slf4j.LoggerFactory.getLogger; + +public class MimeTypeResolver { + + private static final Logger log = getLogger(MimeTypeResolver.class); + private Map mimeTypes = new HashMap<>(); + + private final String defaultMimeType; + + public MimeTypeResolver(String defaultMimeType) { + this.defaultMimeType = defaultMimeType; + Properties props = new Properties(); + InputStream in = this.getClass().getClassLoader().getResourceAsStream("mime-types.properties"); + try { + props.load(in); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if(in != null) { + in.close(); + } + } catch (IOException ex) { + log.debug("close() failed", ex); + } + } + + for( Map.Entry entry : props.entrySet()) { + mimeTypes.put(((String)entry.getKey()).toLowerCase(), (String)entry.getValue()); + } + } + + public String resolveMimeType(String path) { + int lastSlash = path.lastIndexOf("/"); + String part = path; + if(lastSlash >= 0 && !path.endsWith("/")) { + part = part.substring(lastSlash+1); + } + int dot = part.lastIndexOf("."); + if(dot == -1 || part.endsWith(".")) { + return defaultMimeType; + } else { + String extension = part.substring(dot+1); + String type = mimeTypes.get(extension.toLowerCase()); + if(type==null) { + type = "text/plain"; + } + return type; + } + } +} diff --git a/src/main/resources/mime-types.properties b/src/main/resources/mime-types.properties new file mode 100644 index 0000000..bafe6c9 --- /dev/null +++ b/src/main/resources/mime-types.properties @@ -0,0 +1,684 @@ +3dml=text/vnd.in3d.3dml +3g2=video/3gpp2 +3gp=video/3gpp +7z=application/x-7z-compressed +aab=application/x-authorware-bin +aac=audio/x-aac +aam=application/x-authorware-map +aas=application/x-authorware-seg +abw=application/x-abiword +ac=application/pkix-attr-cert +acc=application/vnd.americandynamics.acc +ace=application/x-ace-compressed +acu=application/vnd.acucobol +adp=audio/adpcm +aep=application/vnd.audiograph +afp=application/vnd.ibm.modcap +ahead=application/vnd.ahead.space +ai=application/postscript +aif=audio/x-aiff +air=application/vnd.adobe.air-application-installer-package+zip +ait=application/vnd.dvb.ait +ami=application/vnd.amiga.ami +apk=application/vnd.android.package-archive +application=application/x-ms-application +apr=application/vnd.lotus-approach +asf=video/x-ms-asf +aso=application/vnd.accpac.simply.aso +atc=application/vnd.acucorp +atomcat=application/atomcat+xml +atomsvc=application/atomsvc+xml +atom, xml=application/atom+xml +atx=application/vnd.antix.game-component +au=audio/basic +avi=video/x-msvideo +aw=application/applixware +azf=application/vnd.airzip.filesecure.azf +azs=application/vnd.airzip.filesecure.azs +azw=application/vnd.amazon.ebook +bcpio=application/x-bcpio +bdf=application/x-font-bdf +bdm=application/vnd.syncml.dm+wbxml +bed=application/vnd.realvnc.bed +bh2=application/vnd.fujitsu.oasysprs +bin=application/octet-stream +bmi=application/vnd.bmi +bmp=image/bmp +box=application/vnd.previewsystems.box +btif=image/prs.btif +bz=application/x-bzip +bz2=application/x-bzip2 +c=text/x-c +c11amc=application/vnd.cluetrust.cartomobile-config +c11amz=application/vnd.cluetrust.cartomobile-config-pkg +c4g=application/vnd.clonk.c4group +cab=application/vnd.ms-cab-compressed +car=application/vnd.curl.car +cat=application/vnd.ms-pki.seccat +ccxml=application/ccxml+xml, +cdbcmsg=application/vnd.contact.cmsg +cdkey=application/vnd.mediastation.cdkey +cdmia=application/cdmi-capability +cdmic=application/cdmi-container +cdmid=application/cdmi-domain +cdmio=application/cdmi-object +cdmiq=application/cdmi-queue +cdx=chemical/x-cdx +cdxml=application/vnd.chemdraw+xml +cdy=application/vnd.cinderella +cer=application/pkix-cert +cgm=image/cgm +chat=application/x-chat +chm=application/vnd.ms-htmlhelp +chrt=application/vnd.kde.kchart +cif=chemical/x-cif +cii=application/vnd.anser-web-certificate-issue-initiation +cil=application/vnd.ms-artgalry +cla=application/vnd.claymore +class=application/java-vm +clkk=application/vnd.crick.clicker.keyboard +clkp=application/vnd.crick.clicker.palette +clkt=application/vnd.crick.clicker.template +clkw=application/vnd.crick.clicker.wordbank +clkx=application/vnd.crick.clicker +clp=application/x-msclip +cmc=application/vnd.cosmocaller +cmdf=chemical/x-cmdf +cml=chemical/x-cml +cmp=application/vnd.yellowriver-custom-menu +cmx=image/x-cmx +cod=application/vnd.rim.cod +cpio=application/x-cpio +cpt=application/mac-compactpro +crd=application/x-mscardfile +crl=application/pkix-crl +cryptonote=application/vnd.rig.cryptonote +csh=application/x-csh +csml=chemical/x-csml +csp=application/vnd.commonspace +css=text/css +csv=text/csv +cu=application/cu-seeme +curl=text/vnd.curl +cww=application/prs.cww +dae=model/vnd.collada+xml +daf=application/vnd.mobius.daf +davmount=application/davmount+xml +dcurl=text/vnd.curl.dcurl +dd2=application/vnd.oma.dd2+xml +ddd=application/vnd.fujixerox.ddd +deb=application/x-debian-package +der=application/x-x509-ca-cert +dfac=application/vnd.dreamfactory +dir=application/x-director +dis=application/vnd.mobius.dis +djvu=image/vnd.djvu +dna=application/vnd.dna +doc=application/msword +docm=application/vnd.ms-word.document.macroenabled.12 +docx=application/vnd.openxmlformats-officedocument.wordprocessingml.document +dotm=application/vnd.ms-word.template.macroenabled.12 +dotx=application/vnd.openxmlformats-officedocument.wordprocessingml.template +dp=application/vnd.osgi.dp +dpg=application/vnd.dpgraph +dra=audio/vnd.dra +dsc=text/prs.lines.tag +dssc=application/dssc+der +dtb=application/x-dtbook+xml +dtd=application/xml-dtd +dts=audio/vnd.dts +dtshd=audio/vnd.dts.hd +dvi=application/x-dvi +dwf=model/vnd.dwf +dwg=image/vnd.dwg +dxf=image/vnd.dxf +dxp=application/vnd.spotfire.dxp +ecelp4800=audio/vnd.nuera.ecelp4800 +ecelp7470=audio/vnd.nuera.ecelp7470 +ecelp9600=audio/vnd.nuera.ecelp9600 +edm=application/vnd.novadigm.edm +edx=application/vnd.novadigm.edx +efif=application/vnd.picsel +ei6=application/vnd.pg.osasli +eml=message/rfc822 +emma=application/emma+xml +eol=audio/vnd.digital-winds +eot=application/vnd.ms-fontobject +epub=application/epub+zip +es=application/ecmascript +es3=application/vnd.eszigno3+xml +esf=application/vnd.epson.esf +etx=text/x-setext +exe=application/x-msdownload +exi=application/exi +ext=application/vnd.novadigm.ext +ez2=application/vnd.ezpix-album +ez3=application/vnd.ezpix-package +f=text/x-fortran +f4v=video/x-f4v +fbs=image/vnd.fastbidsheet +fcs=application/vnd.isac.fcs +fdf=application/vnd.fdf +fe_launch=application/vnd.denovo.fcselayout-link +fg5=application/vnd.fujitsu.oasysgp +fh=image/x-freehand +fig=application/x-xfig +fli=video/x-fli +flo=application/vnd.micrografx.flo +flv=video/x-flv +flw=application/vnd.kde.kivio +flx=text/vnd.fmi.flexstor +fly=text/vnd.fly +fm=application/vnd.framemaker +fnc=application/vnd.frogans.fnc +fpx=image/vnd.fpx +fsc=application/vnd.fsc.weblaunch +fst=image/vnd.fst +ftc=application/vnd.fluxtime.clip +fti=application/vnd.anser-web-funds-transfer-initiation +fvt=video/vnd.fvt +fxp=application/vnd.adobe.fxp +fzs=application/vnd.fuzzysheet +g2w=application/vnd.geoplan +g3=image/g3fax +g3w=application/vnd.geospace +gac=application/vnd.groove-account +gdl=model/vnd.gdl +geo=application/vnd.dynageo +gex=application/vnd.geometry-explorer +ggb=application/vnd.geogebra.file +ggt=application/vnd.geogebra.tool +ghf=application/vnd.groove-help +gif=image/gif +gim=application/vnd.groove-identity-message +gmx=application/vnd.gmx +gnumeric=application/x-gnumeric +gph=application/vnd.flographit +gqf=application/vnd.grafeq +gram=application/srgs +grv=application/vnd.groove-injector +grxml=application/srgs+xml +gsf=application/x-font-ghostscript +gtar=application/x-gtar +gtm=application/vnd.groove-tool-message +gtw=model/vnd.gtw +gv=text/vnd.graphviz +gxt=application/vnd.geonext +gz=application/gzip +h261=video/h261 +h263=video/h263 +h264=video/h264 +hal=application/vnd.hal+xml +hbci=application/vnd.hbci +hdf=application/x-hdf +hlp=application/winhlp +hpgl=application/vnd.hp-hpgl +hpid=application/vnd.hp-hpid +hps=application/vnd.hp-hps +hqx=application/mac-binhex40 +htke=application/vnd.kenameaapp +html=text/html +hvd=application/vnd.yamaha.hv-dic +hvp=application/vnd.yamaha.hv-voice +hvs=application/vnd.yamaha.hv-script +i2g=application/vnd.intergeo +icc=application/vnd.iccprofile +ice=x-conference/x-cooltalk +ico=image/x-icon +ics=text/calendar +ief=image/ief +ifm=application/vnd.shana.informed.formdata +igl=application/vnd.igloader +igm=application/vnd.insors.igm +igs=model/iges +igx=application/vnd.micrografx.igx +iif=application/vnd.shana.informed.interchange +imp=application/vnd.accpac.simply.imp +ims=application/vnd.ms-ims +ipfix=application/ipfix +ipk=application/vnd.shana.informed.package +irm=application/vnd.ibm.rights-management +irp=application/vnd.irepository.package+xml +itp=application/vnd.shana.informed.formtemplate +ivp=application/vnd.immervision-ivp +ivu=application/vnd.immervision-ivu +jad=text/vnd.sun.j2me.app-descriptor +jam=application/vnd.jam +jar=application/java-archive +java=text/x-java-source,java +jisp=application/vnd.jisp +jlt=application/vnd.hp-jlyt +jnlp=application/x-java-jnlp-file +joda=application/vnd.joost.joda-archive +jpg=image/jpeg +jpgv=video/jpeg +jpm=video/jpm +js=application/javascript +json=application/json +karbon=application/vnd.kde.karbon +kfo=application/vnd.kde.kformula +kia=application/vnd.kidspiration +kml=application/vnd.google-earth.kml+xml +kmz=application/vnd.google-earth.kmz +kne=application/vnd.kinar +kon=application/vnd.kde.kontour +kpr=application/vnd.kde.kpresenter +ksp=application/vnd.kde.kspread +ktx=image/ktx +ktz=application/vnd.kahootz +kwd=application/vnd.kde.kword +lasxml=application/vnd.las.las+xml +latex=application/x-latex +lbd=application/vnd.llamagraphics.life-balance.desktop +lbe=application/vnd.llamagraphics.life-balance.exchange+xml +les=application/vnd.hhe.lesson-player +link66=application/vnd.route66.link66+xml +lrm=application/vnd.ms-lrm +ltf=application/vnd.frogans.ltf +lvp=audio/vnd.lucent.voice +lwp=application/vnd.lotus-wordpro +m21=application/mp21 +m3u=audio/x-mpegurl +m3u8=application/vnd.apple.mpegurl +m4v=video/x-m4v +ma=application/mathematica +mads=application/mads+xml +mag=application/vnd.ecowin.chart +mathml=application/mathml+xml +mbk=application/vnd.mobius.mbk +mbox=application/mbox +mc1=application/vnd.medcalcdata +mcd=application/vnd.mcd +mcurl=text/vnd.curl.mcurl +mdb=application/x-msaccess +mdi=image/vnd.ms-modi +meta4=application/metalink4+xml +mets=application/mets+xml +mfm=application/vnd.mfmp +mgp=application/vnd.osgeo.mapguide.package +mgz=application/vnd.proteus.magazine +mid=audio/midi +mif=application/vnd.mif +mj2=video/mj2 +mlp=application/vnd.dolby.mlp +mmd=application/vnd.chipnuts.karaoke-mmd +mmf=application/vnd.smaf +mmr=image/vnd.fujixerox.edmics-mmr +mny=application/x-msmoney +mods=application/mods+xml +movie=video/x-sgi-movie +mp4=application/mp4 +mp4=video/mp4 +mp4a=audio/mp4 +mpc=application/vnd.mophun.certificate +mpeg=video/mpeg +mpga=audio/mpeg +mpkg=application/vnd.apple.installer+xml +mpm=application/vnd.blueice.multipass +mpn=application/vnd.mophun.application +mpp=application/vnd.ms-project +mpy=application/vnd.ibm.minipay +mqy=application/vnd.mobius.mqy +mrc=application/marc +mrcx=application/marcxml+xml +mscml=application/mediaservercontrol+xml +mseq=application/vnd.mseq +msf=application/vnd.epson.msf +msh=model/mesh +msl=application/vnd.mobius.msl +msty=application/vnd.muvee.style +mts=model/vnd.mts +mus=application/vnd.musician +musicxml=application/vnd.recordare.musicxml+xml +mvb=application/x-msmediaview +mwf=application/vnd.mfer +mxf=application/mxf +mxl=application/vnd.recordare.musicxml +mxml=application/xv+xml +mxs=application/vnd.triscape.mxs +mxu=video/vnd.mpegurl +n3=text/n3 +N/A=application/andrew-inset +nbp=application/vnd.wolfram.player +nc=application/x-netcdf +ncx=application/x-dtbncx+xml +n-gage=application/vnd.nokia.n-gage.symbian.install +ngdat=application/vnd.nokia.n-gage.data +nlu=application/vnd.neurolanguage.nlu +nml=application/vnd.enliven +nnd=application/vnd.noblenet-directory +nns=application/vnd.noblenet-sealer +nnw=application/vnd.noblenet-web +npx=image/vnd.net-fpx +nsf=application/vnd.lotus-notes +oa2=application/vnd.fujitsu.oasys2 +oa3=application/vnd.fujitsu.oasys3 +oas=application/vnd.fujitsu.oasys +obd=application/x-msbinder +oda=application/oda +odb=application/vnd.oasis.opendocument.database +odc=application/vnd.oasis.opendocument.chart +odf=application/vnd.oasis.opendocument.formula +odft=application/vnd.oasis.opendocument.formula-template +odg=application/vnd.oasis.opendocument.graphics +odi=application/vnd.oasis.opendocument.image +odm=application/vnd.oasis.opendocument.text-master +odp=application/vnd.oasis.opendocument.presentation +ods=application/vnd.oasis.opendocument.spreadsheet +odt=application/vnd.oasis.opendocument.text +oga=audio/ogg +ogv=video/ogg +ogx=application/ogg +onetoc=application/onenote +opf=application/oebps-package+xml +org=application/vnd.lotus-organizer +osf=application/vnd.yamaha.openscoreformat +osfpvg=application/vnd.yamaha.openscoreformat.osfpvg+xml +otc=application/vnd.oasis.opendocument.chart-template +otf=application/x-font-otf +otg=application/vnd.oasis.opendocument.graphics-template +oth=application/vnd.oasis.opendocument.text-web +oti=application/vnd.oasis.opendocument.image-template +otp=application/vnd.oasis.opendocument.presentation-template +ots=application/vnd.oasis.opendocument.spreadsheet-template +ott=application/vnd.oasis.opendocument.text-template +oxt=application/vnd.openofficeorg.extension +p=text/x-pascal +p10=application/pkcs10 +p12=application/x-pkcs12 +p7b=application/x-pkcs7-certificates +p7m=application/pkcs7-mime +p7r=application/x-pkcs7-certreqresp +p7s=application/pkcs7-signature +p8=application/pkcs8 +par=text/plain-bas +paw=application/vnd.pawaafile +pbd=application/vnd.powerbuilder6 +pbm=image/x-portable-bitmap +pcf=application/x-font-pcf +pcl=application/vnd.hp-pcl +pclxl=application/vnd.hp-pclxl +pcurl=application/vnd.curl.pcurl +pcx=image/x-pcx +pdb=application/vnd.palm +pdf=application/pdf +pfa=application/x-font-type1 +pfr=application/font-tdpfr +pgm=image/x-portable-graymap +pgn=application/x-chess-pgn +pgp=application/pgp-signature +pic=image/x-pict +pki=application/pkixcmp +pkipath=application/pkix-pkipath +plb=application/vnd.3gpp.pic-bw-large +plc=application/vnd.mobius.plc +plf=application/vnd.pocketlearn +pls=application/pls+xml +pml=application/vnd.ctc-posml +png=image/png +pnm=image/x-portable-anymap +portpkg=application/vnd.macports.portpkg +potm=application/vnd.ms-powerpoint.template.macroenabled.12 +potx=application/vnd.openxmlformats-officedocument.presentationml.template +ppam=application/vnd.ms-powerpoint.addin.macroenabled.12 +ppd=application/vnd.cups-ppd +ppm=image/x-portable-pixmap +ppsm=application/vnd.ms-powerpoint.slideshow.macroenabled.12 +ppsx=application/vnd.openxmlformats-officedocument.presentationml.slideshow +ppt=application/vnd.ms-powerpoint +pptm=application/vnd.ms-powerpoint.presentation.macroenabled.12 +pptx=application/vnd.openxmlformats-officedocument.presentationml.presentation +prc=application/x-mobipocket-ebook +pre=application/vnd.lotus-freelance +prf=application/pics-rules +psb=application/vnd.3gpp.pic-bw-small +psd=image/vnd.adobe.photoshop +psf=application/x-font-linux-psf +pskcxml=application/pskc+xml +ptid=application/vnd.pvi.ptid1 +pub=application/x-mspublisher +pvb=application/vnd.3gpp.pic-bw-var +pwn=application/vnd.3m.post-it-notes +pya=audio/vnd.ms-playready.media.pya +pyv=video/vnd.ms-playready.media.pyv +qam=application/vnd.epson.quickanime +qbo=application/vnd.intu.qbo +qfx=application/vnd.intu.qfx +qps=application/vnd.publishare-delta-tree +qt=video/quicktime +qxd=application/vnd.quark.quarkxpress +ram=audio/x-pn-realaudio +rar=application/x-rar-compressed +ras=image/x-cmu-raster +rcprofile=application/vnd.ipunplugged.rcprofile +rdf=application/rdf+xml +rdz=application/vnd.data-vision.rdz +rep=application/vnd.businessobjects +res=application/x-dtbresource+xml +rgb=image/x-rgb +rif=application/reginfo+xml +rip=audio/vnd.rip +rl=application/resource-lists+xml +rlc=image/vnd.fujixerox.edmics-rlc +rld=application/resource-lists-diff+xml +rm=application/vnd.rn-realmedia +rmp=audio/x-pn-realaudio-plugin +rms=application/vnd.jcp.javame.midlet-rms +rnc=application/relax-ng-compact-syntax +rp9=application/vnd.cloanto.rp9 +rpss=application/vnd.nokia.radio-presets +rpst=application/vnd.nokia.radio-preset +rq=application/sparql-query +rs=application/rls-services+xml +rsd=application/rsd+xml +rss, xml=application/rss+xml +rtf=application/rtf +rtx=text/richtext +s=text/x-asm +saf=application/vnd.yamaha.smaf-audio +sbml=application/sbml+xml +sc=application/vnd.ibm.secure-container +scd=application/x-msschedule +scm=application/vnd.lotus-screencam +scq=application/scvp-cv-request +scs=application/scvp-cv-response +scurl=text/vnd.curl.scurl +sda=application/vnd.stardivision.draw +sdc=application/vnd.stardivision.calc +sdd=application/vnd.stardivision.impress +sdkm=application/vnd.solent.sdkm+xml +sdp=application/sdp +sdw=application/vnd.stardivision.writer +see=application/vnd.seemail +seed=application/vnd.fdsn.seed +sema=application/vnd.sema +semd=application/vnd.semd +semf=application/vnd.semf +ser=application/java-serialized-object +setpay=application/set-payment-initiation +setreg=application/set-registration-initiation +sfd-hdstx=application/vnd.hydrostatix.sof-data +sfs=application/vnd.spotfire.sfs +sgl=application/vnd.stardivision.writer-global +sgml=text/sgml +sh=application/x-sh +shar=application/x-shar +shf=application/shf+xml +sis=application/vnd.symbian.install +sit=application/x-stuffit +sitx=application/x-stuffitx +skp=application/vnd.koan +sldm=application/vnd.ms-powerpoint.slide.macroenabled.12 +sldx=application/vnd.openxmlformats-officedocument.presentationml.slide +slt=application/vnd.epson.salt +sm=application/vnd.stepmania.stepchart +smf=application/vnd.stardivision.math +smi=application/smil+xml +snf=application/x-font-snf +spf=application/vnd.yamaha.smaf-phrase +spl=application/x-futuresplash +spot=text/vnd.in3d.spot +spp=application/scvp-vp-response +spq=application/scvp-vp-request +src=application/x-wais-source +sru=application/sru+xml +srx=application/sparql-results+xml +sse=application/vnd.kodak-descriptor +ssf=application/vnd.epson.ssf +ssml=application/ssml+xml +st=application/vnd.sailingtracker.track +stc=application/vnd.sun.xml.calc.template +std=application/vnd.sun.xml.draw.template +stf=application/vnd.wt.stf +sti=application/vnd.sun.xml.impress.template +stk=application/hyperstudio +stl=application/vnd.ms-pki.stl +str=application/vnd.pg.format +stw=application/vnd.sun.xml.writer.template +sub=image/vnd.dvb.subtitle +sus=application/vnd.sus-calendar +sv4cpio=application/x-sv4cpio +sv4crc=application/x-sv4crc +svc=application/vnd.dvb.service +svd=application/vnd.svd +svg=image/svg+xml +swf=application/x-shockwave-flash +swi=application/vnd.aristanetworks.swi +sxc=application/vnd.sun.xml.calc +sxd=application/vnd.sun.xml.draw +sxg=application/vnd.sun.xml.writer.global +sxi=application/vnd.sun.xml.impress +sxm=application/vnd.sun.xml.math +sxw=application/vnd.sun.xml.writer +t=text/troff +tao=application/vnd.tao.intent-module-archive +tar=application/x-tar +tcap=application/vnd.3gpp2.tcap +tcl=application/x-tcl +teacher=application/vnd.smart.teacher +tei=application/tei+xml +tex=application/x-tex +texinfo=application/x-texinfo +tfi=application/thraud+xml +tfm=application/x-tex-tfm +tgz=application/gzip +thmx=application/vnd.ms-officetheme +tiff=image/tiff +tmo=application/vnd.tmobile-livetv +torrent=application/x-bittorrent +tpl=application/vnd.groove-tool-template +tpt=application/vnd.trid.tpt +tra=application/vnd.trueapp +trm=application/x-msterminal +tsd=application/timestamped-data +tsv=text/tab-separated-values +ttf=application/x-font-ttf +ttl=text/turtle +twd=application/vnd.simtech-mindmapper +txd=application/vnd.genomatix.tuxedo +txf=application/vnd.mobius.txf +txt=text/plain +ufd=application/vnd.ufdl +umj=application/vnd.umajin +unityweb=application/vnd.unity +uoml=application/vnd.uoml+xml +uri=text/uri-list +ustar=application/x-ustar +utz=application/vnd.uiq.theme +uu=text/x-uuencode +uva=audio/vnd.dece.audio +uvh=video/vnd.dece.hd +uvi=image/vnd.dece.graphic +uvm=video/vnd.dece.mobile +uvp=video/vnd.dece.pd +uvs=video/vnd.dece.sd +uvu=video/vnd.uvvu.mp4 +uvv=video/vnd.dece.video +vcd=application/x-cdlink +vcf=text/x-vcard +vcg=application/vnd.groove-vcard +vcs=text/x-vcalendar +vcx=application/vnd.vcx +vis=application/vnd.visionary +viv=video/vnd.vivo +vsd=application/vnd.visio +vsf=application/vnd.vsf +vtu=model/vnd.vtu +vxml=application/voicexml+xml +wad=application/x-doom +wav=audio/x-wav +wax=audio/x-ms-wax +wbmp=image/vnd.wap.wbmp +wbs=application/vnd.criticaltools.wbs+xml +wbxml=application/vnd.wap.wbxml +weba=audio/webm +webm=video/webm +webp=image/webp +wg=application/vnd.pmi.widget +wgt=application/widget +wm=video/x-ms-wm +wma=audio/x-ms-wma +wmd=application/x-ms-wmd +wmf=application/x-msmetafile +wml=text/vnd.wap.wml +wmlc=application/vnd.wap.wmlc +wmls=text/vnd.wap.wmlscript +wmlsc=application/vnd.wap.wmlscriptc +wmv=video/x-ms-wmv +wmx=video/x-ms-wmx +wmz=application/x-ms-wmz +woff=application/x-font-woff +wpd=application/vnd.wordperfect +wpl=application/vnd.ms-wpl +wps=application/vnd.ms-works +wqd=application/vnd.wqd +wri=application/x-mswrite +wrl=model/vrml +wsdl=application/wsdl+xml +wspolicy=application/wspolicy+xml +wtb=application/vnd.webturbo +wvx=video/x-ms-wvx +x3d=application/vnd.hzn-3d-crossword +xap=application/x-silverlight-app +xar=application/vnd.xara +xbap=application/x-ms-xbap +xbd=application/vnd.fujixerox.docuworks.binder +xbm=image/x-xbitmap +xdf=application/xcap-diff+xml +xdm=application/vnd.syncml.dm+xml +xdp=application/vnd.adobe.xdp+xml +xdssc=application/dssc+xml +xdw=application/vnd.fujixerox.docuworks +xenc=application/xenc+xml +xer=application/patch-ops-error+xml +xfdf=application/vnd.adobe.xfdf +xfdl=application/vnd.xfdl +xhtml=application/xhtml+xml +xif=image/vnd.xiff +xlam=application/vnd.ms-excel.addin.macroenabled.12 +xls=application/vnd.ms-excel +xlsb=application/vnd.ms-excel.sheet.binary.macroenabled.12 +xlsm=application/vnd.ms-excel.sheet.macroenabled.12 +xlsx=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +xltm=application/vnd.ms-excel.template.macroenabled.12 +xltx=application/vnd.openxmlformats-officedocument.spreadsheetml.template +xml=application/xml +xo=application/vnd.olpc-sugar +xop=application/xop+xml +xpi=application/x-xpinstall +xpm=image/x-xpixmap +xpr=application/vnd.is-xpr +xps=application/vnd.ms-xpsdocument +xpw=application/vnd.intercon.formnet +xslt=application/xslt+xml +xsm=application/vnd.syncml+xml +xspf=application/xspf+xml +xul=application/vnd.mozilla.xul+xml +xwd=image/x-xwindowdump +xyz=chemical/x-xyz +yang=application/yang +yin=application/yin+xml +zaz=application/vnd.zzazz.deck+xml +zip=application/zip +zir=application/vnd.zul +zmm=application/vnd.handheld-entertainment+xml \ No newline at end of file diff --git a/src/test/java/org/swisspush/mirror/util/MimeTypeResolverTest.java b/src/test/java/org/swisspush/mirror/util/MimeTypeResolverTest.java new file mode 100644 index 0000000..7a3ad4b --- /dev/null +++ b/src/test/java/org/swisspush/mirror/util/MimeTypeResolverTest.java @@ -0,0 +1,33 @@ +package org.swisspush.mirror.util; + +import org.junit.Assert; +import org.junit.Test; + +public class MimeTypeResolverTest { + + private final MimeTypeResolver mimeTypeResolver = new MimeTypeResolver("gugus/gaga"); + + @Test + public void testDefault() { + String s = mimeTypeResolver.resolveMimeType("/aaa/bbb/ccc");// no file extension --> default + Assert.assertEquals("Default-MimeType", "gugus/gaga", s); + } + + @Test + public void testUnknownFileExtension() { + String s = mimeTypeResolver.resolveMimeType("/aaa/bbb/ccc.i_am_an_unknown_file_extension");// unknown extension --> text/plain + Assert.assertEquals("Default-MimeType", "text/plain", s); + } + + @Test + public void testJson() { + String s = mimeTypeResolver.resolveMimeType("/aaa/bbb/ccc.json"); + Assert.assertEquals("Default-MimeType", "application/json", s); + } + + @Test + public void testTarGz() { + String s = mimeTypeResolver.resolveMimeType("/aaa/bbb/ccc.tar.gz"); + Assert.assertEquals("Default-MimeType", "application/gzip", s); + } +}