-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
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 ) | ||||
{ | { |
</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> |
</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> |
<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> |
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"; |
<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> |