diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala index 1c46e03..3b21bc0 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/app/AccountController.scala @@ -23,7 +23,7 @@ get("/:userName") { val userName = params("userName") getAccountByUserName(userName) match { - case Some(a) => account.html.userinfo(a, getRepositoriesOfUser(userName, servletContext)) + case Some(a) => account.html.userinfo(a, getRepositoriesOfUser(userName, baseUrl)) case None => NotFound() } } diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index 7592c5f..3192c64 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -29,6 +29,14 @@ protected def NotFound() = html.error("Not Found") protected def Unauthorized() = redirect("/") + protected def baseUrl = { + println(request.getRequestURL.toString) + println(request.getRequestURI) + val url = request.getRequestURL.toString + println(url.substring(0, url.length - request.getRequestURI.length)) + url.substring(0, url.length - request.getRequestURI.length) + } + } case class Context(path: String, loginAccount: Option[Account]) \ No newline at end of file diff --git a/src/main/scala/app/CreateRepositoryController.scala b/src/main/scala/app/CreateRepositoryController.scala index bb15ff0..53ce27a 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -87,7 +87,7 @@ def validate(name: String, value: String): Option[String] = { if(!value.matches("^[a-zA-Z0-9\\-_]+$")){ Some("Repository name contains invalid character.") - } else if(getRepositoriesOfUser(context.loginAccount.get.userName, servletContext).contains(value)){ + } else if(getRepositoriesOfUser(context.loginAccount.get.userName, baseUrl).contains(value)){ Some("Repository already exists.") } else { None diff --git a/src/main/scala/app/IndexController.scala b/src/main/scala/app/IndexController.scala index 8b51091..ddf888d 100644 --- a/src/main/scala/app/IndexController.scala +++ b/src/main/scala/app/IndexController.scala @@ -7,7 +7,7 @@ trait IndexControllerBase extends ControllerBase { self: RepositoryService => get("/"){ - html.index(getAccessibleRepositories(context.loginAccount, servletContext)) + html.index(getAccessibleRepositories(context.loginAccount, baseUrl)) } } \ No newline at end of file diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index d4371e2..814a00b 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -8,15 +8,15 @@ trait IssuesControllerBase extends ControllerBase { self: RepositoryService => get("/:owner/:repository/issues"){ - issues.html.issues(getRepository(params("owner"), params("repository"), servletContext).get) + issues.html.issues(getRepository(params("owner"), params("repository"), baseUrl).get) } get("/:owner/:repository/issues/:id"){ - issues.html.issue(getRepository(params("owner"), params("repository"), servletContext).get) + issues.html.issue(getRepository(params("owner"), params("repository"), baseUrl).get) } get("/:owner/:repository/issues/new"){ - issues.html.issueedit(getRepository(params("owner"), params("repository"), servletContext).get) + issues.html.issueedit(getRepository(params("owner"), params("repository"), baseUrl).get) } post("/:owner/:repository/issues"){ diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index 5e9878e..7bb93bf 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -32,7 +32,7 @@ val enableIssueLink = params("enableIssueLink").toBoolean contentType = "text/html" - view.helpers.markdown(content, getRepository(owner, repository, servletContext).get, + view.helpers.markdown(content, getRepository(owner, repository, baseUrl).get, enableWikiLink, enableCommitLink, enableIssueLink) }) @@ -78,7 +78,7 @@ JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30) - repo.html.commits(Nil, branchName, getRepository(owner, repository, servletContext).get, + repo.html.commits(Nil, branchName, getRepository(owner, repository, baseUrl).get, logs.splitWith{ (commit1, commit2) => view.helpers.date(commit1.time) == view.helpers.date(commit2.time) }, page, hasNext) @@ -98,7 +98,7 @@ JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30, path) - repo.html.commits(path.split("/").toList, branchName, getRepository(owner, repository, servletContext).get, + repo.html.commits(path.split("/").toList, branchName, getRepository(owner, repository, baseUrl).get, logs.splitWith{ (commit1, commit2) => view.helpers.date(commit1.time) == view.helpers.date(commit2.time) }, page, hasNext) @@ -114,7 +114,7 @@ val id = params("id") // branch name or commit id val raw = params.get("raw").getOrElse("false").toBoolean val path = multiParams("splat").head //.replaceFirst("^tree/.+?/", "") - val repositoryInfo = getRepository(owner, repository, servletContext).get + val repositoryInfo = getRepository(owner, repository, baseUrl).get JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) @@ -158,7 +158,7 @@ JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) repo.html.commit(id, new JGitUtil.CommitInfo(revCommit), - getRepository(owner, repository, servletContext).get, JGitUtil.getDiffs(git, id)) + getRepository(owner, repository, baseUrl).get, JGitUtil.getDiffs(git, id)) } }) @@ -169,7 +169,7 @@ val owner = params("owner") val repository = params("repository") - repo.html.tags(getRepository(owner, repository, servletContext).get) + repo.html.tags(getRepository(owner, repository, baseUrl).get) }) /** @@ -223,7 +223,7 @@ * @return HTML of the file list */ private def fileList(owner: String, repository: String, revstr: String = "", path: String = ".") = { - getRepository(owner, repository, servletContext) match { + getRepository(owner, repository, baseUrl) match { case None => NotFound() case Some(repositoryInfo) => { val revision = if(revstr.isEmpty){ diff --git a/src/main/scala/app/SettingsController.scala b/src/main/scala/app/SettingsController.scala index a4fef9e..ee8e0a0 100644 --- a/src/main/scala/app/SettingsController.scala +++ b/src/main/scala/app/SettingsController.scala @@ -43,7 +43,7 @@ val owner = params("owner") val repository = params("repository") - getRepository(owner, repository, servletContext) match { + getRepository(owner, repository, baseUrl) match { case Some(r) => settings.html.options(r) case None => NotFound() } @@ -69,7 +69,7 @@ val owner = params("owner") val repository = params("repository") - getRepository(owner, repository, servletContext) match { + getRepository(owner, repository, baseUrl) match { case Some(r) => settings.html.collaborators(getCollaborators(owner, repository), r) case None => NotFound() } @@ -105,7 +105,7 @@ val owner = params("owner") val repository = params("repository") - getRepository(owner, repository, servletContext) match { + getRepository(owner, repository, baseUrl) match { case Some(r) => settings.html.delete(r) case None => NotFound() } diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index f6a4f71..1191087 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -33,7 +33,7 @@ val repository = params("repository") getWikiPage(owner, repository, "Home") match { - case Some(page) => wiki.html.wiki("Home", page, getRepository(owner, repository, servletContext).get, isWritable(owner, repository)) + case Some(page) => wiki.html.wiki("Home", page, getRepository(owner, repository, baseUrl).get, isWritable(owner, repository)) case None => redirect("/%s/%s/wiki/Home/_edit".format(owner, repository)) } }) @@ -44,7 +44,7 @@ val pageName = params("page") getWikiPage(owner, repository, pageName) match { - case Some(page) => wiki.html.wiki(pageName, page, getRepository(owner, repository, servletContext).get, isWritable(owner, repository)) + case Some(page) => wiki.html.wiki(pageName, page, getRepository(owner, repository, baseUrl).get, isWritable(owner, repository)) case None => redirect("/%s/%s/wiki/%s/_edit".format(owner, repository, pageName)) // TODO URLEncode } }) @@ -56,7 +56,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikihistory(Some(page), - JGitUtil.getCommitLog(git, "master", path = page + ".md")._1, getRepository(owner, repository, servletContext).get) + JGitUtil.getCommitLog(git, "master", path = page + ".md")._1, getRepository(owner, repository, baseUrl).get) } }) @@ -68,7 +68,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikicompare(Some(page), - getWikiDiffs(git, commitId(0), commitId(1)), getRepository(owner, repository, servletContext).get) + getWikiDiffs(git, commitId(0), commitId(1)), getRepository(owner, repository, baseUrl).get) } }) @@ -79,7 +79,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikicompare(None, - getWikiDiffs(git, commitId(0), commitId(1)), getRepository(owner, repository, servletContext).get) + getWikiDiffs(git, commitId(0), commitId(1)), getRepository(owner, repository, baseUrl).get) } }) @@ -89,7 +89,7 @@ val page = params("page") wiki.html.wikiedit(page, - getWikiPage(owner, repository, page), getRepository(owner, repository, servletContext).get) + getWikiPage(owner, repository, page), getRepository(owner, repository, baseUrl).get) }) post("/:owner/:repository/wiki/_edit", editForm)(writableRepository { form => @@ -106,7 +106,7 @@ val owner = params("owner") val repository = params("repository") - wiki.html.wikiedit("", None, getRepository(owner, repository, servletContext).get) + wiki.html.wikiedit("", None, getRepository(owner, repository, baseUrl).get) }) post("/:owner/:repository/wiki/_new", newForm)(writableRepository { form => @@ -133,7 +133,7 @@ val owner = params("owner") val repository = params("repository") - wiki.html.wikipages(getWikiPageList(owner, repository), getRepository(owner, repository, servletContext).get, isWritable(owner, repository)) + wiki.html.wikipages(getWikiPageList(owner, repository), getRepository(owner, repository, baseUrl).get, isWritable(owner, repository)) }) get("/:owner/:repository/wiki/_history")(readableRepository { @@ -142,7 +142,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikihistory(None, - JGitUtil.getCommitLog(git, "master")._1, getRepository(owner, repository, servletContext).get) + JGitUtil.getCommitLog(git, "master")._1, getRepository(owner, repository, baseUrl).get) } }) diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index a2c0b67..85a2b69 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -56,10 +56,10 @@ * Returns the list of specified user's repositories information. * * @param userName the user name - * @param servletContext the servlet context + * @param baseUrl the base url of this application * @return the list of repository information which is sorted in descending order of lastActivityDate. */ - def getRepositoriesOfUser(userName: String, servletContext: ServletContext): List[RepositoryInfo] = { + def getRepositoriesOfUser(userName: String, baseUrl: String): List[RepositoryInfo] = { val q1 = Repositories .filter { r => r.userName is userName.bind } .map { r => r } @@ -70,7 +70,7 @@ .map { case (c, r) => r } q1.union(q2).sortBy(_.lastActivityDate).list map { repository => - val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, servletContext) + val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl) RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, repository, repositoryInfo.branchList, repositoryInfo.tags) } } @@ -80,14 +80,14 @@ * * @param userName the user name of the repository owner * @param repositoryName the repository name - * @param servletContext the servlet context + * @param baseUrl the base url of this application * @return the repository information */ - def getRepository(userName: String, repositoryName: String, servletContext: ServletContext): Option[RepositoryInfo] = { + def getRepository(userName: String, repositoryName: String, baseUrl: String): Option[RepositoryInfo] = { (Query(Repositories) filter { repository => (repository.userName is userName.bind) && (repository.repositoryName is repositoryName.bind) } firstOption) map { repository => - val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, servletContext) + val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl) RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, repository, repositoryInfo.branchList, repositoryInfo.tags) } } @@ -96,15 +96,15 @@ * Returns the list of accessible repositories information for the specified account user. * * @param account the account - * @param servletContext the servlet context + * @param baseUrl the base url of this application * @return the repository informations which is sorted in descending order of lastActivityDate. */ - def getAccessibleRepositories(account: Option[Account], servletContext: ServletContext): List[RepositoryInfo] = { + def getAccessibleRepositories(account: Option[Account], baseUrl: String): List[RepositoryInfo] = { account match { // for Administrators case Some(x) if(x.userType == AccountService.Administrator) => { (Query(Repositories) sortBy(_.lastActivityDate desc) list) map { repository => - val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, servletContext) + val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl) RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, repository, repositoryInfo.branchList, repositoryInfo.tags) } } @@ -112,14 +112,14 @@ case Some(x) if(x.userType == AccountService.Normal) => { // TODO only repositories registered as collaborator (Query(Repositories) sortBy(_.lastActivityDate desc) list) map { repository => - val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, servletContext) + val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl) RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, repository, repositoryInfo.branchList, repositoryInfo.tags) } } // for Guests case None => { (Query(Repositories) filter(_.repositoryType is Public.bind) sortBy(_.lastActivityDate desc) list) map { repository => - val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, servletContext) + val repositoryInfo = JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl) RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, repository, repositoryInfo.branchList, repositoryInfo.tags) } } diff --git a/src/main/scala/servlet/BasicAuthenticationFilter.scala b/src/main/scala/servlet/BasicAuthenticationFilter.scala index 3f6c0af..71bc7e4 100644 --- a/src/main/scala/servlet/BasicAuthenticationFilter.scala +++ b/src/main/scala/servlet/BasicAuthenticationFilter.scala @@ -25,7 +25,7 @@ val repositoryOwner = paths(2) val repositoryName = paths(3).replaceFirst("\\.git$", "") - getRepository(repositoryOwner, repositoryName.replaceFirst("\\.wiki", ""), request.getServletContext) match { + getRepository(repositoryOwner, repositoryName.replaceFirst("\\.wiki", ""), "") match { case Some(repository) => { if(!request.getRequestURI.endsWith("/git-receive-pack") && repository.repository.repositoryType == RepositoryService.Public){ diff --git a/src/main/scala/util/Authenticator.scala b/src/main/scala/util/Authenticator.scala index 5b139c8..93aae60 100644 --- a/src/main/scala/util/Authenticator.scala +++ b/src/main/scala/util/Authenticator.scala @@ -85,7 +85,7 @@ private def authenticate(action: => Any) = { { val paths = request.getRequestURI.split("/") - getRepository(paths(1), paths(2), servletContext) match { + getRepository(paths(1), paths(2), baseUrl) match { case None => NotFound() case Some(repository) => if(repository.repository.repositoryType == RepositoryService.Public){ diff --git a/src/main/scala/util/JGitUtil.scala b/src/main/scala/util/JGitUtil.scala index 9527e57..bd0cc94 100644 --- a/src/main/scala/util/JGitUtil.scala +++ b/src/main/scala/util/JGitUtil.scala @@ -110,10 +110,10 @@ /** * Returns the repository information. It contains branch names and tag names. */ - def getRepositoryInfo(owner: String, repository: String, servletContext: ServletContext): RepositoryInfo = { + def getRepositoryInfo(owner: String, repository: String, baseUrl: String): RepositoryInfo = { withGit(getRepositoryDir(owner, repository)){ git => RepositoryInfo( - owner, repository, "http://localhost:8080%s/git/%s/%s.git".format(servletContext.getContextPath, owner, repository), + owner, repository, baseUrl + "/git/%s/%s.git".format(owner, repository), // branches git.branchList.call.asScala.map { ref => ref.getName.replaceFirst("^refs/heads/", "")