From a413ed7c41880cec3c224501dd2ed874fdbeef17 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sun, 22 Nov 2015 14:53:36 -0500
Subject: [PATCH] Reset build identifiers for next point release cycle
---
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