Browse Source

LfsProtocolServlet: Pass HTTP Authorization header to getLargeFileRepository

This allows implementations to reject operations that do not
include proper authentication.

Change-Id: If301476d8fb56a0899e424be3789c7576097d185
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
tags/v4.7.0.201704051617-r
David Pursehouse 7 years ago
parent
commit
5094c1a5c8

+ 49
- 2
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java View File

@@ -54,6 +54,7 @@ import static org.apache.http.HttpStatus.SC_UNPROCESSABLE_ENTITY;
import static org.eclipse.jgit.lfs.lib.Constants.DOWNLOAD;
import static org.eclipse.jgit.lfs.lib.Constants.UPLOAD;
import static org.eclipse.jgit.lfs.lib.Constants.VERIFY;
import static org.eclipse.jgit.util.HttpSupport.HDR_AUTHORIZATION;

import java.io.BufferedReader;
import java.io.BufferedWriter;
@@ -143,9 +144,54 @@ public abstract class LfsProtocolServlet extends HttpServlet {
* <dd>when an unexpected internal server error occurred</dd>
* </dl>
* @since 4.5
* @deprecated use
* {@link #getLargeFileRepository(LfsRequest, String, String)}
*/
@Deprecated
protected LargeFileRepository getLargeFileRepository(LfsRequest request,
String path) throws LfsException {
return getLargeFileRepository(request, path, null);
}

/**
* Get the large file repository for the given request and path.
*
* @param request
* the request
* @param path
* the path
* @param auth
* the Authorization HTTP header
*
* @return the large file repository storing large files.
* @throws LfsException
* implementations should throw more specific exceptions to
* signal which type of error occurred:
* <dl>
* <dt>{@link LfsValidationError}</dt>
* <dd>when there is a validation error with one or more of the
* objects in the request</dd>
* <dt>{@link LfsRepositoryNotFound}</dt>
* <dd>when the repository does not exist for the user</dd>
* <dt>{@link LfsRepositoryReadOnly}</dt>
* <dd>when the user has read, but not write access. Only
* applicable when the operation in the request is "upload"</dd>
* <dt>{@link LfsRateLimitExceeded}</dt>
* <dd>when the user has hit a rate limit with the server</dd>
* <dt>{@link LfsBandwidthLimitExceeded}</dt>
* <dd>when the bandwidth limit for the user or repository has
* been exceeded</dd>
* <dt>{@link LfsInsufficientStorage}</dt>
* <dd>when there is insufficient storage on the server</dd>
* <dt>{@link LfsUnavailable}</dt>
* <dd>when LFS is not available</dd>
* <dt>{@link LfsException}</dt>
* <dd>when an unexpected internal server error occurred</dd>
* </dl>
* @since 4.7
*/
protected abstract LargeFileRepository getLargeFileRepository(
LfsRequest request, String path) throws LfsException;
LfsRequest request, String path, String auth) throws LfsException;

/**
* LFS request.
@@ -214,7 +260,8 @@ public abstract class LfsProtocolServlet extends HttpServlet {
res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON);
LargeFileRepository repo = null;
try {
repo = getLargeFileRepository(request, path);
repo = getLargeFileRepository(request, path,
req.getHeader(HDR_AUTHORIZATION));
if (repo == null) {
String error = MessageFormat
.format(LfsText.get().lfsFailedToGetRepository, path);

+ 1
- 1
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/LfsStore.java View File

@@ -255,7 +255,7 @@ class LfsStore extends TextBuiltin {

@Override
protected LargeFileRepository getLargeFileRepository(
LfsRequest request, String path) {
LfsRequest request, String path, String auth) {
return repository;
}
};

Loading…
Cancel
Save