From 77c38a1865564a4ea4544bfb1f52bedf4326d481 Mon Sep 17 00:00:00 2001
From: Paul Martin <paul@paulsputer.com>
Date: Mon, 21 Mar 2016 13:41:19 -0400
Subject: [PATCH] Fix for #1018 and #1025 browser LFS links

---
 src/main/java/com/gitblit/wicket/pages/TreePage.java |   83 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/TreePage.java b/src/main/java/com/gitblit/wicket/pages/TreePage.java
index f138214..3961e04 100644
--- a/src/main/java/com/gitblit/wicket/pages/TreePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TreePage.java
@@ -15,26 +15,33 @@
  */
 package com.gitblit.wicket.pages;
 
+import java.io.OutputStream;
 import java.util.List;
 
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.link.ExternalLink;
+import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
 import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.apache.wicket.request.target.resource.ResourceStreamRequestTarget;
+import org.apache.wicket.util.resource.AbstractResourceStreamWriter;
+import org.apache.wicket.util.resource.IResourceStream;
 import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 
 import com.gitblit.models.PathModel;
 import com.gitblit.models.SubmoduleModel;
+import com.gitblit.models.UserModel;
 import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.ByteFormat;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.wicket.CacheControl;
+import com.gitblit.wicket.GitBlitWebSession;
 import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.panels.CommitHeaderPanel;
@@ -88,7 +95,7 @@
 
 			@Override
 			public void populateItem(final Item<PathModel> item) {
-				PathModel entry = item.getModelObject();
+				final PathModel entry = item.getModelObject();
 				
 				item.add(new Label("pathPermissions", JGitUtils.getPermissionsFromMode(entry.mode)));
 				
@@ -170,11 +177,77 @@
 						if (entry.isFilestoreItem()) {
 							item.add(new Label("filestore", getString("gb.filestore")).setVisible(true));
 							
-							final String filestoreItemUrl = JGitUtils.getLfsRepositoryUrl(getContextUrl(), repositoryName, entry.getFilestoreOid());
+							item.add(new LinkPanel("pathName", "list", displayPath, new Link<Object>("link", null) {
+								 
+								private static final long serialVersionUID = 1L;
+
+								@Override
+							    public void onClick() {
+							 
+							    	 IResourceStream resourceStream = new AbstractResourceStreamWriter() {
+							    		 								    	
+										private static final long serialVersionUID = 1L;
+
+										@Override 
+							    	      public void write(OutputStream output) {
+							    	   		 UserModel user =  GitBlitWebSession.get().getUser();
+										     user = user == null ? UserModel.ANONYMOUS : user;
+										    	
+							    	        app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output);
+							    	      }
+							    	  };
+							    	      
+							    	
+							    	getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path));
+							    }}));
 							
-							item.add(new LinkPanel("pathName", "list", displayPath, filestoreItemUrl));
-							links.add(new ExternalLink("view", filestoreItemUrl));
-							links.add(new ExternalLink("raw", filestoreItemUrl));
+							links.add(new Link<Object>("view", null) {
+								 
+								private static final long serialVersionUID = 1L;
+
+								@Override
+							    public void onClick() {
+							 
+							    	 IResourceStream resourceStream = new AbstractResourceStreamWriter() {
+							    		 								    	
+										private static final long serialVersionUID = 1L;
+
+										@Override 
+							    	      public void write(OutputStream output) {
+							    	   		 UserModel user =  GitBlitWebSession.get().getUser();
+										     user = user == null ? UserModel.ANONYMOUS : user;
+										    	
+							    	        app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output);
+							    	      }
+							    	  };
+							    	      
+							    	
+							    	getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path));
+							    }});
+							
+							links.add(new Link<Object>("raw", null) {
+								 
+								private static final long serialVersionUID = 1L;
+
+								@Override
+							    public void onClick() {
+							 
+							    	 IResourceStream resourceStream = new AbstractResourceStreamWriter() {
+							    		 								    	
+										private static final long serialVersionUID = 1L;
+
+										@Override 
+							    	      public void write(OutputStream output) {
+							    	   		 UserModel user =  GitBlitWebSession.get().getUser();
+										     user = user == null ? UserModel.ANONYMOUS : user;
+										    	
+							    	        app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output);
+							    	      }
+							    	  };
+							    	      
+							    	
+							    	getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path));
+							    }});
 							
 						} else {
 							item.add(new Label("filestore", getString("gb.filestore")).setVisible(false));

--
Gitblit v1.9.1