From 75a907eeabb2983bda2bd1081eacb8a7d94db63b Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 24 Nov 2014 09:34:46 -0500 Subject: [PATCH] Add .bat and .cmd to the pretty print extensions --- src/main/java/com/gitblit/manager/FederationManager.java | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gitblit/manager/FederationManager.java b/src/main/java/com/gitblit/manager/FederationManager.java index 07d2018..f009c1c 100644 --- a/src/main/java/com/gitblit/manager/FederationManager.java +++ b/src/main/java/com/gitblit/manager/FederationManager.java @@ -17,6 +17,7 @@ import java.io.File; import java.io.FileFilter; +import java.nio.charset.Charset; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; @@ -24,6 +25,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; + +import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,9 +41,12 @@ import com.gitblit.models.FederationSet; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.Base64; import com.gitblit.utils.FederationUtils; import com.gitblit.utils.JsonUtils; import com.gitblit.utils.StringUtils; +import com.google.inject.Inject; +import com.google.inject.Singleton; /** * Federation manager controls all aspects of handling federation sets, tokens, @@ -49,6 +55,7 @@ * @author James Moger * */ +@Singleton public class FederationManager implements IFederationManager { private final Logger logger = LoggerFactory.getLogger(getClass()); @@ -66,10 +73,10 @@ private final IRepositoryManager repositoryManager; + @Inject public FederationManager( IRuntimeManager runtimeManager, INotificationManager notificationManager, - IUserManager userManager, IRepositoryManager repositoryManager) { this.settings = runtimeManager.getSettings(); @@ -100,6 +107,17 @@ } @Override + public boolean canFederate() { + String passphrase = settings.getString(Keys.federation.passphrase, ""); + return !StringUtils.isEmpty(passphrase); + } + + /** + * Returns the federation user account. + * + * @return the federation user account + */ + @Override public UserModel getFederationUser() { // the federation user is an administrator UserModel federationUser = new UserModel(Constants.FEDERATION_USER); @@ -108,9 +126,30 @@ } @Override - public boolean canFederate() { - String passphrase = settings.getString(Keys.federation.passphrase, ""); - return !StringUtils.isEmpty(passphrase); + public UserModel authenticate(HttpServletRequest httpRequest) { + if (canFederate()) { + // try to authenticate federation user for cloning + final String authorization = httpRequest.getHeader("Authorization"); + if (authorization != null && authorization.startsWith("Basic")) { + // Authorization: Basic base64credentials + String base64Credentials = authorization.substring("Basic".length()).trim(); + String credentials = new String(Base64.decode(base64Credentials), + Charset.forName("UTF-8")); + // credentials = username:password + final String[] values = credentials.split(":", 2); + if (values.length == 2) { + String username = StringUtils.decodeUsername(values[0]); + String password = values[1]; + if (username.equalsIgnoreCase(Constants.FEDERATION_USER)) { + List<String> tokens = getFederationTokens(); + if (tokens.contains(password)) { + return getFederationUser(); + } + } + } + } + } + return null; } /** @@ -357,7 +396,7 @@ // Determine the Gitblit clone url StringBuilder sb = new StringBuilder(); sb.append(gitblitUrl); - sb.append(Constants.GIT_PATH); + sb.append(Constants.R_PATH); sb.append("{0}"); String cloneUrl = sb.toString(); -- Gitblit v1.9.1