Browse Source

[MRM-839]

-updated the rss url for repositories and artifacts


git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@687634 13f79535-47bb-0310-9956-ffa450edef68
tags/archiva-1.2-M1
Maria Odea B. Ching 16 years ago
parent
commit
1b9083f019

+ 34
- 19
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java View File

import org.apache.commons.codec.Decoder; import org.apache.commons.codec.Decoder;
import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Base64; 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.database.ArchivaDatabaseException;
import org.apache.maven.archiva.security.AccessDeniedException; import org.apache.maven.archiva.security.AccessDeniedException;
import org.apache.maven.archiva.security.ArchivaRoleConstants; import org.apache.maven.archiva.security.ArchivaRoleConstants;
public void doGet( HttpServletRequest req, HttpServletResponse res ) public void doGet( HttpServletRequest req, HttpServletResponse res )
throws ServletException, IOException 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 try
{ {
Map<String, String> map = new HashMap<String, String>(); Map<String, String> map = new HashMap<String, String>();
SyndFeed feed = null; 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 ) if ( repoId != null )
{ {
} }
res.setContentType( MIME_TYPE ); res.setContentType( MIME_TYPE );
if ( repoId != null ) if ( repoId != null )
{
feed.setLink( req.getRequestURL() + "?repoId=" + repoId );
{
feed.setLink( req.getRequestURL().toString() );
} }
else if ( ( groupId != null ) && ( artifactId != null ) ) else if ( ( groupId != null ) && ( artifactId != null ) )
{ {
feed.setLink( req.getRequestURL() + "?groupId=" + groupId + "&artifactId=" + artifactId );
feed.setLink( req.getRequestURL().toString() );
} }


SyndFeedOutput output = new SyndFeedOutput(); SyndFeedOutput output = new SyndFeedOutput();
* Basic authentication. * Basic authentication.
* *
* @param req * @param req
* @param repositoryId TODO
* @param groupId TODO
* @param artifactId TODO
* @return * @return
*/ */
private boolean isAllowed( HttpServletRequest req )
private boolean isAllowed( HttpServletRequest req, String repositoryId, String groupId, String artifactId )
throws UserNotFoundException, AccountLockedException, AuthenticationException, MustChangePasswordException, throws UserNotFoundException, AccountLockedException, AuthenticationException, MustChangePasswordException,
UnauthorizedException UnauthorizedException
{ {
String auth = req.getHeader( "Authorization" ); String auth = req.getHeader( "Authorization" );
List<String> repoIds = new ArrayList<String>(); 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 ) if ( auth != null )
{ {

+ 1
- 1
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp View File

</ww:a> </ww:a>
</redback:ifAnyAuthorized> </redback:ifAnyAuthorized>
<c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/> <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}" /> <img src="${rssFeedIconUrl}" />
</a> </a>
</div> </div>

+ 1
- 1
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp View File

</c:set> </c:set>
<li> <li>
<a href="${url}">${artifactId}/</a> <a href="${url}">${artifactId}/</a>
<a href="/archiva/rss/rss_feeds?groupId=${groupId}&artifactId=${artifactId}">
<a href="/archiva/feeds/${groupId}/${artifactId}">
<img src="${rssFeedIconUrl}" /> <img src="${rssFeedIconUrl}" />
</a> </a>
</li> </li>

+ 1
- 1
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/web.xml View File

<servlet-mapping> <servlet-mapping>
<servlet-name>RssFeedServlet</servlet-name> <servlet-name>RssFeedServlet</servlet-name>
<url-pattern>/rss/rss_feeds</url-pattern>
<url-pattern>/feeds/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet-mapping> <servlet-mapping>

+ 11
- 11
archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/rss/RssFeedServletTest.java View File

throws Exception throws Exception
{ {
RssFeedServlet servlet = 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 ); assertNotNull( servlet );
} }


throws Exception throws Exception
{ {
RssFeedServlet servlet = 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 ); 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(); BASE64Encoder encoder = new BASE64Encoder();
String userPass = "user1:password1"; String userPass = "user1:password1";
{ {
RssFeedServlet servlet = RssFeedServlet servlet =
(RssFeedServlet) client.newInvocation( (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 ); 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(); BASE64Encoder encoder = new BASE64Encoder();
String userPass = "user1:password1"; String userPass = "user1:password1";
{ {
RssFeedServlet servlet = RssFeedServlet servlet =
(RssFeedServlet) client.newInvocation( (RssFeedServlet) client.newInvocation(
"http://localhost/rss/rss_feeds?invalid_param=xxx" ).getServlet();
"http://localhost/feeds?invalid_param=xxx" ).getServlet();
assertNotNull( servlet ); assertNotNull( servlet );


try 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 ) catch ( HttpException he )
{ {
{ {
RssFeedServlet servlet = RssFeedServlet servlet =
(RssFeedServlet) client.newInvocation( (RssFeedServlet) client.newInvocation(
"http://localhost/rss/rss_feeds?repoId=unauthorized-repo" ).getServlet();
"http://localhost/feeds/unauthorized-repo" ).getServlet();
assertNotNull( servlet ); 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(); Encoder encoder = new Base64();
String userPass = "unauthUser:unauthPass"; String userPass = "unauthUser:unauthPass";
{ {
RssFeedServlet servlet = RssFeedServlet servlet =
(RssFeedServlet) client.newInvocation( (RssFeedServlet) client.newInvocation(
"http://localhost/rss/rss_feeds?repoId=unauthorized-repo" ).getServlet();
"http://localhost/feeds/unauthorized-repo" ).getServlet();
assertNotNull( servlet ); 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(); BASE64Encoder encoder = new BASE64Encoder();
String userPass = "user1:password1"; String userPass = "user1:password1";

+ 1
- 1
archiva-modules/archiva-web/archiva-webapp/src/test/webapp/WEB-INF/feedServletTest-web.xml View File



<servlet-mapping> <servlet-mapping>
<servlet-name>RssFeedServlet</servlet-name> <servlet-name>RssFeedServlet</servlet-name>
<url-pattern>/rss/*</url-pattern>
<url-pattern>/feeds/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<context-param> <context-param>

Loading…
Cancel
Save