You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GitBlitWebApp.java 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.gitblit.wicket;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. import java.util.List;
  6. import javax.servlet.http.Cookie;
  7. import javax.servlet.http.HttpServletRequest;
  8. import org.apache.wicket.Application;
  9. import org.apache.wicket.Page;
  10. import org.apache.wicket.Request;
  11. import org.apache.wicket.Response;
  12. import org.apache.wicket.Session;
  13. import org.apache.wicket.protocol.http.WebApplication;
  14. import org.apache.wicket.protocol.http.WebResponse;
  15. import org.apache.wicket.protocol.http.request.urlcompressing.UrlCompressingWebRequestProcessor;
  16. import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
  17. import org.apache.wicket.request.IRequestCycleProcessor;
  18. import org.apache.wicket.request.target.coding.MixedParamUrlCodingStrategy;
  19. import org.eclipse.jgit.errors.RepositoryNotFoundException;
  20. import org.eclipse.jgit.http.server.resolver.FileResolver;
  21. import org.eclipse.jgit.http.server.resolver.ServiceNotEnabledException;
  22. import org.eclipse.jgit.lib.Repository;
  23. import org.slf4j.Logger;
  24. import org.slf4j.LoggerFactory;
  25. import com.gitblit.Constants;
  26. import com.gitblit.GitBlitServer;
  27. import com.gitblit.StoredSettings;
  28. import com.gitblit.utils.JGitUtils;
  29. import com.gitblit.wicket.models.RepositoryModel;
  30. import com.gitblit.wicket.pages.BlobDiffPage;
  31. import com.gitblit.wicket.pages.BlobPage;
  32. import com.gitblit.wicket.pages.BranchesPage;
  33. import com.gitblit.wicket.pages.CommitDiffPage;
  34. import com.gitblit.wicket.pages.CommitPage;
  35. import com.gitblit.wicket.pages.LogPage;
  36. import com.gitblit.wicket.pages.PatchPage;
  37. import com.gitblit.wicket.pages.RawPage;
  38. import com.gitblit.wicket.pages.RepositoriesPage;
  39. import com.gitblit.wicket.pages.SummaryPage;
  40. import com.gitblit.wicket.pages.TagPage;
  41. import com.gitblit.wicket.pages.TagsPage;
  42. import com.gitblit.wicket.pages.TicGitPage;
  43. import com.gitblit.wicket.pages.TicGitTicketPage;
  44. import com.gitblit.wicket.pages.TreePage;
  45. public class GitBlitWebApp extends WebApplication {
  46. Logger logger = LoggerFactory.getLogger(GitBlitWebApp.class);
  47. FileResolver repositoryResolver;
  48. private File repositories;
  49. private boolean exportAll;
  50. @Override
  51. public void init() {
  52. super.init();
  53. // Setup page authorization mechanism
  54. if (StoredSettings.getBoolean("authenticateWebUI", false)) {
  55. AuthorizationStrategy authStrategy = new AuthorizationStrategy();
  56. getSecuritySettings().setAuthorizationStrategy(authStrategy);
  57. getSecuritySettings().setUnauthorizedComponentInstantiationListener(authStrategy);
  58. }
  59. // Grab Browser info (like timezone, etc)
  60. if (StoredSettings.getBoolean("useClientTimezone", false)) {
  61. getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
  62. }
  63. // setup the standard gitweb-ish urls
  64. mount(new MixedParamUrlCodingStrategy("/summary", SummaryPage.class, new String[] { "r" }));
  65. mount(new MixedParamUrlCodingStrategy("/log", LogPage.class, new String[] { "r", "h" }));
  66. mount(new MixedParamUrlCodingStrategy("/tags", TagsPage.class, new String[] { "r" }));
  67. mount(new MixedParamUrlCodingStrategy("/branches", BranchesPage.class, new String[] { "r" }));
  68. mount(new MixedParamUrlCodingStrategy("/commit", CommitPage.class, new String[] { "r", "h" }));
  69. mount(new MixedParamUrlCodingStrategy("/tag", TagPage.class, new String[] { "r", "h" }));
  70. mount(new MixedParamUrlCodingStrategy("/tree", TreePage.class, new String[] { "r", "h", "f" }));
  71. mount(new MixedParamUrlCodingStrategy("/blob", BlobPage.class, new String[] { "r", "h", "f" }));
  72. mount(new MixedParamUrlCodingStrategy("/raw", RawPage.class, new String[] { "r", "h", "f" }));
  73. mount(new MixedParamUrlCodingStrategy("/blobdiff", BlobDiffPage.class, new String[] { "r", "h", "f" }));
  74. mount(new MixedParamUrlCodingStrategy("/commitdiff", CommitDiffPage.class, new String[] { "r", "h" }));
  75. mount(new MixedParamUrlCodingStrategy("/patch", PatchPage.class, new String[] { "r", "h", "f" }));
  76. // setup extended urls
  77. mount(new MixedParamUrlCodingStrategy("/ticgit", TicGitPage.class, new String[] { "r" }));
  78. mount(new MixedParamUrlCodingStrategy("/ticgittkt", TicGitTicketPage.class, new String[] { "r", "h", "f" }));
  79. mount(new MixedParamUrlCodingStrategy("/login", LoginPage.class, new String[] {}));
  80. repositories = new File(StoredSettings.getString("repositoriesFolder", "repos"));
  81. exportAll = StoredSettings.getBoolean("exportAll", true);
  82. repositoryResolver = new FileResolver(repositories, exportAll);
  83. }
  84. @Override
  85. public Class<? extends Page> getHomePage() {
  86. return RepositoriesPage.class;
  87. }
  88. @Override
  89. public final Session newSession(Request request, Response response) {
  90. return new GitBlitWebSession(request);
  91. }
  92. @Override
  93. protected final IRequestCycleProcessor newRequestCycleProcessor() {
  94. return new UrlCompressingWebRequestProcessor();
  95. }
  96. @Override
  97. public final String getConfigurationType() {
  98. if (GitBlitServer.isDebugMode())
  99. return Application.DEVELOPMENT;
  100. return Application.DEPLOYMENT;
  101. }
  102. public User authenticate(String username, char [] password) {
  103. return new User(username, password);
  104. }
  105. public User authenticate(Cookie[] cookies) {
  106. if (cookies != null && cookies.length > 0) {
  107. for (Cookie cookie:cookies) {
  108. if (cookie.getName().equals(Constants.NAME)) {
  109. String value = cookie.getValue();
  110. }
  111. }
  112. }
  113. return null;
  114. }
  115. public void setCookie(WebResponse response, User user) {
  116. Cookie userCookie = new Cookie(Constants.NAME, user.getCookie());
  117. userCookie.setMaxAge(Integer.MAX_VALUE);
  118. userCookie.setPath("/");
  119. response.addCookie(userCookie);
  120. }
  121. public List<String> getRepositoryList() {
  122. return JGitUtils.getRepositoryList(repositories, exportAll, StoredSettings.getBoolean("nestedRepositories", true));
  123. }
  124. public List<RepositoryModel> getRepositories(Request request) {
  125. List<String> list = getRepositoryList();
  126. ServletWebRequest servletWebRequest = (ServletWebRequest) request;
  127. HttpServletRequest req = servletWebRequest.getHttpServletRequest();
  128. List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
  129. for (String repo : list) {
  130. Repository r = getRepository(req, repo);
  131. String description = JGitUtils.getRepositoryDescription(r);
  132. String owner = JGitUtils.getRepositoryOwner(r);
  133. Date lastchange = JGitUtils.getLastChange(r);
  134. r.close();
  135. repositories.add(new RepositoryModel(repo, description, owner, lastchange));
  136. }
  137. return repositories;
  138. }
  139. public Repository getRepository(HttpServletRequest req, String repositoryName) {
  140. Repository r = null;
  141. try {
  142. r = repositoryResolver.open(req, repositoryName);
  143. } catch (RepositoryNotFoundException e) {
  144. r = null;
  145. logger.error("Failed to find repository " + repositoryName);
  146. e.printStackTrace();
  147. } catch (ServiceNotEnabledException e) {
  148. r = null;
  149. e.printStackTrace();
  150. }
  151. return r;
  152. }
  153. public String getCloneUrl(String repositoryName) {
  154. return StoredSettings.getString("cloneUrl", "https://localhost/git/") + repositoryName;
  155. }
  156. public static GitBlitWebApp get() {
  157. return (GitBlitWebApp) WebApplication.get();
  158. }
  159. }