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;
IAuthenticationManager.class,
IRepositoryManager.class,
IProjectManager.class,
- IGitblitManager.class,
IFederationManager.class,
- IServicesManager.class,
// the monolithic manager
- GitBlit.class,
+ IGitblit.class,
// filters & servlets
GitServlet.class,
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(
authenticationManager,
repositoryManager,
projectManager,
- gitblitManager,
federationManager);
}
- @Provides @Singleton IServicesManager provideServicesManager(GitBlit gitblit) {
- return new ServicesManager(gitblit);
- }
-
@Provides @Singleton WebApplication provideWebApplication(
IRuntimeManager runtimeManager,
INotificationManager notificationManager,
IAuthenticationManager authenticationManager,
IRepositoryManager repositoryManager,
IProjectManager projectManager,
- IGitblitManager gitblitManager,
- IFederationManager federationManager) {
+ IFederationManager federationManager,
+ IGitblit gitblit) {
return new GitBlitWebApp(
runtimeManager,
authenticationManager,
repositoryManager,
projectManager,
- gitblitManager,
- federationManager);
+ federationManager,
+ gitblit);
}
}
\ No newline at end of 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;
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;
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
* @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;
private final IProjectManager projectManager;
- private final IGitblitManager gitblitManager;
-
private final IFederationManager federationManager;
+ private final ServicesManager servicesManager;
+
public GitBlit(
IRuntimeManager runtimeManager,
INotificationManager notificationManager,
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
*
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();
- }
}
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
\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
\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
\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
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;
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;
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;
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;
}
+++ /dev/null
-/*
- * 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!");
- }
- }
-}
--- /dev/null
+/*
+ * 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
+++ /dev/null
-/*
- * 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
+++ /dev/null
-/*
- * 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 {
-
-}
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;
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;
* @author James Moger
*
*/
-public class ServicesManager implements IServicesManager {
+public class ServicesManager implements IManager {
private final Logger logger = LoggerFactory.getLogger(getClass());
}
}
+ 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) {
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;
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.");
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
\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
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
} 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
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
} 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
}\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
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
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
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
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
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;
private final IProjectManager projectManager;
- private final IGitblitManager gitblitManager;
-
private final IFederationManager federationManager;
+ private final IGitblit gitblit;
+
public GitBlitWebApp(
IRuntimeManager runtimeManager,
INotificationManager notificationManager,
IAuthenticationManager authenticationManager,
IRepositoryManager repositoryManager,
IProjectManager projectManager,
- IGitblitManager gitblitManager,
- IFederationManager federationManager) {
+ IFederationManager federationManager,
+ IGitblit gitblit) {
super();
this.settings = runtimeManager.getSettings();
this.authenticationManager = authenticationManager;
this.repositoryManager = repositoryManager;
this.projectManager = projectManager;
- this.gitblitManager = gitblitManager;
this.federationManager = federationManager;
+ this.gitblit = gitblit;
}
@Override
mount("/user", UserPage.class, "user");
mount("/forks", ForksPage.class, "r");
mount("/fork", ForkPage.class, "r");
-
+
getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
super.init();
}
return federationManager;
}
- public IGitblitManager gitblit() {
- return gitblitManager;
+ public IGitblit gitblit() {
+ return gitblit;
}
public TimeZone getTimezone() {
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;
return GitblitContext.getManager(IFederationManager.class);
}
- public static IGitblitManager gitblit() {
- return GitblitContext.getManager(IGitblitManager.class);
+ public static IGitblit gitblit() {
+ return GitblitContext.getManager(IGitblit.class);
}
}