Added display page for server/request parameters, this will be used to monitor what data is sent via the AJP-proxy.

Refactoring/documentation is next.
This commit is contained in:
Robin Eklund 2011-07-12 19:23:43 +02:00
parent b28b37cda2
commit ef88a11790
5 changed files with 109 additions and 1 deletions

@ -28,6 +28,7 @@ import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPerProjectClassPage;
import se.su.dsv.scipro.admin.pages.settings.AdminGeneralSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminPeerSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminServerEnvironmentSettingsPage;
import se.su.dsv.scipro.basepages.DemoPage;
import se.su.dsv.scipro.basepages.errorpages.AccessDeniedPage;
import se.su.dsv.scipro.basepages.errorpages.NotFoundPage;
@ -190,6 +191,7 @@ public class SciProApplication extends RepositoryApplication implements IThemabl
mountBookmarkablePage("admin/files", SysAdminFilePage.class);
mountBookmarkablePage("admin/allfinalseminars", AdminFinalSeminarPage.class);
mountBookmarkablePage("admin/settings", AdminGeneralSettingsPage.class);
mountBookmarkablePage("admin/settings/serverenvironment", AdminServerEnvironmentSettingsPage.class);
mountBookmarkablePage("admin/settings/finalseminargeneralsettings", AdminFinalSeminarSettingsPage.class);
mountBookmarkablePage("admin/settings/finalseminarprojectlevel", AdminFinalSeminarSettingsPerProjectClassPage.class);
mountBookmarkablePage("admin/settings/peer", AdminPeerSettingsPage.class);

@ -10,6 +10,7 @@ import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPerProjectClassPage;
import se.su.dsv.scipro.admin.pages.settings.AdminGeneralSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminPeerSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminServerEnvironmentSettingsPage;
import se.su.dsv.scipro.components.AbstractMenuPanel;
import se.su.dsv.scipro.icons.ImageIcon;
import se.su.dsv.scipro.security.auth.Authorization;
@ -29,6 +30,7 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage {
protected List<MenuItem> getItemList() {
final List<MenuItem> items = new ArrayList<MenuItem>();
items.add(new MenuItem("General settings", AdminGeneralSettingsPage.class));
items.add(new MenuItem("Server Environment", AdminServerEnvironmentSettingsPage.class));
items.add(new MenuItem("Final seminar general settings", AdminFinalSeminarSettingsPage.class));
items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class));
items.add(new MenuItem("Peer settings", AdminPeerSettingsPage.class, ImageIcon.ICON_SETTINGS));

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:extend>
<h3 class="section">Server/Request environment</h3>
<div style="overflow:auto;height:50%;">
<ul>
<li wicket:id="requestAttributes">
<span wicket:id="name">[name]</span>:
<span wicket:id="value">[value]</span>
</li>
</ul>
</div>
</wicket:extend>
</body>
</html>

@ -0,0 +1,87 @@
package se.su.dsv.scipro.admin.pages.settings;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import se.su.dsv.scipro.admin.pages.AbstractAdminSettingsPage;
public class AdminServerEnvironmentSettingsPage extends AbstractAdminSettingsPage {
public AdminServerEnvironmentSettingsPage(final PageParameters pp) {
super(pp);
add(new ListView<KeyValuePair<String>>("requestAttributes",getRequestAttributes()){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<KeyValuePair<String>> item){
KeyValuePair<String> pair = item.getModelObject();
item.add(new Label("name",pair.getKey()));
item.add(new Label("value","'"+pair.getValue()+"'"));
}
});
}
private final class KeyValuePair<V> implements Serializable{
private static final long serialVersionUID = 1L;
private final String key;
private final V value;
public KeyValuePair(final String key, final V value){
this.key = key;
this.value = value;
}
public String getKey(){
return key;
}
public V getValue(){
return value;
}
@Override
public boolean equals(final Object o){
if(o==this)
return true;
if(!(o instanceof KeyValuePair))
return false;
@SuppressWarnings("unchecked")
final KeyValuePair<V> other = (KeyValuePair<V>)o;
return ((key==null?other.key==null:key.equals(other.key)) &&
(value==null?other.value==null:value.equals(other.value)));
}
@Override
public int hashCode(){
final int w = 31;
int result = 17;//Why hello there Mr Bloch, how are we feeling today ?
result = w * result + (key==null?0:key.hashCode());
result = w * result + (value==null?0:value.hashCode());
return result;
}
@Override
public String toString(){
return ("{"+key+":"+value+"}");
}
}
private List<KeyValuePair<String>> getRequestAttributes(){
final HttpServletRequest rawRequest = getWebRequestCycle().getWebRequest().getHttpServletRequest();
List<KeyValuePair<String>> list = new ArrayList<KeyValuePair<String>>();
list.add(new KeyValuePair<String>("[CALL] getRemoteUser",rawRequest.getRemoteUser()));
list.add(new KeyValuePair<String>("[CALL] getAuthType",rawRequest.getAuthType()));
@SuppressWarnings("rawtypes") Enumeration attributes = rawRequest.getAttributeNames();
while(attributes.hasMoreElements()){
final String key = (String)attributes.nextElement();
final String value = rawRequest.getAttribute(key).toString();
list.add(new KeyValuePair<String>("[ATTR] "+key,value));
}
Map<String,String> envs = System.getenv();
for(String key : envs.keySet()){
list.add(new KeyValuePair<String>("[ENV] "+key,envs.get(key)));
}
return list;
}
}

@ -100,7 +100,7 @@ public final class ExternalAuthenticationRequestHelper{
/**
* Private utility method for dumping headers.
*/
public void dumpAuthInfo(){
private void dumpAuthInfo(){
logger.debug("---Standard methods---");
logger.debug("Request implementation:" + req.getClass().getName());
logger.debug("getAuthType = '" + getExternalAuthType() +"'");