]> source.dussan.org Git - gitblit.git/commitdiff
Flattened IGitblitManager, GitblitManager, and GitBlit classes
authorJames Moger <james.moger@gitblit.com>
Mon, 25 Nov 2013 06:31:53 +0000 (01:31 -0500)
committerJames Moger <james.moger@gitblit.com>
Fri, 29 Nov 2013 16:05:51 +0000 (11:05 -0500)
Change-Id: Id6deb27306e0034898673bf5d5d76a4ed012ced6

15 files changed:
src/main/java/com/gitblit/DaggerModule.java
src/main/java/com/gitblit/GitBlit.java
src/main/java/com/gitblit/git/GitServlet.java
src/main/java/com/gitblit/git/GitblitReceivePack.java
src/main/java/com/gitblit/git/GitblitReceivePackFactory.java
src/main/java/com/gitblit/git/RepositoryResolver.java
src/main/java/com/gitblit/manager/GitblitManager.java [deleted file]
src/main/java/com/gitblit/manager/IGitblit.java [new file with mode: 0644]
src/main/java/com/gitblit/manager/IGitblitManager.java [deleted file]
src/main/java/com/gitblit/manager/IServicesManager.java [deleted file]
src/main/java/com/gitblit/manager/ServicesManager.java
src/main/java/com/gitblit/servlet/GitblitContext.java
src/main/java/com/gitblit/servlet/RpcServlet.java
src/main/java/com/gitblit/wicket/GitBlitWebApp.java
src/test/java/com/gitblit/tests/GitblitUnitTest.java

index cc83694017d95263535a0049f202adb6706ddcfd..135fafbf277f8fca1e395be8c64774573ee5f7aa 100644 (file)
@@ -22,21 +22,18 @@ import org.apache.wicket.protocol.http.WebApplication;
 import com.gitblit.git.GitServlet;
 import com.gitblit.manager.AuthenticationManager;
 import com.gitblit.manager.FederationManager;
-import com.gitblit.manager.GitblitManager;
 import com.gitblit.manager.IAuthenticationManager;
 import com.gitblit.manager.IFederationManager;
-import com.gitblit.manager.IGitblitManager;
+import com.gitblit.manager.IGitblit;
 import com.gitblit.manager.INotificationManager;
 import com.gitblit.manager.IProjectManager;
 import com.gitblit.manager.IRepositoryManager;
 import com.gitblit.manager.IRuntimeManager;
-import com.gitblit.manager.IServicesManager;
 import com.gitblit.manager.IUserManager;
 import com.gitblit.manager.NotificationManager;
 import com.gitblit.manager.ProjectManager;
 import com.gitblit.manager.RepositoryManager;
 import com.gitblit.manager.RuntimeManager;
-import com.gitblit.manager.ServicesManager;
 import com.gitblit.manager.UserManager;
 import com.gitblit.servlet.BranchGraphServlet;
 import com.gitblit.servlet.DownloadZipFilter;
@@ -77,12 +74,10 @@ import dagger.Provides;
                        IAuthenticationManager.class,
                        IRepositoryManager.class,
                        IProjectManager.class,
-                       IGitblitManager.class,
                        IFederationManager.class,
-                       IServicesManager.class,
 
                        // the monolithic manager
-                       GitBlit.class,
+                       IGitblit.class,
 
                        // filters & servlets
                        GitServlet.class,
@@ -164,25 +159,13 @@ public class DaggerModule {
                                repositoryManager);
        }
 
-       @Provides @Singleton IGitblitManager provideGitblitManager(
-                       IRuntimeManager runtimeManager,
-                       IUserManager userManager,
-                       IRepositoryManager repositoryManager) {
-
-               return new GitblitManager(
-                               runtimeManager,
-                               userManager,
-                               repositoryManager);
-       }
-
-       @Provides @Singleton GitBlit provideGitblit(
+       @Provides @Singleton IGitblit provideGitblit(
                        IRuntimeManager runtimeManager,
                        INotificationManager notificationManager,
                        IUserManager userManager,
                        IAuthenticationManager authenticationManager,
                        IRepositoryManager repositoryManager,
                        IProjectManager projectManager,
-                       IGitblitManager gitblitManager,
                        IFederationManager federationManager) {
 
                return new GitBlit(
@@ -192,14 +175,9 @@ public class DaggerModule {
                                authenticationManager,
                                repositoryManager,
                                projectManager,
-                               gitblitManager,
                                federationManager);
        }
 
-       @Provides @Singleton IServicesManager provideServicesManager(GitBlit gitblit) {
-               return new ServicesManager(gitblit);
-       }
-
        @Provides @Singleton WebApplication provideWebApplication(
                        IRuntimeManager runtimeManager,
                        INotificationManager notificationManager,
@@ -207,8 +185,8 @@ public class DaggerModule {
                        IAuthenticationManager authenticationManager,
                        IRepositoryManager repositoryManager,
                        IProjectManager projectManager,
-                       IGitblitManager gitblitManager,
-                       IFederationManager federationManager) {
+                       IFederationManager federationManager,
+                       IGitblit gitblit) {
 
                return new GitBlitWebApp(
                                runtimeManager,
@@ -217,7 +195,7 @@ public class DaggerModule {
                                authenticationManager,
                                repositoryManager,
                                projectManager,
-                               gitblitManager,
-                               federationManager);
+                               federationManager,
+                               gitblit);
        }
 }
\ No newline at end of file
index d4e89b02494f40f6546caceeb903d58289379fb3..d736c57ae05c9596a83cd8c87db4e40375dd791f 100644 (file)
  */
 package com.gitblit;
 
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.Type;
+import java.text.MessageFormat;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
@@ -26,17 +34,22 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.eclipse.jgit.lib.Repository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import com.gitblit.Constants.AccessPermission;
+import com.gitblit.Constants.AccessRestrictionType;
 import com.gitblit.Constants.FederationRequest;
 import com.gitblit.Constants.FederationToken;
 import com.gitblit.manager.IAuthenticationManager;
 import com.gitblit.manager.IFederationManager;
-import com.gitblit.manager.IGitblitManager;
+import com.gitblit.manager.IGitblit;
 import com.gitblit.manager.INotificationManager;
 import com.gitblit.manager.IProjectManager;
 import com.gitblit.manager.IRepositoryManager;
 import com.gitblit.manager.IRuntimeManager;
 import com.gitblit.manager.IUserManager;
+import com.gitblit.manager.ServicesManager;
 import com.gitblit.models.FederationModel;
 import com.gitblit.models.FederationProposal;
 import com.gitblit.models.FederationSet;
@@ -50,8 +63,19 @@ import com.gitblit.models.RepositoryUrl;
 import com.gitblit.models.SearchResult;
 import com.gitblit.models.ServerSettings;
 import com.gitblit.models.ServerStatus;
+import com.gitblit.models.SettingModel;
 import com.gitblit.models.TeamModel;
 import com.gitblit.models.UserModel;
+import com.gitblit.utils.ArrayUtils;
+import com.gitblit.utils.HttpUtils;
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.utils.JsonUtils;
+import com.gitblit.utils.ObjectCache;
+import com.gitblit.utils.StringUtils;
+import com.google.gson.Gson;
+import com.google.gson.JsonIOException;
+import com.google.gson.JsonSyntaxException;
+import com.google.gson.reflect.TypeToken;
 
 /**
  * GitBlit is an aggregate interface delegate.  It implements all the manager
@@ -62,14 +86,13 @@ import com.gitblit.models.UserModel;
  * @author James Moger
  *
  */
-public class GitBlit implements IRuntimeManager,
-                                                               INotificationManager,
-                                                               IUserManager,
-                                                               IAuthenticationManager,
-                                                               IRepositoryManager,
-                                                               IProjectManager,
-                                                               IGitblitManager,
-                                                               IFederationManager {
+public class GitBlit implements IGitblit {
+
+       private final Logger logger = LoggerFactory.getLogger(getClass());
+
+       private final ObjectCache<Collection<GitClientApplication>> clientApplications = new ObjectCache<Collection<GitClientApplication>>();
+
+       private final IStoredSettings settings;
 
        private final IRuntimeManager runtimeManager;
 
@@ -83,10 +106,10 @@ public class GitBlit implements IRuntimeManager,
 
        private final IProjectManager projectManager;
 
-       private final IGitblitManager gitblitManager;
-
        private final IFederationManager federationManager;
 
+       private final ServicesManager servicesManager;
+
        public GitBlit(
                        IRuntimeManager runtimeManager,
                        INotificationManager notificationManager,
@@ -94,29 +117,364 @@ public class GitBlit implements IRuntimeManager,
                        IAuthenticationManager authenticationManager,
                        IRepositoryManager repositoryManager,
                        IProjectManager projectManager,
-                       IGitblitManager gitblitManager,
                        IFederationManager federationManager) {
 
+               this.settings = runtimeManager.getSettings();
                this.runtimeManager = runtimeManager;
                this.notificationManager = notificationManager;
                this.userManager = userManager;
                this.authenticationManager = authenticationManager;
                this.repositoryManager = repositoryManager;
                this.projectManager = projectManager;
-               this.gitblitManager = gitblitManager;
                this.federationManager = federationManager;
+
+               this.servicesManager = new ServicesManager(this);
        }
 
        @Override
        public GitBlit start() {
+               loadSettingModels(runtimeManager.getSettingsModel());
+               logger.info("Starting services manager...");
+               servicesManager.start();
                return this;
        }
 
        @Override
        public GitBlit stop() {
+               servicesManager.stop();
                return this;
        }
 
+       /*
+        * IGITBLIT
+        */
+
+       /**
+        * Creates a personal fork of the specified repository. The clone is view
+        * restricted by default and the owner of the source repository is given
+        * access to the clone.
+        *
+        * @param repository
+        * @param user
+        * @return the repository model of the fork, if successful
+        * @throws GitBlitException
+        */
+       @Override
+       public RepositoryModel fork(RepositoryModel repository, UserModel user) throws GitBlitException {
+               String cloneName = MessageFormat.format("{0}/{1}.git", user.getPersonalPath(), StringUtils.stripDotGit(StringUtils.getLastPathElement(repository.name)));
+               String fromUrl = MessageFormat.format("file://{0}/{1}", repositoryManager.getRepositoriesFolder().getAbsolutePath(), repository.name);
+
+               // clone the repository
+               try {
+                       JGitUtils.cloneRepository(repositoryManager.getRepositoriesFolder(), cloneName, fromUrl, true, null);
+               } catch (Exception e) {
+                       throw new GitBlitException(e);
+               }
+
+               // create a Gitblit repository model for the clone
+               RepositoryModel cloneModel = repository.cloneAs(cloneName);
+               // owner has REWIND/RW+ permissions
+               cloneModel.addOwner(user.username);
+               repositoryManager.updateRepositoryModel(cloneName, cloneModel, false);
+
+               // add the owner of the source repository to the clone's access list
+               if (!ArrayUtils.isEmpty(repository.owners)) {
+                       for (String owner : repository.owners) {
+                               UserModel originOwner = userManager.getUserModel(owner);
+                               if (originOwner != null) {
+                                       originOwner.setRepositoryPermission(cloneName, AccessPermission.CLONE);
+                                       updateUserModel(originOwner.username, originOwner, false);
+                               }
+                       }
+               }
+
+               // grant origin's user list clone permission to fork
+               List<String> users = repositoryManager.getRepositoryUsers(repository);
+               List<UserModel> cloneUsers = new ArrayList<UserModel>();
+               for (String name : users) {
+                       if (!name.equalsIgnoreCase(user.username)) {
+                               UserModel cloneUser = userManager.getUserModel(name);
+                               if (cloneUser.canClone(repository)) {
+                                       // origin user can clone origin, grant clone access to fork
+                                       cloneUser.setRepositoryPermission(cloneName, AccessPermission.CLONE);
+                               }
+                               cloneUsers.add(cloneUser);
+                       }
+               }
+               userManager.updateUserModels(cloneUsers);
+
+               // grant origin's team list clone permission to fork
+               List<String> teams = repositoryManager.getRepositoryTeams(repository);
+               List<TeamModel> cloneTeams = new ArrayList<TeamModel>();
+               for (String name : teams) {
+                       TeamModel cloneTeam = userManager.getTeamModel(name);
+                       if (cloneTeam.canClone(repository)) {
+                               // origin team can clone origin, grant clone access to fork
+                               cloneTeam.setRepositoryPermission(cloneName, AccessPermission.CLONE);
+                       }
+                       cloneTeams.add(cloneTeam);
+               }
+               userManager.updateTeamModels(cloneTeams);
+
+               // add this clone to the cached model
+               repositoryManager.addToCachedRepositoryList(cloneModel);
+               return cloneModel;
+       }
+
+       /**
+        * Updates the TeamModel object for the specified name.
+        *
+        * @param teamname
+        * @param team
+        * @param isCreate
+        */
+       @Override
+       public void updateTeamModel(String teamname, TeamModel team, boolean isCreate)
+                       throws GitBlitException {
+               if (!teamname.equalsIgnoreCase(team.name)) {
+                       if (userManager.getTeamModel(team.name) != null) {
+                               throw new GitBlitException(MessageFormat.format(
+                                               "Failed to rename ''{0}'' because ''{1}'' already exists.", teamname,
+                                               team.name));
+                       }
+               }
+               if (!userManager.updateTeamModel(teamname, team)) {
+                       throw new GitBlitException(isCreate ? "Failed to add team!" : "Failed to update team!");
+               }
+       }
+
+       /**
+        * Adds/updates a complete user object keyed by username. This method allows
+        * for renaming a user.
+        *
+        * @see IUserService.updateUserModel(String, UserModel)
+        * @param username
+        * @param user
+        * @param isCreate
+        * @throws GitBlitException
+        */
+       @Override
+       public void updateUserModel(String username, UserModel user, boolean isCreate)
+                       throws GitBlitException {
+               if (!username.equalsIgnoreCase(user.username)) {
+                       if (userManager.getUserModel(user.username) != null) {
+                               throw new GitBlitException(MessageFormat.format(
+                                               "Failed to rename ''{0}'' because ''{1}'' already exists.", username,
+                                               user.username));
+                       }
+
+                       // rename repositories and owner fields for all repositories
+                       for (RepositoryModel model : repositoryManager.getRepositoryModels(user)) {
+                               if (model.isUsersPersonalRepository(username)) {
+                                       // personal repository
+                                       model.addOwner(user.username);
+                                       String oldRepositoryName = model.name;
+                                       model.name = user.getPersonalPath() + model.name.substring(model.projectPath.length());
+                                       model.projectPath = user.getPersonalPath();
+                                       repositoryManager.updateRepositoryModel(oldRepositoryName, model, false);
+                               } else if (model.isOwner(username)) {
+                                       // common/shared repo
+                                       model.addOwner(user.username);
+                                       repositoryManager.updateRepositoryModel(model.name, model, false);
+                               }
+                       }
+               }
+               if (!userManager.updateUserModel(username, user)) {
+                       throw new GitBlitException(isCreate ? "Failed to add user!" : "Failed to update user!");
+               }
+       }
+
+       /**
+        * Returns a list of repository URLs and the user access permission.
+        *
+        * @param request
+        * @param user
+        * @param repository
+        * @return a list of repository urls
+        */
+       @Override
+       public List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository) {
+               if (user == null) {
+                       user = UserModel.ANONYMOUS;
+               }
+               String username = StringUtils.encodeUsername(UserModel.ANONYMOUS.equals(user) ? "" : user.username);
+
+               List<RepositoryUrl> list = new ArrayList<RepositoryUrl>();
+               // http/https url
+               if (settings.getBoolean(Keys.git.enableGitServlet, true)) {
+                       AccessPermission permission = user.getRepositoryPermission(repository).permission;
+                       if (permission.exceeds(AccessPermission.NONE)) {
+                               list.add(new RepositoryUrl(getRepositoryUrl(request, username, repository), permission));
+                       }
+               }
+
+               // git daemon url
+               String gitDaemonUrl = servicesManager.getGitDaemonUrl(request, user, repository);
+               if (!StringUtils.isEmpty(gitDaemonUrl)) {
+                       AccessPermission permission = servicesManager.getGitDaemonAccessPermission(user, repository);
+                       if (permission.exceeds(AccessPermission.NONE)) {
+                               list.add(new RepositoryUrl(gitDaemonUrl, permission));
+                       }
+               }
+
+               // add all other urls
+               // {0} = repository
+               // {1} = username
+               for (String url : settings.getStrings(Keys.web.otherUrls)) {
+                       if (url.contains("{1}")) {
+                               // external url requires username, only add url IF we have one
+                               if (!StringUtils.isEmpty(username)) {
+                                       list.add(new RepositoryUrl(MessageFormat.format(url, repository.name, username), null));
+                               }
+                       } else {
+                               // external url does not require username
+                               list.add(new RepositoryUrl(MessageFormat.format(url, repository.name), null));
+                       }
+               }
+               return list;
+       }
+
+       protected String getRepositoryUrl(HttpServletRequest request, String username, RepositoryModel repository) {
+               StringBuilder sb = new StringBuilder();
+               sb.append(HttpUtils.getGitblitURL(request));
+               sb.append(Constants.R_PATH);
+               sb.append(repository.name);
+
+               // inject username into repository url if authentication is required
+               if (repository.accessRestriction.exceeds(AccessRestrictionType.NONE)
+                               && !StringUtils.isEmpty(username)) {
+                       sb.insert(sb.indexOf("://") + 3, username + "@");
+               }
+               return sb.toString();
+       }
+
+
+       /**
+        * Returns the list of custom client applications to be used for the
+        * repository url panel;
+        *
+        * @return a collection of client applications
+        */
+       @Override
+       public Collection<GitClientApplication> getClientApplications() {
+               // prefer user definitions, if they exist
+               File userDefs = new File(runtimeManager.getBaseFolder(), "clientapps.json");
+               if (userDefs.exists()) {
+                       Date lastModified = new Date(userDefs.lastModified());
+                       if (clientApplications.hasCurrent("user", lastModified)) {
+                               return clientApplications.getObject("user");
+                       } else {
+                               // (re)load user definitions
+                               try {
+                                       InputStream is = new FileInputStream(userDefs);
+                                       Collection<GitClientApplication> clients = readClientApplications(is);
+                                       is.close();
+                                       if (clients != null) {
+                                               clientApplications.updateObject("user", lastModified, clients);
+                                               return clients;
+                                       }
+                               } catch (IOException e) {
+                                       logger.error("Failed to deserialize " + userDefs.getAbsolutePath(), e);
+                               }
+                       }
+               }
+
+               // no user definitions, use system definitions
+               if (!clientApplications.hasCurrent("system", new Date(0))) {
+                       try {
+                               InputStream is = getClass().getResourceAsStream("/clientapps.json");
+                               Collection<GitClientApplication> clients = readClientApplications(is);
+                               is.close();
+                               if (clients != null) {
+                                       clientApplications.updateObject("system", new Date(0), clients);
+                               }
+                       } catch (IOException e) {
+                               logger.error("Failed to deserialize clientapps.json resource!", e);
+                       }
+               }
+
+               return clientApplications.getObject("system");
+       }
+
+       private Collection<GitClientApplication> readClientApplications(InputStream is) {
+               try {
+                       Type type = new TypeToken<Collection<GitClientApplication>>() {
+                       }.getType();
+                       InputStreamReader reader = new InputStreamReader(is);
+                       Gson gson = JsonUtils.gson();
+                       Collection<GitClientApplication> links = gson.fromJson(reader, type);
+                       return links;
+               } catch (JsonIOException e) {
+                       logger.error("Error deserializing client applications!", e);
+               } catch (JsonSyntaxException e) {
+                       logger.error("Error deserializing client applications!", e);
+               }
+               return null;
+       }
+
+       /**
+        * Parse the properties file and aggregate all the comments by the setting
+        * key. A setting model tracks the current value, the default value, the
+        * description of the setting and and directives about the setting.
+        *
+        * @return Map<String, SettingModel>
+        */
+       private void loadSettingModels(ServerSettings settingsModel) {
+               try {
+                       // Read bundled Gitblit properties to extract setting descriptions.
+                       // This copy is pristine and only used for populating the setting
+                       // models map.
+                       InputStream is = getClass().getResourceAsStream("/reference.properties");
+                       BufferedReader propertiesReader = new BufferedReader(new InputStreamReader(is));
+                       StringBuilder description = new StringBuilder();
+                       SettingModel setting = new SettingModel();
+                       String line = null;
+                       while ((line = propertiesReader.readLine()) != null) {
+                               if (line.length() == 0) {
+                                       description.setLength(0);
+                                       setting = new SettingModel();
+                               } else {
+                                       if (line.charAt(0) == '#') {
+                                               if (line.length() > 1) {
+                                                       String text = line.substring(1).trim();
+                                                       if (SettingModel.CASE_SENSITIVE.equals(text)) {
+                                                               setting.caseSensitive = true;
+                                                       } else if (SettingModel.RESTART_REQUIRED.equals(text)) {
+                                                               setting.restartRequired = true;
+                                                       } else if (SettingModel.SPACE_DELIMITED.equals(text)) {
+                                                               setting.spaceDelimited = true;
+                                                       } else if (text.startsWith(SettingModel.SINCE)) {
+                                                               try {
+                                                                       setting.since = text.split(" ")[1];
+                                                               } catch (Exception e) {
+                                                                       setting.since = text;
+                                                               }
+                                                       } else {
+                                                               description.append(text);
+                                                               description.append('\n');
+                                                       }
+                                               }
+                                       } else {
+                                               String[] kvp = line.split("=", 2);
+                                               String key = kvp[0].trim();
+                                               setting.name = key;
+                                               setting.defaultValue = kvp[1].trim();
+                                               setting.currentValue = setting.defaultValue;
+                                               setting.description = description.toString().trim();
+                                               settingsModel.add(setting);
+                                               description.setLength(0);
+                                               setting = new SettingModel();
+                                       }
+                               }
+                       }
+                       propertiesReader.close();
+               } catch (NullPointerException e) {
+                       logger.error("Failed to find resource copy of gitblit.properties");
+               } catch (IOException e) {
+                       logger.error("Failed to load resource copy of gitblit.properties");
+               }
+       }
+
        /*
         * ISTOREDSETTINGS
         *
@@ -720,35 +1078,4 @@ public class GitBlit implements IRuntimeManager,
        public boolean deletePendingFederationProposal(FederationProposal proposal) {
                return federationManager.deletePendingFederationProposal(proposal);
        }
-
-       /*
-        * GITBLIT MANAGER
-        */
-
-       @Override
-       public RepositoryModel fork(RepositoryModel repository, UserModel user) throws GitBlitException {
-               return gitblitManager.fork(repository, user);
-       }
-
-       @Override
-       public void updateTeamModel(String teamname, TeamModel team, boolean isCreate)
-                       throws GitBlitException {
-               gitblitManager.updateTeamModel(teamname, team, isCreate);
-       }
-
-       @Override
-       public void updateUserModel(String username, UserModel user, boolean isCreate)
-                       throws GitBlitException {
-               gitblitManager.updateUserModel(username, user, isCreate);
-       }
-
-       @Override
-       public List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository) {
-               return gitblitManager.getRepositoryUrls(request, user, repository);
-       }
-
-       @Override
-       public Collection<GitClientApplication> getClientApplications() {
-               return gitblitManager.getClientApplications();
-       }
 }
index ff50ad60d0954e8bc1a57a2dd11a9fe32d1dbc2e..db671e4b07ead4531a655650da931f59b6bebe15 100644 (file)
@@ -20,7 +20,7 @@ import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;\r
 import javax.servlet.http.HttpServletRequest;\r
 \r
-import com.gitblit.GitBlit;\r
+import com.gitblit.manager.IGitblit;\r
 \r
 /**\r
  * The GitServlet provides http/https access to Git repositories.\r
@@ -33,10 +33,10 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet {
 \r
        private static final long serialVersionUID = 1L;\r
 \r
-       private final GitBlit gitblit;\r
+       private final IGitblit gitblit;\r
 \r
        @Inject\r
-       public GitServlet(GitBlit gitblit) {\r
+       public GitServlet(IGitblit gitblit) {\r
                super();\r
                this.gitblit = gitblit;\r
        }\r
index ebea2658242281fcff743cb37d54ddf8eed9c1d6..e5c0ea45731013b7c952beea0afbae8267869487 100644 (file)
@@ -44,10 +44,10 @@ import org.slf4j.LoggerFactory;
 \r
 import com.gitblit.Constants;\r
 import com.gitblit.Constants.AccessRestrictionType;\r
-import com.gitblit.GitBlit;\r
 import com.gitblit.IStoredSettings;\r
 import com.gitblit.Keys;\r
 import com.gitblit.client.Translation;\r
+import com.gitblit.manager.IGitblit;\r
 import com.gitblit.models.RepositoryModel;\r
 import com.gitblit.models.UserModel;\r
 import com.gitblit.utils.ArrayUtils;\r
@@ -91,10 +91,10 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P
 \r
        private final IStoredSettings settings;\r
 \r
-       private final GitBlit gitblit;\r
+       private final IGitblit gitblit;\r
 \r
        public GitblitReceivePack(\r
-                       GitBlit gitblit,\r
+                       IGitblit gitblit,\r
                        Repository db,\r
                        RepositoryModel repository,\r
                        UserModel user) {\r
index e24d119216f9b03244b1e9350cf334482cf4f4c7..bdf9b1ad47bdd3b3e198e5c697b5ff6f2321a95d 100644 (file)
@@ -26,9 +26,9 @@ import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.gitblit.GitBlit;
 import com.gitblit.IStoredSettings;
 import com.gitblit.Keys;
+import com.gitblit.manager.IGitblit;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.UserModel;
 import com.gitblit.utils.HttpUtils;
@@ -47,9 +47,9 @@ public class GitblitReceivePackFactory<X> implements ReceivePackFactory<X> {
 
        private final IStoredSettings settings;
 
-       private final GitBlit gitblit;
+       private final IGitblit gitblit;
 
-       public GitblitReceivePackFactory(GitBlit gitblit) {
+       public GitblitReceivePackFactory(IGitblit gitblit) {
                super();
                this.settings = gitblit.getSettings();
                this.gitblit = gitblit;
index 8615eea1548a24e9ded5922c534c2878e99f94d7..208c1ae1648139f4d514bf69dd52debed5ab1656 100644 (file)
@@ -27,7 +27,7 @@ import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.gitblit.GitBlit;
+import com.gitblit.manager.IGitblit;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.UserModel;
 
@@ -41,9 +41,9 @@ public class RepositoryResolver<X> extends FileResolver<X> {
 
        private final Logger logger = LoggerFactory.getLogger(RepositoryResolver.class);
 
-       private final GitBlit gitblit;
+       private final IGitblit gitblit;
 
-       public RepositoryResolver(GitBlit gitblit) {
+       public RepositoryResolver(IGitblit gitblit) {
                super(gitblit.getRepositoriesFolder(), true);
                this.gitblit = gitblit;
        }
diff --git a/src/main/java/com/gitblit/manager/GitblitManager.java b/src/main/java/com/gitblit/manager/GitblitManager.java
deleted file mode 100644 (file)
index 6395c35..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Copyright 2013 gitblit.com.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.gitblit.manager;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.reflect.Type;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.gitblit.Constants;
-import com.gitblit.Constants.AccessPermission;
-import com.gitblit.Constants.AccessRestrictionType;
-import com.gitblit.GitBlitException;
-import com.gitblit.IStoredSettings;
-import com.gitblit.Keys;
-import com.gitblit.models.GitClientApplication;
-import com.gitblit.models.RepositoryModel;
-import com.gitblit.models.RepositoryUrl;
-import com.gitblit.models.ServerSettings;
-import com.gitblit.models.SettingModel;
-import com.gitblit.models.TeamModel;
-import com.gitblit.models.UserModel;
-import com.gitblit.utils.ArrayUtils;
-import com.gitblit.utils.HttpUtils;
-import com.gitblit.utils.JGitUtils;
-import com.gitblit.utils.JsonUtils;
-import com.gitblit.utils.ObjectCache;
-import com.gitblit.utils.StringUtils;
-import com.google.gson.Gson;
-import com.google.gson.JsonIOException;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.reflect.TypeToken;
-
-public class GitblitManager implements IGitblitManager {
-
-       private final Logger logger = LoggerFactory.getLogger(getClass());
-
-       private final ObjectCache<Collection<GitClientApplication>> clientApplications = new ObjectCache<Collection<GitClientApplication>>();
-
-       private final IStoredSettings settings;
-
-       private final IRuntimeManager runtimeManager;
-
-       private final IUserManager userManager;
-
-       private final IRepositoryManager repositoryManager;
-
-       public GitblitManager(
-                       IRuntimeManager runtimeManager,
-                       IUserManager userManager,
-                       IRepositoryManager repositoryManager) {
-
-               this.settings = runtimeManager.getSettings();
-               this.runtimeManager = runtimeManager;
-               this.userManager = userManager;
-               this.repositoryManager = repositoryManager;
-       }
-
-       @Override
-       public GitblitManager start() {
-               loadSettingModels(runtimeManager.getSettingsModel());
-               return this;
-       }
-
-       @Override
-       public GitblitManager stop() {
-               return this;
-       }
-
-       /**
-        * Parse the properties file and aggregate all the comments by the setting
-        * key. A setting model tracks the current value, the default value, the
-        * description of the setting and and directives about the setting.
-        *
-        * @return Map<String, SettingModel>
-        */
-       private void loadSettingModels(ServerSettings settingsModel) {
-               try {
-                       // Read bundled Gitblit properties to extract setting descriptions.
-                       // This copy is pristine and only used for populating the setting
-                       // models map.
-                       InputStream is = getClass().getResourceAsStream("/reference.properties");
-                       BufferedReader propertiesReader = new BufferedReader(new InputStreamReader(is));
-                       StringBuilder description = new StringBuilder();
-                       SettingModel setting = new SettingModel();
-                       String line = null;
-                       while ((line = propertiesReader.readLine()) != null) {
-                               if (line.length() == 0) {
-                                       description.setLength(0);
-                                       setting = new SettingModel();
-                               } else {
-                                       if (line.charAt(0) == '#') {
-                                               if (line.length() > 1) {
-                                                       String text = line.substring(1).trim();
-                                                       if (SettingModel.CASE_SENSITIVE.equals(text)) {
-                                                               setting.caseSensitive = true;
-                                                       } else if (SettingModel.RESTART_REQUIRED.equals(text)) {
-                                                               setting.restartRequired = true;
-                                                       } else if (SettingModel.SPACE_DELIMITED.equals(text)) {
-                                                               setting.spaceDelimited = true;
-                                                       } else if (text.startsWith(SettingModel.SINCE)) {
-                                                               try {
-                                                                       setting.since = text.split(" ")[1];
-                                                               } catch (Exception e) {
-                                                                       setting.since = text;
-                                                               }
-                                                       } else {
-                                                               description.append(text);
-                                                               description.append('\n');
-                                                       }
-                                               }
-                                       } else {
-                                               String[] kvp = line.split("=", 2);
-                                               String key = kvp[0].trim();
-                                               setting.name = key;
-                                               setting.defaultValue = kvp[1].trim();
-                                               setting.currentValue = setting.defaultValue;
-                                               setting.description = description.toString().trim();
-                                               settingsModel.add(setting);
-                                               description.setLength(0);
-                                               setting = new SettingModel();
-                                       }
-                               }
-                       }
-                       propertiesReader.close();
-               } catch (NullPointerException e) {
-                       logger.error("Failed to find resource copy of gitblit.properties");
-               } catch (IOException e) {
-                       logger.error("Failed to load resource copy of gitblit.properties");
-               }
-       }
-
-       /**
-        * Returns a list of repository URLs and the user access permission.
-        *
-        * @param request
-        * @param user
-        * @param repository
-        * @return a list of repository urls
-        */
-       @Override
-       public List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository) {
-               if (user == null) {
-                       user = UserModel.ANONYMOUS;
-               }
-               String username = StringUtils.encodeUsername(UserModel.ANONYMOUS.equals(user) ? "" : user.username);
-
-               List<RepositoryUrl> list = new ArrayList<RepositoryUrl>();
-               // http/https url
-               if (settings.getBoolean(Keys.git.enableGitServlet, true)) {
-                       AccessPermission permission = user.getRepositoryPermission(repository).permission;
-                       if (permission.exceeds(AccessPermission.NONE)) {
-                               list.add(new RepositoryUrl(getRepositoryUrl(request, username, repository), permission));
-                       }
-               }
-
-               // git daemon url
-               String gitDaemonUrl = getGitDaemonUrl(request, user, repository);
-               if (!StringUtils.isEmpty(gitDaemonUrl)) {
-                       AccessPermission permission = getGitDaemonAccessPermission(user, repository);
-                       if (permission.exceeds(AccessPermission.NONE)) {
-                               list.add(new RepositoryUrl(gitDaemonUrl, permission));
-                       }
-               }
-
-               // add all other urls
-               // {0} = repository
-               // {1} = username
-               for (String url : settings.getStrings(Keys.web.otherUrls)) {
-                       if (url.contains("{1}")) {
-                               // external url requires username, only add url IF we have one
-                               if (!StringUtils.isEmpty(username)) {
-                                       list.add(new RepositoryUrl(MessageFormat.format(url, repository.name, username), null));
-                               }
-                       } else {
-                               // external url does not require username
-                               list.add(new RepositoryUrl(MessageFormat.format(url, repository.name), null));
-                       }
-               }
-               return list;
-       }
-
-       protected String getRepositoryUrl(HttpServletRequest request, String username, RepositoryModel repository) {
-               StringBuilder sb = new StringBuilder();
-               sb.append(HttpUtils.getGitblitURL(request));
-               sb.append(Constants.R_PATH);
-               sb.append(repository.name);
-
-               // inject username into repository url if authentication is required
-               if (repository.accessRestriction.exceeds(AccessRestrictionType.NONE)
-                               && !StringUtils.isEmpty(username)) {
-                       sb.insert(sb.indexOf("://") + 3, username + "@");
-               }
-               return sb.toString();
-       }
-
-       protected String getGitDaemonUrl(HttpServletRequest request, UserModel user, RepositoryModel repository) {
-//             if (gitDaemon != null) {
-//                     String bindInterface = settings.getString(Keys.git.daemonBindInterface, "localhost");
-//                     if (bindInterface.equals("localhost")
-//                                     && (!request.getServerName().equals("localhost") && !request.getServerName().equals("127.0.0.1"))) {
-//                             // git daemon is bound to localhost and the request is from elsewhere
-//                             return null;
-//                     }
-//                     if (user.canClone(repository)) {
-//                             String servername = request.getServerName();
-//                             String url = gitDaemon.formatUrl(servername, repository.name);
-//                             return url;
-//                     }
-//             }
-               return null;
-       }
-
-       protected AccessPermission getGitDaemonAccessPermission(UserModel user, RepositoryModel repository) {
-//             if (gitDaemon != null && user.canClone(repository)) {
-//                     AccessPermission gitDaemonPermission = user.getRepositoryPermission(repository).permission;
-//                     if (gitDaemonPermission.atLeast(AccessPermission.CLONE)) {
-//                             if (repository.accessRestriction.atLeast(AccessRestrictionType.CLONE)) {
-//                                     // can not authenticate clone via anonymous git protocol
-//                                     gitDaemonPermission = AccessPermission.NONE;
-//                             } else if (repository.accessRestriction.atLeast(AccessRestrictionType.PUSH)) {
-//                                     // can not authenticate push via anonymous git protocol
-//                                     gitDaemonPermission = AccessPermission.CLONE;
-//                             } else {
-//                                     // normal user permission
-//                             }
-//                     }
-//                     return gitDaemonPermission;
-//             }
-               return AccessPermission.NONE;
-       }
-
-       /**
-        * Returns the list of custom client applications to be used for the
-        * repository url panel;
-        *
-        * @return a collection of client applications
-        */
-       @Override
-       public Collection<GitClientApplication> getClientApplications() {
-               // prefer user definitions, if they exist
-               File userDefs = new File(runtimeManager.getBaseFolder(), "clientapps.json");
-               if (userDefs.exists()) {
-                       Date lastModified = new Date(userDefs.lastModified());
-                       if (clientApplications.hasCurrent("user", lastModified)) {
-                               return clientApplications.getObject("user");
-                       } else {
-                               // (re)load user definitions
-                               try {
-                                       InputStream is = new FileInputStream(userDefs);
-                                       Collection<GitClientApplication> clients = readClientApplications(is);
-                                       is.close();
-                                       if (clients != null) {
-                                               clientApplications.updateObject("user", lastModified, clients);
-                                               return clients;
-                                       }
-                               } catch (IOException e) {
-                                       logger.error("Failed to deserialize " + userDefs.getAbsolutePath(), e);
-                               }
-                       }
-               }
-
-               // no user definitions, use system definitions
-               if (!clientApplications.hasCurrent("system", new Date(0))) {
-                       try {
-                               InputStream is = getClass().getResourceAsStream("/clientapps.json");
-                               Collection<GitClientApplication> clients = readClientApplications(is);
-                               is.close();
-                               if (clients != null) {
-                                       clientApplications.updateObject("system", new Date(0), clients);
-                               }
-                       } catch (IOException e) {
-                               logger.error("Failed to deserialize clientapps.json resource!", e);
-                       }
-               }
-
-               return clientApplications.getObject("system");
-       }
-
-       private Collection<GitClientApplication> readClientApplications(InputStream is) {
-               try {
-                       Type type = new TypeToken<Collection<GitClientApplication>>() {
-                       }.getType();
-                       InputStreamReader reader = new InputStreamReader(is);
-                       Gson gson = JsonUtils.gson();
-                       Collection<GitClientApplication> links = gson.fromJson(reader, type);
-                       return links;
-               } catch (JsonIOException e) {
-                       logger.error("Error deserializing client applications!", e);
-               } catch (JsonSyntaxException e) {
-                       logger.error("Error deserializing client applications!", e);
-               }
-               return null;
-       }
-
-       /**
-        * Creates a personal fork of the specified repository. The clone is view
-        * restricted by default and the owner of the source repository is given
-        * access to the clone.
-        *
-        * @param repository
-        * @param user
-        * @return the repository model of the fork, if successful
-        * @throws GitBlitException
-        */
-       @Override
-       public RepositoryModel fork(RepositoryModel repository, UserModel user) throws GitBlitException {
-               String cloneName = MessageFormat.format("{0}/{1}.git", user.getPersonalPath(), StringUtils.stripDotGit(StringUtils.getLastPathElement(repository.name)));
-               String fromUrl = MessageFormat.format("file://{0}/{1}", repositoryManager.getRepositoriesFolder().getAbsolutePath(), repository.name);
-
-               // clone the repository
-               try {
-                       JGitUtils.cloneRepository(repositoryManager.getRepositoriesFolder(), cloneName, fromUrl, true, null);
-               } catch (Exception e) {
-                       throw new GitBlitException(e);
-               }
-
-               // create a Gitblit repository model for the clone
-               RepositoryModel cloneModel = repository.cloneAs(cloneName);
-               // owner has REWIND/RW+ permissions
-               cloneModel.addOwner(user.username);
-               repositoryManager.updateRepositoryModel(cloneName, cloneModel, false);
-
-               // add the owner of the source repository to the clone's access list
-               if (!ArrayUtils.isEmpty(repository.owners)) {
-                       for (String owner : repository.owners) {
-                               UserModel originOwner = userManager.getUserModel(owner);
-                               if (originOwner != null) {
-                                       originOwner.setRepositoryPermission(cloneName, AccessPermission.CLONE);
-                                       updateUserModel(originOwner.username, originOwner, false);
-                               }
-                       }
-               }
-
-               // grant origin's user list clone permission to fork
-               List<String> users = repositoryManager.getRepositoryUsers(repository);
-               List<UserModel> cloneUsers = new ArrayList<UserModel>();
-               for (String name : users) {
-                       if (!name.equalsIgnoreCase(user.username)) {
-                               UserModel cloneUser = userManager.getUserModel(name);
-                               if (cloneUser.canClone(repository)) {
-                                       // origin user can clone origin, grant clone access to fork
-                                       cloneUser.setRepositoryPermission(cloneName, AccessPermission.CLONE);
-                               }
-                               cloneUsers.add(cloneUser);
-                       }
-               }
-               userManager.updateUserModels(cloneUsers);
-
-               // grant origin's team list clone permission to fork
-               List<String> teams = repositoryManager.getRepositoryTeams(repository);
-               List<TeamModel> cloneTeams = new ArrayList<TeamModel>();
-               for (String name : teams) {
-                       TeamModel cloneTeam = userManager.getTeamModel(name);
-                       if (cloneTeam.canClone(repository)) {
-                               // origin team can clone origin, grant clone access to fork
-                               cloneTeam.setRepositoryPermission(cloneName, AccessPermission.CLONE);
-                       }
-                       cloneTeams.add(cloneTeam);
-               }
-               userManager.updateTeamModels(cloneTeams);
-
-               // add this clone to the cached model
-               repositoryManager.addToCachedRepositoryList(cloneModel);
-               return cloneModel;
-       }
-
-       /**
-        * Adds/updates a complete user object keyed by username. This method allows
-        * for renaming a user.
-        *
-        * @see IUserService.updateUserModel(String, UserModel)
-        * @param username
-        * @param user
-        * @param isCreate
-        * @throws GitBlitException
-        */
-       @Override
-       public void updateUserModel(String username, UserModel user, boolean isCreate)
-                       throws GitBlitException {
-               if (!username.equalsIgnoreCase(user.username)) {
-                       if (userManager.getUserModel(user.username) != null) {
-                               throw new GitBlitException(MessageFormat.format(
-                                               "Failed to rename ''{0}'' because ''{1}'' already exists.", username,
-                                               user.username));
-                       }
-
-                       // rename repositories and owner fields for all repositories
-                       for (RepositoryModel model : repositoryManager.getRepositoryModels(user)) {
-                               if (model.isUsersPersonalRepository(username)) {
-                                       // personal repository
-                                       model.addOwner(user.username);
-                                       String oldRepositoryName = model.name;
-                                       model.name = user.getPersonalPath() + model.name.substring(model.projectPath.length());
-                                       model.projectPath = user.getPersonalPath();
-                                       repositoryManager.updateRepositoryModel(oldRepositoryName, model, false);
-                               } else if (model.isOwner(username)) {
-                                       // common/shared repo
-                                       model.addOwner(user.username);
-                                       repositoryManager.updateRepositoryModel(model.name, model, false);
-                               }
-                       }
-               }
-               if (!userManager.updateUserModel(username, user)) {
-                       throw new GitBlitException(isCreate ? "Failed to add user!" : "Failed to update user!");
-               }
-       }
-
-       /**
-        * Updates the TeamModel object for the specified name.
-        *
-        * @param teamname
-        * @param team
-        * @param isCreate
-        */
-       @Override
-       public void updateTeamModel(String teamname, TeamModel team, boolean isCreate)
-                       throws GitBlitException {
-               if (!teamname.equalsIgnoreCase(team.name)) {
-                       if (userManager.getTeamModel(team.name) != null) {
-                               throw new GitBlitException(MessageFormat.format(
-                                               "Failed to rename ''{0}'' because ''{1}'' already exists.", teamname,
-                                               team.name));
-                       }
-               }
-               if (!userManager.updateTeamModel(teamname, team)) {
-                       throw new GitBlitException(isCreate ? "Failed to add team!" : "Failed to update team!");
-               }
-       }
-}
diff --git a/src/main/java/com/gitblit/manager/IGitblit.java b/src/main/java/com/gitblit/manager/IGitblit.java
new file mode 100644 (file)
index 0000000..c0167f0
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2013 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.manager;
+
+import java.util.Collection;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.gitblit.GitBlitException;
+import com.gitblit.models.GitClientApplication;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.RepositoryUrl;
+import com.gitblit.models.TeamModel;
+import com.gitblit.models.UserModel;
+
+public interface IGitblit extends IManager,
+                                                                       IRuntimeManager,
+                                                                       INotificationManager,
+                                                                       IUserManager,
+                                                                       IAuthenticationManager,
+                                                                       IRepositoryManager,
+                                                                       IProjectManager,
+                                                                       IFederationManager {
+
+       /**
+        * Returns a list of repository URLs and the user access permission.
+        *
+        * @param request
+        * @param user
+        * @param repository
+        * @return a list of repository urls
+        */
+       List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository);
+
+       /**
+        * Adds/updates a complete user object keyed by username. This method allows
+        * for renaming a user.
+        *
+        * @see IUserService.updateUserModel(String, UserModel)
+        * @param username
+        * @param user
+        * @param isCreate
+        * @throws GitBlitException
+        */
+       void updateUserModel(String username, UserModel user, boolean isCreate) throws GitBlitException;
+
+       /**
+        * Updates the TeamModel object for the specified name.
+        *
+        * @param teamname
+        * @param team
+        * @param isCreate
+        */
+       void updateTeamModel(String teamname, TeamModel team, boolean isCreate) throws GitBlitException;
+
+       /**
+        * Creates a personal fork of the specified repository. The clone is view
+        * restricted by default and the owner of the source repository is given
+        * access to the clone.
+        *
+        * @param repository
+        * @param user
+        * @return the repository model of the fork, if successful
+        * @throws GitBlitException
+        */
+       RepositoryModel fork(RepositoryModel repository, UserModel user) throws GitBlitException;
+
+       /**
+        * Returns the list of custom client applications to be used for the
+        * repository url panel;
+        *
+        * @return a collection of client applications
+        */
+       Collection<GitClientApplication> getClientApplications();
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gitblit/manager/IGitblitManager.java b/src/main/java/com/gitblit/manager/IGitblitManager.java
deleted file mode 100644 (file)
index 21c9e6a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2013 gitblit.com.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.gitblit.manager;
-
-import java.util.Collection;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import com.gitblit.GitBlitException;
-import com.gitblit.models.GitClientApplication;
-import com.gitblit.models.RepositoryModel;
-import com.gitblit.models.RepositoryUrl;
-import com.gitblit.models.TeamModel;
-import com.gitblit.models.UserModel;
-
-public interface IGitblitManager extends IManager {
-
-       /**
-        * Returns a list of repository URLs and the user access permission.
-        *
-        * @param request
-        * @param user
-        * @param repository
-        * @return a list of repository urls
-        */
-       List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository);
-
-       /**
-        * Adds/updates a complete user object keyed by username. This method allows
-        * for renaming a user.
-        *
-        * @see IUserService.updateUserModel(String, UserModel)
-        * @param username
-        * @param user
-        * @param isCreate
-        * @throws GitBlitException
-        */
-       void updateUserModel(String username, UserModel user, boolean isCreate) throws GitBlitException;
-
-       /**
-        * Updates the TeamModel object for the specified name.
-        *
-        * @param teamname
-        * @param team
-        * @param isCreate
-        */
-       void updateTeamModel(String teamname, TeamModel team, boolean isCreate) throws GitBlitException;
-
-       /**
-        * Creates a personal fork of the specified repository. The clone is view
-        * restricted by default and the owner of the source repository is given
-        * access to the clone.
-        *
-        * @param repository
-        * @param user
-        * @return the repository model of the fork, if successful
-        * @throws GitBlitException
-        */
-       RepositoryModel fork(RepositoryModel repository, UserModel user) throws GitBlitException;
-
-       /**
-        * Returns the list of custom client applications to be used for the
-        * repository url panel;
-        *
-        * @return a collection of client applications
-        */
-       Collection<GitClientApplication> getClientApplications();
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/gitblit/manager/IServicesManager.java b/src/main/java/com/gitblit/manager/IServicesManager.java
deleted file mode 100644 (file)
index 9fdd063..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2013 gitblit.com.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.gitblit.manager;
-
-
-public interface IServicesManager extends IManager {
-
-}
index 4cf074389a03c303616e865dc628f465c715a93a..6cc945621e5984bc2112c960299030224f992fd7 100644 (file)
@@ -24,9 +24,13 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
+import javax.servlet.http.HttpServletRequest;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.gitblit.Constants.AccessPermission;
+import com.gitblit.Constants.AccessRestrictionType;
 import com.gitblit.Constants.FederationToken;
 import com.gitblit.GitBlit;
 import com.gitblit.IStoredSettings;
@@ -36,6 +40,8 @@ import com.gitblit.fanout.FanoutService;
 import com.gitblit.fanout.FanoutSocketService;
 import com.gitblit.git.GitDaemon;
 import com.gitblit.models.FederationModel;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.UserModel;
 import com.gitblit.service.FederationPullService;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.utils.TimeUtils;
@@ -48,7 +54,7 @@ import com.gitblit.utils.TimeUtils;
  * @author James Moger
  *
  */
-public class ServicesManager implements IServicesManager {
+public class ServicesManager implements IManager {
 
        private final Logger logger = LoggerFactory.getLogger(getClass());
 
@@ -163,6 +169,43 @@ public class ServicesManager implements IServicesManager {
                }
        }
 
+       public String getGitDaemonUrl(HttpServletRequest request, UserModel user, RepositoryModel repository) {
+               if (gitDaemon != null) {
+                       String bindInterface = settings.getString(Keys.git.daemonBindInterface, "localhost");
+                       if (bindInterface.equals("localhost")
+                                       && (!request.getServerName().equals("localhost") && !request.getServerName().equals("127.0.0.1"))) {
+                               // git daemon is bound to localhost and the request is from elsewhere
+                               return null;
+                       }
+                       if (user.canClone(repository)) {
+                               String servername = request.getServerName();
+                               String url = gitDaemon.formatUrl(servername, repository.name);
+                               return url;
+                       }
+               }
+               return null;
+       }
+
+       public AccessPermission getGitDaemonAccessPermission(UserModel user, RepositoryModel repository) {
+               if (gitDaemon != null && user.canClone(repository)) {
+                       AccessPermission gitDaemonPermission = user.getRepositoryPermission(repository).permission;
+                       if (gitDaemonPermission.atLeast(AccessPermission.CLONE)) {
+                               if (repository.accessRestriction.atLeast(AccessRestrictionType.CLONE)) {
+                                       // can not authenticate clone via anonymous git protocol
+                                       gitDaemonPermission = AccessPermission.NONE;
+                               } else if (repository.accessRestriction.atLeast(AccessRestrictionType.PUSH)) {
+                                       // can not authenticate push via anonymous git protocol
+                                       gitDaemonPermission = AccessPermission.CLONE;
+                               } else {
+                                       // normal user permission
+                               }
+                       }
+                       return gitDaemonPermission;
+               }
+               return AccessPermission.NONE;
+       }
+
+
        private class FederationPuller extends FederationPullService {
 
                public FederationPuller(FederationModel registration) {
index a86ecf683cf4b423014d1ef5ba5d651816462107..ca9a67c1704780f1a683f312a7c89b40b37bf218 100644 (file)
@@ -43,13 +43,12 @@ import com.gitblit.dagger.DaggerContextListener;
 import com.gitblit.git.GitServlet;
 import com.gitblit.manager.IAuthenticationManager;
 import com.gitblit.manager.IFederationManager;
-import com.gitblit.manager.IGitblitManager;
+import com.gitblit.manager.IGitblit;
 import com.gitblit.manager.IManager;
 import com.gitblit.manager.INotificationManager;
 import com.gitblit.manager.IProjectManager;
 import com.gitblit.manager.IRepositoryManager;
 import com.gitblit.manager.IRuntimeManager;
-import com.gitblit.manager.IServicesManager;
 import com.gitblit.manager.IUserManager;
 import com.gitblit.utils.ContainerUtils;
 import com.gitblit.utils.StringUtils;
@@ -173,9 +172,8 @@ public class GitblitContext extends DaggerContextListener {
                startManager(injector, IAuthenticationManager.class);
                startManager(injector, IRepositoryManager.class);
                startManager(injector, IProjectManager.class);
-               startManager(injector, IGitblitManager.class);
                startManager(injector, IFederationManager.class);
-               startManager(injector, IServicesManager.class);
+               startManager(injector, IGitblit.class);
 
                logger.info("");
                logger.info("All managers started.");
index a2013b7355de03000f020346b7b68ff11af76d94..481a8bae38aa31d15441585718576b4067b15b5b 100644 (file)
@@ -36,11 +36,7 @@ import com.gitblit.Constants.RpcRequest;
 import com.gitblit.GitBlitException;\r
 import com.gitblit.IStoredSettings;\r
 import com.gitblit.Keys;\r
-import com.gitblit.manager.IFederationManager;\r
-import com.gitblit.manager.IGitblitManager;\r
-import com.gitblit.manager.IRepositoryManager;\r
-import com.gitblit.manager.IRuntimeManager;\r
-import com.gitblit.manager.IUserManager;\r
+import com.gitblit.manager.IGitblit;\r
 import com.gitblit.models.RefModel;\r
 import com.gitblit.models.RegistrantAccessPermission;\r
 import com.gitblit.models.RepositoryModel;\r
@@ -68,32 +64,15 @@ public class RpcServlet extends JsonServlet {
 \r
        private final IStoredSettings settings;\r
 \r
-       private final IRuntimeManager runtimeManager;\r
-\r
-       private final IUserManager userManager;\r
-\r
-       private final IRepositoryManager repositoryManager;\r
-\r
-       private final IFederationManager federationManager;\r
-\r
-       private final IGitblitManager gitblitManager;\r
+       private final IGitblit gitblit;\r
 \r
        @Inject\r
-       public RpcServlet(\r
-                       IRuntimeManager runtimeManager,\r
-                       IUserManager userManager,\r
-                       IRepositoryManager repositoryManager,\r
-                       IFederationManager federationManager,\r
-                       IGitblitManager gitblitManager) {\r
+       public RpcServlet(IGitblit gitblit) {\r
 \r
                super();\r
 \r
-               this.settings = runtimeManager.getSettings();\r
-               this.runtimeManager = runtimeManager;\r
-               this.userManager = userManager;\r
-               this.repositoryManager = repositoryManager;\r
-               this.federationManager = federationManager;\r
-               this.gitblitManager = gitblitManager;\r
+               this.settings = gitblit.getSettings();\r
+               this.gitblit = gitblit;\r
        }\r
 \r
        /**\r
@@ -134,7 +113,7 @@ public class RpcServlet extends JsonServlet {
                        String cloneUrl = sb.toString();\r
 \r
                        // list repositories\r
-                       List<RepositoryModel> list = repositoryManager.getRepositoryModels(user);\r
+                       List<RepositoryModel> list = gitblit.getRepositoryModels(user);\r
                        Map<String, RepositoryModel> repositories = new HashMap<String, RepositoryModel>();\r
                        for (RepositoryModel model : list) {\r
                                String url = MessageFormat.format(cloneUrl, model.name);\r
@@ -144,7 +123,7 @@ public class RpcServlet extends JsonServlet {
                } else if (RpcRequest.LIST_BRANCHES.equals(reqType)) {\r
                        // list all local branches in all repositories accessible to user\r
                        Map<String, List<String>> localBranches = new HashMap<String, List<String>>();\r
-                       List<RepositoryModel> models = repositoryManager.getRepositoryModels(user);\r
+                       List<RepositoryModel> models = gitblit.getRepositoryModels(user);\r
                        for (RepositoryModel model : models) {\r
                                if (!model.hasCommits) {\r
                                        // skip empty repository\r
@@ -156,7 +135,7 @@ public class RpcServlet extends JsonServlet {
                                        continue;\r
                                }\r
                                // get local branches\r
-                               Repository repository = repositoryManager.getRepository(model.name);\r
+                               Repository repository = gitblit.getRepository(model.name);\r
                                List<RefModel> refs = JGitUtils.getLocalBranches(repository, false, -1);\r
                                if (model.showRemoteBranches) {\r
                                        // add remote branches if repository displays them\r
@@ -184,7 +163,7 @@ public class RpcServlet extends JsonServlet {
                        } else {\r
                                if (user.canAdmin() || objectName.equals(user.username)) {\r
                                        // return the specified user\r
-                                       UserModel requestedUser = userManager.getUserModel(objectName);\r
+                                       UserModel requestedUser = gitblit.getUserModel(objectName);\r
                                        if (requestedUser == null) {\r
                                                response.setStatus(failureCode);\r
                                        } else {\r
@@ -196,25 +175,25 @@ public class RpcServlet extends JsonServlet {
                        }\r
                } else if (RpcRequest.LIST_USERS.equals(reqType)) {\r
                        // list users\r
-                       List<String> names = userManager.getAllUsernames();\r
+                       List<String> names = gitblit.getAllUsernames();\r
                        List<UserModel> users = new ArrayList<UserModel>();\r
                        for (String name : names) {\r
-                               users.add(userManager.getUserModel(name));\r
+                               users.add(gitblit.getUserModel(name));\r
                        }\r
                        result = users;\r
                } else if (RpcRequest.LIST_TEAMS.equals(reqType)) {\r
                        // list teams\r
-                       List<String> names = userManager.getAllTeamNames();\r
+                       List<String> names = gitblit.getAllTeamNames();\r
                        List<TeamModel> teams = new ArrayList<TeamModel>();\r
                        for (String name : names) {\r
-                               teams.add(userManager.getTeamModel(name));\r
+                               teams.add(gitblit.getTeamModel(name));\r
                        }\r
                        result = teams;\r
                } else if (RpcRequest.CREATE_REPOSITORY.equals(reqType)) {\r
                        // create repository\r
                        RepositoryModel model = deserialize(request, response, RepositoryModel.class);\r
                        try {\r
-                               repositoryManager.updateRepositoryModel(model.name, model, true);\r
+                               gitblit.updateRepositoryModel(model.name, model, true);\r
                        } catch (GitBlitException e) {\r
                                response.setStatus(failureCode);\r
                        }\r
@@ -227,19 +206,19 @@ public class RpcServlet extends JsonServlet {
                                repoName = model.name;\r
                        }\r
                        try {\r
-                               repositoryManager.updateRepositoryModel(repoName, model, false);\r
+                               gitblit.updateRepositoryModel(repoName, model, false);\r
                        } catch (GitBlitException e) {\r
                                response.setStatus(failureCode);\r
                        }\r
                } else if (RpcRequest.DELETE_REPOSITORY.equals(reqType)) {\r
                        // delete repository\r
                        RepositoryModel model = deserialize(request, response, RepositoryModel.class);\r
-                       repositoryManager.deleteRepositoryModel(model);\r
+                       gitblit.deleteRepositoryModel(model);\r
                } else if (RpcRequest.CREATE_USER.equals(reqType)) {\r
                        // create user\r
                        UserModel model = deserialize(request, response, UserModel.class);\r
                        try {\r
-                               gitblitManager.updateUserModel(model.username, model, true);\r
+                               gitblit.updateUserModel(model.username, model, true);\r
                        } catch (GitBlitException e) {\r
                                response.setStatus(failureCode);\r
                        }\r
@@ -252,21 +231,21 @@ public class RpcServlet extends JsonServlet {
                                username = model.username;\r
                        }\r
                        try {\r
-                               gitblitManager.updateUserModel(username, model, false);\r
+                               gitblit.updateUserModel(username, model, false);\r
                        } catch (GitBlitException e) {\r
                                response.setStatus(failureCode);\r
                        }\r
                } else if (RpcRequest.DELETE_USER.equals(reqType)) {\r
                        // delete user\r
                        UserModel model = deserialize(request, response, UserModel.class);\r
-                       if (!userManager.deleteUser(model.username)) {\r
+                       if (!gitblit.deleteUser(model.username)) {\r
                                response.setStatus(failureCode);\r
                        }\r
                } else if (RpcRequest.CREATE_TEAM.equals(reqType)) {\r
                        // create team\r
                        TeamModel model = deserialize(request, response, TeamModel.class);\r
                        try {\r
-                               gitblitManager.updateTeamModel(model.name, model, true);\r
+                               gitblit.updateTeamModel(model.name, model, true);\r
                        } catch (GitBlitException e) {\r
                                response.setStatus(failureCode);\r
                        }\r
@@ -279,80 +258,80 @@ public class RpcServlet extends JsonServlet {
                                teamname = model.name;\r
                        }\r
                        try {\r
-                               gitblitManager.updateTeamModel(teamname, model, false);\r
+                               gitblit.updateTeamModel(teamname, model, false);\r
                        } catch (GitBlitException e) {\r
                                response.setStatus(failureCode);\r
                        }\r
                } else if (RpcRequest.DELETE_TEAM.equals(reqType)) {\r
                        // delete team\r
                        TeamModel model = deserialize(request, response, TeamModel.class);\r
-                       if (!userManager.deleteTeam(model.name)) {\r
+                       if (!gitblit.deleteTeam(model.name)) {\r
                                response.setStatus(failureCode);\r
                        }\r
                } else if (RpcRequest.LIST_REPOSITORY_MEMBERS.equals(reqType)) {\r
                        // get repository members\r
-                       RepositoryModel model = repositoryManager.getRepositoryModel(objectName);\r
-                       result = repositoryManager.getRepositoryUsers(model);\r
+                       RepositoryModel model = gitblit.getRepositoryModel(objectName);\r
+                       result = gitblit.getRepositoryUsers(model);\r
                } else if (RpcRequest.SET_REPOSITORY_MEMBERS.equals(reqType)) {\r
                        // rejected since 1.2.0\r
                        response.setStatus(failureCode);\r
                } else if (RpcRequest.LIST_REPOSITORY_MEMBER_PERMISSIONS.equals(reqType)) {\r
                        // get repository member permissions\r
-                       RepositoryModel model = repositoryManager.getRepositoryModel(objectName);\r
-                       result = repositoryManager.getUserAccessPermissions(model);\r
+                       RepositoryModel model = gitblit.getRepositoryModel(objectName);\r
+                       result = gitblit.getUserAccessPermissions(model);\r
                } else if (RpcRequest.SET_REPOSITORY_MEMBER_PERMISSIONS.equals(reqType)) {\r
                        // set the repository permissions for the specified users\r
-                       RepositoryModel model = repositoryManager.getRepositoryModel(objectName);\r
+                       RepositoryModel model = gitblit.getRepositoryModel(objectName);\r
                        Collection<RegistrantAccessPermission> permissions = deserialize(request, response, RpcUtils.REGISTRANT_PERMISSIONS_TYPE);\r
-                       result = repositoryManager.setUserAccessPermissions(model, permissions);\r
+                       result = gitblit.setUserAccessPermissions(model, permissions);\r
                } else if (RpcRequest.LIST_REPOSITORY_TEAMS.equals(reqType)) {\r
                        // get repository teams\r
-                       RepositoryModel model = repositoryManager.getRepositoryModel(objectName);\r
-                       result = repositoryManager.getRepositoryTeams(model);\r
+                       RepositoryModel model = gitblit.getRepositoryModel(objectName);\r
+                       result = gitblit.getRepositoryTeams(model);\r
                } else if (RpcRequest.SET_REPOSITORY_TEAMS.equals(reqType)) {\r
                        // rejected since 1.2.0\r
                        response.setStatus(failureCode);\r
                } else if (RpcRequest.LIST_REPOSITORY_TEAM_PERMISSIONS.equals(reqType)) {\r
                        // get repository team permissions\r
-                       RepositoryModel model = repositoryManager.getRepositoryModel(objectName);\r
-                       result = repositoryManager.getTeamAccessPermissions(model);\r
+                       RepositoryModel model = gitblit.getRepositoryModel(objectName);\r
+                       result = gitblit.getTeamAccessPermissions(model);\r
                } else if (RpcRequest.SET_REPOSITORY_TEAM_PERMISSIONS.equals(reqType)) {\r
                        // set the repository permissions for the specified teams\r
-                       RepositoryModel model = repositoryManager.getRepositoryModel(objectName);\r
+                       RepositoryModel model = gitblit.getRepositoryModel(objectName);\r
                        Collection<RegistrantAccessPermission> permissions = deserialize(request, response, RpcUtils.REGISTRANT_PERMISSIONS_TYPE);\r
-                       result = repositoryManager.setTeamAccessPermissions(model, permissions);\r
+                       result = gitblit.setTeamAccessPermissions(model, permissions);\r
                } else if (RpcRequest.LIST_FEDERATION_REGISTRATIONS.equals(reqType)) {\r
                        // return the list of federation registrations\r
                        if (allowAdmin) {\r
-                               result = federationManager.getFederationRegistrations();\r
+                               result = gitblit.getFederationRegistrations();\r
                        } else {\r
                                response.sendError(notAllowedCode);\r
                        }\r
                } else if (RpcRequest.LIST_FEDERATION_RESULTS.equals(reqType)) {\r
                        // return the list of federation result registrations\r
-                       if (allowAdmin && federationManager.canFederate()) {\r
-                               result = federationManager.getFederationResultRegistrations();\r
+                       if (allowAdmin && gitblit.canFederate()) {\r
+                               result = gitblit.getFederationResultRegistrations();\r
                        } else {\r
                                response.sendError(notAllowedCode);\r
                        }\r
                } else if (RpcRequest.LIST_FEDERATION_PROPOSALS.equals(reqType)) {\r
                        // return the list of federation proposals\r
-                       if (allowAdmin && federationManager.canFederate()) {\r
-                               result = federationManager.getPendingFederationProposals();\r
+                       if (allowAdmin && gitblit.canFederate()) {\r
+                               result = gitblit.getPendingFederationProposals();\r
                        } else {\r
                                response.sendError(notAllowedCode);\r
                        }\r
                } else if (RpcRequest.LIST_FEDERATION_SETS.equals(reqType)) {\r
                        // return the list of federation sets\r
-                       if (allowAdmin && federationManager.canFederate()) {\r
+                       if (allowAdmin && gitblit.canFederate()) {\r
                                String gitblitUrl = HttpUtils.getGitblitURL(request);\r
-                               result = federationManager.getFederationSets(gitblitUrl);\r
+                               result = gitblit.getFederationSets(gitblitUrl);\r
                        } else {\r
                                response.sendError(notAllowedCode);\r
                        }\r
                } else if (RpcRequest.LIST_SETTINGS.equals(reqType)) {\r
                        // return the server's settings\r
-                       ServerSettings serverSettings = runtimeManager.getSettingsModel();\r
+                       ServerSettings serverSettings = gitblit.getSettingsModel();\r
                        if (allowAdmin) {\r
                                // return all settings\r
                                result = serverSettings;\r
@@ -384,21 +363,21 @@ public class RpcServlet extends JsonServlet {
                        if (allowAdmin) {\r
                                Map<String, String> map = deserialize(request, response,\r
                                                RpcUtils.SETTINGS_TYPE);\r
-                               runtimeManager.updateSettings(map);\r
+                               gitblit.updateSettings(map);\r
                        } else {\r
                                response.sendError(notAllowedCode);\r
                        }\r
                } else if (RpcRequest.LIST_STATUS.equals(reqType)) {\r
                        // return the server's status information\r
                        if (allowAdmin) {\r
-                               result = runtimeManager.getStatus();\r
+                               result = gitblit.getStatus();\r
                        } else {\r
                                response.sendError(notAllowedCode);\r
                        }\r
                } else if (RpcRequest.CLEAR_REPOSITORY_CACHE.equals(reqType)) {\r
                        // clear the repository list cache\r
                        if (allowManagement) {\r
-                               repositoryManager.resetRepositoryListCache();\r
+                               gitblit.resetRepositoryListCache();\r
                        } else {\r
                                response.sendError(notAllowedCode);\r
                        }\r
index 1409e4743ed216c450eca5ab5c7f8ed42a7e4ba1..35a0823b90e757084b89596b98a67710e09d1c60 100644 (file)
@@ -30,13 +30,13 @@ import org.apache.wicket.protocol.http.WebApplication;
 
 import com.gitblit.IStoredSettings;
 import com.gitblit.Keys;
+import com.gitblit.manager.IAuthenticationManager;
 import com.gitblit.manager.IFederationManager;
-import com.gitblit.manager.IGitblitManager;
+import com.gitblit.manager.IGitblit;
 import com.gitblit.manager.INotificationManager;
 import com.gitblit.manager.IProjectManager;
 import com.gitblit.manager.IRepositoryManager;
 import com.gitblit.manager.IRuntimeManager;
-import com.gitblit.manager.IAuthenticationManager;
 import com.gitblit.manager.IUserManager;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.pages.ActivityPage;
@@ -95,10 +95,10 @@ public class GitBlitWebApp extends WebApplication {
 
        private final IProjectManager projectManager;
 
-       private final IGitblitManager gitblitManager;
-
        private final IFederationManager federationManager;
 
+       private final IGitblit gitblit;
+
        public GitBlitWebApp(
                        IRuntimeManager runtimeManager,
                        INotificationManager notificationManager,
@@ -106,8 +106,8 @@ public class GitBlitWebApp extends WebApplication {
                        IAuthenticationManager authenticationManager,
                        IRepositoryManager repositoryManager,
                        IProjectManager projectManager,
-                       IGitblitManager gitblitManager,
-                       IFederationManager federationManager) {
+                       IFederationManager federationManager,
+                       IGitblit gitblit) {
 
                super();
                this.settings = runtimeManager.getSettings();
@@ -117,8 +117,8 @@ public class GitBlitWebApp extends WebApplication {
                this.authenticationManager = authenticationManager;
                this.repositoryManager = repositoryManager;
                this.projectManager = projectManager;
-               this.gitblitManager = gitblitManager;
                this.federationManager = federationManager;
+               this.gitblit = gitblit;
        }
 
        @Override
@@ -185,7 +185,7 @@ public class GitBlitWebApp extends WebApplication {
                mount("/user", UserPage.class, "user");
                mount("/forks", ForksPage.class, "r");
                mount("/fork", ForkPage.class, "r");
-               
+
                getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
                super.init();
        }
@@ -283,8 +283,8 @@ public class GitBlitWebApp extends WebApplication {
                return federationManager;
        }
 
-       public IGitblitManager gitblit() {
-               return gitblitManager;
+       public IGitblit gitblit() {
+               return gitblit;
        }
 
        public TimeZone getTimezone() {
index 1885f127dff188b409283124b3bf18aba8c09c22..6539d656539071b36546546731b0b0a378bde096 100644 (file)
@@ -17,7 +17,7 @@ package com.gitblit.tests;
 
 import com.gitblit.IStoredSettings;
 import com.gitblit.manager.IFederationManager;
-import com.gitblit.manager.IGitblitManager;
+import com.gitblit.manager.IGitblit;
 import com.gitblit.manager.INotificationManager;
 import com.gitblit.manager.IProjectManager;
 import com.gitblit.manager.IRepositoryManager;
@@ -61,7 +61,7 @@ public class GitblitUnitTest extends org.junit.Assert {
                return GitblitContext.getManager(IFederationManager.class);
        }
 
-       public static IGitblitManager gitblit() {
-               return GitblitContext.getManager(IGitblitManager.class);
+       public static IGitblit gitblit() {
+               return GitblitContext.getManager(IGitblit.class);
        }
 }