diff --git a/project/build.scala b/project/build.scala index 1337898..3034720 100644 --- a/project/build.scala +++ b/project/build.scala @@ -56,6 +56,7 @@ "org.apache.commons" % "commons-email" % "1.3.3", "org.apache.httpcomponents" % "httpclient" % "4.3.6", "org.apache.sshd" % "apache-sshd" % "0.11.0", + "org.apache.tika" % "tika-core" % "1.10", "com.typesafe.slick" %% "slick" % "2.1.0", "com.novell.ldap" % "jldap" % "2009-10-07", "com.h2database" % "h2" % "1.4.180", diff --git a/src/main/scala/gitbucket/core/util/FileUtil.scala b/src/main/scala/gitbucket/core/util/FileUtil.scala index 8dd8aae..f753a60 100644 --- a/src/main/scala/gitbucket/core/util/FileUtil.scala +++ b/src/main/scala/gitbucket/core/util/FileUtil.scala @@ -1,7 +1,7 @@ package gitbucket.core.util import org.apache.commons.io.FileUtils -import java.net.URLConnection +import org.apache.tika.Tika import java.io.File import ControlUtil._ import scala.util.Random @@ -9,8 +9,8 @@ object FileUtil { def getMimeType(name: String): String = - defining(URLConnection.getFileNameMap()){ fileNameMap => - fileNameMap.getContentTypeFor(name) match { + defining(new Tika()){ tika => + tika.detect(name) match { case null => "application/octet-stream" case mimeType => mimeType } @@ -28,11 +28,7 @@ def isImage(name: String): Boolean = getMimeType(name).startsWith("image/") - def isUploadableType(name: String): Boolean = getMimeType(name) match { - case t if t.startsWith("image/") => true - case "application/pdf" => true - case _ => false - } + def isUploadableType(name: String): Boolean = mimeTypeWhiteList contains getMimeType(name) def isLarge(size: Long): Boolean = (size > 1024 * 1000) @@ -56,4 +52,14 @@ FileUtils.deleteDirectory(dir) } } + + val mimeTypeWhiteList: Array[String] = Array( + "application/pdf", + "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "image/gif", + "image/jpeg", + "image/png", + "text/plain") } diff --git a/src/main/twirl/gitbucket/core/helper/attached.scala.html b/src/main/twirl/gitbucket/core/helper/attached.scala.html index 94b5af8..b961c8e 100644 --- a/src/main/twirl/gitbucket/core/helper/attached.scala.html +++ b/src/main/twirl/gitbucket/core/helper/attached.scala.html @@ -1,5 +1,6 @@ @(owner: String, repository: String)(textarea: Html)(implicit context: gitbucket.core.controller.Context) @import context._ +@import gitbucket.core.util.FileUtil