選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

GitBlit.java 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.gitblit;
  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.Request;
  9. import org.apache.wicket.protocol.http.WebResponse;
  10. import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
  11. import org.eclipse.jgit.errors.RepositoryNotFoundException;
  12. import org.eclipse.jgit.http.server.resolver.FileResolver;
  13. import org.eclipse.jgit.http.server.resolver.ServiceNotEnabledException;
  14. import org.eclipse.jgit.lib.Repository;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import com.gitblit.utils.JGitUtils;
  18. import com.gitblit.wicket.User;
  19. import com.gitblit.wicket.models.RepositoryModel;
  20. public class GitBlit {
  21. private static GitBlit gitblit;
  22. private final Logger logger = LoggerFactory.getLogger(GitBlit.class);
  23. private final boolean debugMode;
  24. private final FileResolver repositoryResolver;
  25. private final File repositories;
  26. private final boolean exportAll;
  27. private ILoginService loginService;
  28. public static GitBlit self() {
  29. if (gitblit == null) {
  30. gitblit = new GitBlit();
  31. }
  32. return gitblit;
  33. }
  34. private GitBlit() {
  35. repositories = new File(StoredSettings.getString(Keys.git_repositoriesFolder, "repos"));
  36. exportAll = StoredSettings.getBoolean(Keys.git_exportAll, true);
  37. repositoryResolver = new FileResolver(repositories, exportAll);
  38. debugMode = StoredSettings.getBoolean(Keys.server_debugMode, false);
  39. }
  40. public boolean isDebugMode() {
  41. return debugMode;
  42. }
  43. public void setLoginService(ILoginService loginService) {
  44. this.loginService = loginService;
  45. }
  46. public User authenticate(String username, char[] password) {
  47. if (loginService == null) {
  48. return null;
  49. }
  50. return loginService.authenticate(username, password);
  51. }
  52. public User authenticate(Cookie[] cookies) {
  53. if (loginService == null) {
  54. return null;
  55. }
  56. if (cookies != null && cookies.length > 0) {
  57. for (Cookie cookie : cookies) {
  58. if (cookie.getName().equals(Constants.NAME)) {
  59. String value = cookie.getValue();
  60. return loginService.authenticate(value.toCharArray());
  61. }
  62. }
  63. }
  64. return null;
  65. }
  66. public void setCookie(WebResponse response, User user) {
  67. Cookie userCookie = new Cookie(Constants.NAME, user.getCookie());
  68. userCookie.setMaxAge(Integer.MAX_VALUE);
  69. userCookie.setPath("/");
  70. response.addCookie(userCookie);
  71. }
  72. public List<String> getRepositoryList() {
  73. return JGitUtils.getRepositoryList(repositories, exportAll, StoredSettings.getBoolean(Keys.git_nestedRepositories, true));
  74. }
  75. public List<RepositoryModel> getRepositories(Request request) {
  76. List<String> list = getRepositoryList();
  77. ServletWebRequest servletWebRequest = (ServletWebRequest) request;
  78. HttpServletRequest req = servletWebRequest.getHttpServletRequest();
  79. List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
  80. for (String repo : list) {
  81. Repository r = getRepository(req, repo);
  82. String description = JGitUtils.getRepositoryDescription(r);
  83. String owner = JGitUtils.getRepositoryOwner(r);
  84. Date lastchange = JGitUtils.getLastChange(r);
  85. r.close();
  86. repositories.add(new RepositoryModel(repo, description, owner, lastchange));
  87. }
  88. return repositories;
  89. }
  90. public Repository getRepository(HttpServletRequest req, String repositoryName) {
  91. Repository r = null;
  92. try {
  93. r = repositoryResolver.open(req, repositoryName);
  94. } catch (RepositoryNotFoundException e) {
  95. r = null;
  96. logger.error("Failed to find repository " + repositoryName);
  97. e.printStackTrace();
  98. } catch (ServiceNotEnabledException e) {
  99. r = null;
  100. e.printStackTrace();
  101. }
  102. return r;
  103. }
  104. }