diff --git a/src/main/scala/service/WebHookService.scala b/src/main/scala/service/WebHookService.scala index fd4260c..011af44 100644 --- a/src/main/scala/service/WebHookService.scala +++ b/src/main/scala/service/WebHookService.scala @@ -37,6 +37,7 @@ import org.apache.http.impl.client.DefaultHttpClient import scala.concurrent._ import ExecutionContext.Implicits.global + logger.debug("start callWebHook") implicit val formats = Serialization.formats(NoTypeHints) @@ -48,16 +49,16 @@ webHookURLs.foreach { webHookUrl => val f = future { - logger.debug("start web hook invocation for %s", webHookUrl) + logger.debug(s"start web hook invocation for ${webHookUrl}") val httpPost = new HttpPost(webHookUrl.url) val params: java.util.List[NameValuePair] = new java.util.ArrayList() params.add(new BasicNameValuePair("payload", json)) - httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)) + httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")) httpClient.execute(httpPost) httpPost.releaseConnection() - logger.debug("end web hook invocation for %s", webHookUrl) + logger.debug(s"end web hook invocation for ${webHookUrl}") } f.onSuccess { case s => logger.debug(s"Success: web hook request to ${webHookUrl.url}") diff --git a/src/main/scala/servlet/BasicAuthenticationFilter.scala b/src/main/scala/servlet/BasicAuthenticationFilter.scala index ad8a836..16c516c 100644 --- a/src/main/scala/servlet/BasicAuthenticationFilter.scala +++ b/src/main/scala/servlet/BasicAuthenticationFilter.scala @@ -28,8 +28,8 @@ } try { - defining(request.paths.toSeq){ case (repositoryOwner :: repositoryName :: _) => - getRepository(repositoryOwner, repositoryName.replaceFirst("\\.wiki", ""), "") match { + defining(request.paths){ case Array(_, repositoryOwner, repositoryName, _*) => + getRepository(repositoryOwner, repositoryName.replaceFirst("\\.wiki\\.git$|\\.git$", ""), "") match { case Some(repository) => { if(!request.getRequestURI.endsWith("/git-receive-pack") && !"service=git-receive-pack".equals(request.getQueryString) && !repository.repository.isPrivate){ @@ -47,7 +47,10 @@ } } } - case None => response.sendError(HttpServletResponse.SC_NOT_FOUND) + case None => { + logger.debug(s"Repository ${repositoryOwner}/${repositoryName} is not found.") + response.sendError(HttpServletResponse.SC_NOT_FOUND) + } } } } catch { diff --git a/src/main/scala/servlet/GitRepositoryServlet.scala b/src/main/scala/servlet/GitRepositoryServlet.scala index 309b025..f7b2172 100644 --- a/src/main/scala/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/servlet/GitRepositoryServlet.scala @@ -61,8 +61,8 @@ logger.debug("userName:" + userName) defining(request.paths){ paths => - val owner = paths(2) - val repository = paths(3).replaceFirst("\\.git$", "") + val owner = paths(1) + val repository = paths(2).replaceFirst("\\.git$", "") val baseURL = request.getRequestURL.toString.replaceFirst("/git/.*", "") logger.debug("repository:" + owner + "/" + repository) diff --git a/src/main/scala/util/Authenticator.scala b/src/main/scala/util/Authenticator.scala index 78a8e1b..c524713 100644 --- a/src/main/scala/util/Authenticator.scala +++ b/src/main/scala/util/Authenticator.scala @@ -18,7 +18,7 @@ defining(request.paths){ paths => context.loginAccount match { case Some(x) if(x.isAdmin) => action - case Some(x) if(paths(1) == x.userName) => action + case Some(x) if(paths(0) == x.userName) => action case _ => Unauthorized() } } @@ -36,7 +36,7 @@ private def authenticate(action: (RepositoryInfo) => Any) = { { defining(request.paths){ paths => - getRepository(paths(1), paths(2), baseUrl).map { repository => + getRepository(paths(0), paths(1), baseUrl).map { repository => context.loginAccount match { case Some(x) if(x.isAdmin) => action(repository) case Some(x) if(repository.owner == x.userName) => action(repository) @@ -92,11 +92,11 @@ private def authenticate(action: (RepositoryInfo) => Any) = { { defining(request.paths){ paths => - getRepository(paths(1), paths(2), baseUrl).map { repository => + getRepository(paths(0), paths(1), baseUrl).map { repository => context.loginAccount match { case Some(x) if(x.isAdmin) => action(repository) - case Some(x) if(paths(1) == x.userName) => action(repository) - case Some(x) if(getCollaborators(paths(1), paths(2)).contains(x.userName)) => action(repository) + case Some(x) if(paths(0) == x.userName) => action(repository) + case Some(x) if(getCollaborators(paths(0), paths(1)).contains(x.userName)) => action(repository) case _ => Unauthorized() } } getOrElse NotFound() @@ -115,14 +115,14 @@ private def authenticate(action: (RepositoryInfo) => Any) = { { defining(request.paths){ paths => - getRepository(paths(1), paths(2), baseUrl).map { repository => + getRepository(paths(0), paths(1), baseUrl).map { repository => if(!repository.repository.isPrivate){ action(repository) } else { context.loginAccount match { case Some(x) if(x.isAdmin) => action(repository) - case Some(x) if(paths(1) == x.userName) => action(repository) - case Some(x) if(getCollaborators(paths(1), paths(2)).contains(x.userName)) => action(repository) + case Some(x) if(paths(0) == x.userName) => action(repository) + case Some(x) if(getCollaborators(paths(0), paths(1)).contains(x.userName)) => action(repository) case _ => Unauthorized() } } @@ -142,12 +142,12 @@ private def authenticate(action: (RepositoryInfo) => Any) = { { defining(request.paths){ paths => - getRepository(paths(1), paths(2), baseUrl).map { repository => + getRepository(paths(0), paths(1), baseUrl).map { repository => context.loginAccount match { case Some(x) if(x.isAdmin) => action(repository) case Some(x) if(!repository.repository.isPrivate) => action(repository) - case Some(x) if(paths(1) == x.userName) => action(repository) - case Some(x) if(getCollaborators(paths(1), paths(2)).contains(x.userName)) => action(repository) + case Some(x) if(paths(0) == x.userName) => action(repository) + case Some(x) if(getCollaborators(paths(0), paths(1)).contains(x.userName)) => action(repository) case _ => Unauthorized() } } getOrElse NotFound() diff --git a/src/main/scala/util/Implicits.scala b/src/main/scala/util/Implicits.scala index 957a030..cc7c018 100644 --- a/src/main/scala/util/Implicits.scala +++ b/src/main/scala/util/Implicits.scala @@ -45,7 +45,7 @@ implicit class RichRequest(request: HttpServletRequest){ - def paths: Array[String] = request.getRequestURI.substring(request.getContextPath.length).split("/") + def paths: Array[String] = request.getRequestURI.substring(request.getContextPath.length + 1).split("/") def hasQueryString: Boolean = request.getQueryString != null