-updated the rss url for repositories and artifacts git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@687634 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-1.2-M1
@@ -35,6 +35,7 @@ import org.apache.archiva.rss.processor.RssFeedProcessor; | |||
import org.apache.commons.codec.Decoder; | |||
import org.apache.commons.codec.DecoderException; | |||
import org.apache.commons.codec.binary.Base64; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.apache.maven.archiva.database.ArchivaDatabaseException; | |||
import org.apache.maven.archiva.security.AccessDeniedException; | |||
import org.apache.maven.archiva.security.ArchivaRoleConstants; | |||
@@ -106,22 +107,33 @@ public class RssFeedServlet | |||
public void doGet( HttpServletRequest req, HttpServletResponse res ) | |||
throws ServletException, IOException | |||
{ | |||
String repoId = req.getParameter( "repoId" ); | |||
String groupId = req.getParameter( "groupId" ); | |||
String artifactId = req.getParameter( "artifactId" ); | |||
String repoId = null; | |||
String groupId = null; | |||
String artifactId = null; | |||
String url = StringUtils.removeEnd( req.getRequestURL().toString(), "/" ); | |||
if( StringUtils.countMatches( StringUtils.substringAfter( url, "feeds/" ), "/" ) > 0 ) | |||
{ | |||
artifactId = StringUtils.substringAfterLast( url, "/" ); | |||
groupId = StringUtils.substringBeforeLast( StringUtils.substringAfter( url, "feeds/" ), "/"); | |||
groupId = StringUtils.replaceChars( groupId, '/', '.' ); | |||
} | |||
else if( StringUtils.countMatches( StringUtils.substringAfter( url, "feeds/" ), "/" ) == 0 ) | |||
{ | |||
repoId = StringUtils.substringAfterLast( url, "/" ); | |||
} | |||
else | |||
{ | |||
res.sendError( HttpServletResponse.SC_BAD_REQUEST, "Invalid request url." ); | |||
return; | |||
} | |||
try | |||
{ | |||
Map<String, String> map = new HashMap<String, String>(); | |||
SyndFeed feed = null; | |||
if ( ( repoId == null ) && ( groupId == null && artifactId == null ) ) | |||
{ | |||
res.sendError( HttpServletResponse.SC_BAD_REQUEST, "Required fields not found in request." ); | |||
return; | |||
} | |||
if ( isAllowed( req ) ) | |||
if ( isAllowed( req, repoId, groupId, artifactId ) ) | |||
{ | |||
if ( repoId != null ) | |||
{ | |||
@@ -157,14 +169,14 @@ public class RssFeedServlet | |||
} | |||
res.setContentType( MIME_TYPE ); | |||
if ( repoId != null ) | |||
{ | |||
feed.setLink( req.getRequestURL() + "?repoId=" + repoId ); | |||
{ | |||
feed.setLink( req.getRequestURL().toString() ); | |||
} | |||
else if ( ( groupId != null ) && ( artifactId != null ) ) | |||
{ | |||
feed.setLink( req.getRequestURL() + "?groupId=" + groupId + "&artifactId=" + artifactId ); | |||
feed.setLink( req.getRequestURL().toString() ); | |||
} | |||
SyndFeedOutput output = new SyndFeedOutput(); | |||
@@ -218,20 +230,23 @@ public class RssFeedServlet | |||
* Basic authentication. | |||
* | |||
* @param req | |||
* @param repositoryId TODO | |||
* @param groupId TODO | |||
* @param artifactId TODO | |||
* @return | |||
*/ | |||
private boolean isAllowed( HttpServletRequest req ) | |||
private boolean isAllowed( HttpServletRequest req, String repositoryId, String groupId, String artifactId ) | |||
throws UserNotFoundException, AccountLockedException, AuthenticationException, MustChangePasswordException, | |||
UnauthorizedException | |||
{ | |||
String auth = req.getHeader( "Authorization" ); | |||
List<String> repoIds = new ArrayList<String>(); | |||
if ( req.getParameter( "repoId" ) != null ) | |||
if ( repositoryId != null ) | |||
{ | |||
repoIds.add( req.getParameter( "repoId" ) ); | |||
repoIds.add( repositoryId ); | |||
} | |||
else if ( req.getParameter( "artifactId" ) != null && req.getParameter( "groupId" ) != null ) | |||
else if ( artifactId != null && groupId != null ) | |||
{ | |||
if ( auth != null ) | |||
{ |
@@ -88,7 +88,7 @@ | |||
</ww:a> | |||
</redback:ifAnyAuthorized> | |||
<c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/> | |||
<a href="/archiva/rss/rss_feeds?repoId=${repository.id}"> | |||
<a href="/archiva/feeds/${repository.id}"> | |||
<img src="${rssFeedIconUrl}" /> | |||
</a> | |||
</div> |
@@ -72,7 +72,7 @@ | |||
</c:set> | |||
<li> | |||
<a href="${url}">${artifactId}/</a> | |||
<a href="/archiva/rss/rss_feeds?groupId=${groupId}&artifactId=${artifactId}"> | |||
<a href="/archiva/feeds/${groupId}/${artifactId}"> | |||
<img src="${rssFeedIconUrl}" /> | |||
</a> | |||
</li> |
@@ -93,7 +93,7 @@ | |||
<servlet-mapping> | |||
<servlet-name>RssFeedServlet</servlet-name> | |||
<url-pattern>/rss/rss_feeds</url-pattern> | |||
<url-pattern>/feeds/*</url-pattern> | |||
</servlet-mapping> | |||
<servlet-mapping> |
@@ -59,7 +59,7 @@ public class RssFeedServletTest | |||
throws Exception | |||
{ | |||
RssFeedServlet servlet = | |||
(RssFeedServlet) client.newInvocation( "http://localhost/rss/rss_feeds?repoId=test-repo" ).getServlet(); | |||
(RssFeedServlet) client.newInvocation( "http://localhost/feeds/test-repo" ).getServlet(); | |||
assertNotNull( servlet ); | |||
} | |||
@@ -67,10 +67,10 @@ public class RssFeedServletTest | |||
throws Exception | |||
{ | |||
RssFeedServlet servlet = | |||
(RssFeedServlet) client.newInvocation( "http://localhost/rss/rss_feeds?repoId=test-repo" ).getServlet(); | |||
(RssFeedServlet) client.newInvocation( "http://localhost/feeds/test-repo" ).getServlet(); | |||
assertNotNull( servlet ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/rss/rss_feeds?repoId=test-repo" ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/feeds/test-repo" ); | |||
BASE64Encoder encoder = new BASE64Encoder(); | |||
String userPass = "user1:password1"; | |||
@@ -88,10 +88,10 @@ public class RssFeedServletTest | |||
{ | |||
RssFeedServlet servlet = | |||
(RssFeedServlet) client.newInvocation( | |||
"http://localhost/rss/rss_feeds?groupId=org.apache.archiva&artifactId=artifact-two" ).getServlet(); | |||
"http://localhost/feeds/org/apache/archiva/artifact-two" ).getServlet(); | |||
assertNotNull( servlet ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/rss/rss_feeds?groupId=org.apache.archiva&artifactId=artifact-two" ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/feeds/org/apache/archiva/artifact-two" ); | |||
BASE64Encoder encoder = new BASE64Encoder(); | |||
String userPass = "user1:password1"; | |||
@@ -109,12 +109,12 @@ public class RssFeedServletTest | |||
{ | |||
RssFeedServlet servlet = | |||
(RssFeedServlet) client.newInvocation( | |||
"http://localhost/rss/rss_feeds?invalid_param=xxx" ).getServlet(); | |||
"http://localhost/feeds?invalid_param=xxx" ).getServlet(); | |||
assertNotNull( servlet ); | |||
try | |||
{ | |||
WebResponse response = client.getResponse( "http://localhost/rss/rss_feeds?invalid_param=xxx" ); | |||
WebResponse response = client.getResponse( "http://localhost/feeds?invalid_param=xxx" ); | |||
} | |||
catch ( HttpException he ) | |||
{ | |||
@@ -127,11 +127,11 @@ public class RssFeedServletTest | |||
{ | |||
RssFeedServlet servlet = | |||
(RssFeedServlet) client.newInvocation( | |||
"http://localhost/rss/rss_feeds?repoId=unauthorized-repo" ).getServlet(); | |||
"http://localhost/feeds/unauthorized-repo" ).getServlet(); | |||
assertNotNull( servlet ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/rss/rss_feeds?repoId=unauthorized-repo" ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/feeds/unauthorized-repo" ); | |||
Encoder encoder = new Base64(); | |||
String userPass = "unauthUser:unauthPass"; | |||
@@ -153,11 +153,11 @@ public class RssFeedServletTest | |||
{ | |||
RssFeedServlet servlet = | |||
(RssFeedServlet) client.newInvocation( | |||
"http://localhost/rss/rss_feeds?repoId=unauthorized-repo" ).getServlet(); | |||
"http://localhost/feeds/unauthorized-repo" ).getServlet(); | |||
assertNotNull( servlet ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/rss/rss_feeds?repoId=unauthorized-repo" ); | |||
WebRequest request = new GetMethodWebRequest( "http://localhost/feeds/unauthorized-repo" ); | |||
BASE64Encoder encoder = new BASE64Encoder(); | |||
String userPass = "user1:password1"; |
@@ -35,7 +35,7 @@ | |||
<servlet-mapping> | |||
<servlet-name>RssFeedServlet</servlet-name> | |||
<url-pattern>/rss/*</url-pattern> | |||
<url-pattern>/feeds/*</url-pattern> | |||
</servlet-mapping> | |||
<context-param> |