/*******************************************************************************
* Copyright (c) 2014, 2015 IBH SYSTEMS GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBH SYSTEMS GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.packagedrone.repo.manage.setup.web;
import java.util.HashSet;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.packagedrone.repo.manage.setup.web.internal.Activator;
import org.eclipse.packagedrone.web.interceptor.ModelAndViewInterceptorAdapter;
import org.eclipse.packagedrone.web.util.Requests;
import org.osgi.util.tracker.ServiceTracker;
public class SetupInterceptor extends ModelAndViewInterceptorAdapter
{
private final ServiceTracker<?, ?> tracker;
private final Set<String> ignoredPrefixes = new HashSet<> ();
public SetupInterceptor ()
{
this.ignoredPrefixes.add ( "/setup" );
this.ignoredPrefixes.add ( "/login" );
this.ignoredPrefixes.add ( "/logout" );
this.ignoredPrefixes.add ( "/resources" );
this.ignoredPrefixes.add ( "/system/backup" );
this.tracker = Activator.getTracker ();
}
@Override
public boolean preHandle ( final HttpServletRequest request, final HttpServletResponse response ) throws Exception
{
final String current = Requests.getOriginalPath ( request );
if ( current == null )
{
response.sendRedirect ( request.getContextPath () + "/setup" );
return false;
}
for ( final String prefix : this.ignoredPrefixes )
{
if ( current.startsWith ( prefix ) )
{
return super.preHandle ( request, response );
}
}
if ( current.startsWith ( "/config" ) && request.getUserPrincipal () != null )
{
// this is a special case where the user is logged in, but the system might not be fully functional. In this case let him pass.
return super.preHandle ( request, response );
}
if ( this.tracker.getService () == null )
{
response.sendRedirect ( request.getContextPath () + "/setup" );
return false;
}
else
{
return super.preHandle ( request, response );
}
}
}