package com.gitblit; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import org.apache.wicket.Request; import org.apache.wicket.protocol.http.WebResponse; import org.apache.wicket.protocol.http.servlet.ServletWebRequest; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.http.server.resolver.FileResolver; import org.eclipse.jgit.http.server.resolver.ServiceNotEnabledException; import org.eclipse.jgit.lib.Repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gitblit.utils.JGitUtils; import com.gitblit.wicket.User; import com.gitblit.wicket.models.RepositoryModel; public class GitBlit { private static GitBlit gitblit; private final Logger logger = LoggerFactory.getLogger(GitBlit.class); private final boolean debugMode; private final FileResolver repositoryResolver; private final File repositories; private final boolean exportAll; private ILoginService loginService; public static GitBlit self() { if (gitblit == null) { gitblit = new GitBlit(); } return gitblit; } private GitBlit() { repositories = new File(StoredSettings.getString(Keys.git_repositoriesFolder, "repos")); exportAll = StoredSettings.getBoolean(Keys.git_exportAll, true); repositoryResolver = new FileResolver(repositories, exportAll); debugMode = StoredSettings.getBoolean(Keys.server_debugMode, false); } public boolean isDebugMode() { return debugMode; } public void setLoginService(ILoginService loginService) { this.loginService = loginService; } public User authenticate(String username, char[] password) { if (loginService == null) { return null; } return loginService.authenticate(username, password); } public User authenticate(Cookie[] cookies) { if (loginService == null) { return null; } if (cookies != null && cookies.length > 0) { for (Cookie cookie : cookies) { if (cookie.getName().equals(Constants.NAME)) { String value = cookie.getValue(); return loginService.authenticate(value.toCharArray()); } } } return null; } public void setCookie(WebResponse response, User user) { Cookie userCookie = new Cookie(Constants.NAME, user.getCookie()); userCookie.setMaxAge(Integer.MAX_VALUE); userCookie.setPath("/"); response.addCookie(userCookie); } public List getRepositoryList() { return JGitUtils.getRepositoryList(repositories, exportAll, StoredSettings.getBoolean(Keys.git_nestedRepositories, true)); } public List getRepositories(Request request) { List list = getRepositoryList(); ServletWebRequest servletWebRequest = (ServletWebRequest) request; HttpServletRequest req = servletWebRequest.getHttpServletRequest(); List repositories = new ArrayList(); for (String repo : list) { Repository r = getRepository(req, repo); String description = JGitUtils.getRepositoryDescription(r); String owner = JGitUtils.getRepositoryOwner(r); Date lastchange = JGitUtils.getLastChange(r); r.close(); repositories.add(new RepositoryModel(repo, description, owner, lastchange)); } return repositories; } public Repository getRepository(HttpServletRequest req, String repositoryName) { Repository r = null; try { r = repositoryResolver.open(req, repositoryName); } catch (RepositoryNotFoundException e) { r = null; logger.error("Failed to find repository " + repositoryName); e.printStackTrace(); } catch (ServiceNotEnabledException e) { r = null; e.printStackTrace(); } return r; } }