changeset 6546:7106f9b75004

Add SAML authentication to Info-Button. Not yet working, the saml POST variable is cleared somewhere before submitting.
author Christian Lins <christian.lins@intevation.de>
date Mon, 08 Jul 2013 13:59:24 +0200
parents b24dc0320b75
children 455876ac5914
files gwt-client/src/main/java/org/dive4elements/river/client/client/ui/FLYSHeader.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/RiverInfoPanel.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiImgLink.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiLinks.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoListGrid.java
diffstat 5 files changed, 48 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/FLYSHeader.java	Mon Jul 08 11:41:10 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/FLYSHeader.java	Mon Jul 08 13:59:24 2013 +0200
@@ -21,6 +21,7 @@
 import com.smartgwt.client.widgets.Label;
 import com.smartgwt.client.widgets.events.ClickEvent;
 import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
 import com.smartgwt.client.widgets.layout.HLayout;
 
 import org.dive4elements.river.client.client.Config;
@@ -137,7 +138,13 @@
             public void onClick(ClickEvent event) {
                 GWT.log("Clicked 'info' button.");
                 String wikiLink = Config.getInstance().getWikiUrl() + "/Info";
-                Window.open(wikiLink, "_blank", null);
+
+                // Create a dynamic form which contains the SAML session
+                // for the user which is currently logged in
+                DynamicForm df = WikiLinks.dynamicForm(getFlys(), wikiLink);
+                info.addChild(df);    // add the form somewhere
+                df.submitForm();      // submit the form to go to the wiki
+                info.removeChild(df); // and remove the dynamic form
             }
         });
         init();
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/RiverInfoPanel.java	Mon Jul 08 11:41:10 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/RiverInfoPanel.java	Mon Jul 08 13:59:24 2013 +0200
@@ -99,7 +99,7 @@
             MSG.gauge_river_url() + number :
             MSG.gauge_river_url();
         String wikiBaseUrl = Config.getInstance().getWikiUrl();
-        DynamicForm infoLink = WikiLinks.linkHTML(this.flys, wikiBaseUrl + url,
+        DynamicForm infoLink = WikiLinks.linkDynamicForm(this.flys, wikiBaseUrl + url,
                                         MSG.gauge_river_info_link());
         infoLink.setTop(5);
         LinkItem item = (LinkItem)infoLink.getField("saml");
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiImgLink.java	Mon Jul 08 11:41:10 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiImgLink.java	Mon Jul 08 13:59:24 2013 +0200
@@ -24,7 +24,7 @@
 
     @Override
     protected void update() {
-        setContents(WikiLinks.imageLinkHTML(instance, href, imgUrl));
+        setContents(WikiLinks.imageLinkForm(instance, href, imgUrl));
         setWidth(width);
         setHeight(height);
         setOverflow(Overflow.VISIBLE);
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiLinks.java	Mon Jul 08 11:41:10 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WikiLinks.java	Mon Jul 08 13:59:24 2013 +0200
@@ -8,18 +8,21 @@
 
 package org.dive4elements.river.client.client.ui;
 
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
 import com.smartgwt.client.types.FormMethod;
 import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.HiddenItem;
 import com.smartgwt.client.widgets.form.fields.LinkItem;
 import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
 import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
-import com.google.gwt.safehtml.shared.SafeHtmlUtils;
 
 import org.dive4elements.river.client.client.FLYS;
+import org.dive4elements.river.client.shared.model.User;
 
 public class WikiLinks
 {
-    public static String imageLinkHTML(FLYS instance, String url, String imageUrl) {
+    public static String imageLinkForm(FLYS instance, String url, String imageUrl) {
         String saml = null;
         if (instance != null && instance.getCurrentUser() != null) {
             saml = instance.getCurrentUser().getSamlXMLBase64();
@@ -40,11 +43,13 @@
         }
     }
 
-    public static DynamicForm linkHTML(FLYS flys, String url, String text) {
-        String saml = flys.getCurrentUser().getSamlXMLBase64();
+    public static DynamicForm linkDynamicForm(FLYS flys, String url, String text) {
+        User currentUser = flys.getCurrentUser();
         String quotedUrl = SafeHtmlUtils.htmlEscape(url);
         String quotedText = SafeHtmlUtils.htmlEscape(text);
-        if (saml != null) {
+
+        if (currentUser != null) {
+            String saml = currentUser.getSamlXMLBase64();
             final DynamicForm form = new DynamicForm();
             form.setMethod(FormMethod.POST);
             form.setTarget("_blank");
@@ -71,4 +76,31 @@
             return form;
         }
     }
+
+    public static DynamicForm dynamicForm(FLYS flys, String url) {
+        User currentUser = flys.getCurrentUser();
+        String quotedUrl = SafeHtmlUtils.htmlEscape(url);
+
+        if (currentUser != null) {
+            String saml = currentUser.getSamlXMLBase64();
+            saml = SafeHtmlUtils.htmlEscape(saml);
+            GWT.log("saml=" + saml);
+            DynamicForm form = new DynamicForm();
+            form.setMethod(FormMethod.POST);
+            form.setTarget("_blank");
+            form.setAction(quotedUrl);
+            form.setCanSubmit(true);
+            HiddenItem item = new HiddenItem("saml");
+            item.setDefaultValue(saml);
+            form.setFields(item);
+            form.setValue("saml", saml);
+            return form;
+        }
+        else {
+            DynamicForm form = new DynamicForm();
+            form.setTarget("_blank");
+            form.setAction(quotedUrl);
+            return form;
+        }
+    }
 }
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoListGrid.java	Mon Jul 08 11:41:10 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/stationinfo/InfoListGrid.java	Mon Jul 08 13:59:24 2013 +0200
@@ -46,7 +46,7 @@
     ) {
         String name = this.getFieldName(colNum);
         if (name.equals("infolink")) {
-            return WikiLinks.linkHTML(
+            return WikiLinks.linkDynamicForm(
                 flys,
                 record.getAttribute("link"),
                 record.getLinkText());

http://dive4elements.wald.intevation.org