changeset 673:39dd18124ebd

Merged branch openid back to default.
author Raimund Renkert <raimund.renkert@intevation.de>
date Thu, 19 Mar 2015 14:31:07 +0100
parents 74cc7f086d83 (current diff) 8756f7e423fb (diff)
children 19d3b1f2613e
files app.js
diffstat 2 files changed, 96 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/app.js	Thu Mar 19 10:07:39 2015 +0100
+++ b/app.js	Thu Mar 19 14:31:07 2015 +0100
@@ -23,6 +23,7 @@
     // found on https://github.com/elmasse/Ext.i18n.Bundle
     requires: [
         'Lada.override.Table',
+        'Lada.override.RestProxy',
         'Lada.override.RowEditor',
         'Ext.i18n.Bundle',
         'Ext.layout.container.Column',
@@ -49,10 +50,59 @@
 
     // Setting this variable to true triggers loading the Viewport.js
     // file which sets ob the viewport.
-    autoCreateViewport: true,
+    //autoCreateViewport: true,
 
     // Start the application.
     launch: function() {
+        var queryString = document.location.href.split('?')[1];
+        if (queryString) {
+            Lada.openIDParams = queryString;
+        }
+        Ext.Ajax.request({
+            url: 'lada-server/login?return_to=' + window.location.href,
+            method: 'GET',
+            headers: {
+                'X-OPENID-PARAMS': Lada.openIDParams
+            },
+            scope: this,
+            success: this.onLoginSuccess,
+            failure: this.onLoginFailure
+        });
+    },
+
+    onLoginFailure: function(response) {
+        try {
+            var json = Ext.decode(response.responseText);
+            if (json) {
+                if (json.message === '699') {
+                    /* This is the unauthorized message with the authentication
+                     * redirect in the data */
+                    var authUrl = json.data;
+                    location.href = authUrl;
+                    return;
+                }
+                if (json.message === '698') {
+                    /* This is general authentication error */
+                    Ext.MessageBox.alert('Kommunikation mit dem Login Server fehlgeschlagen',
+                            json.data);
+                    return;
+                }
+            }
+        }
+        catch (e) {
+            // This is likely a 404 or some unknown error. Show general error then.
+        }
+        Ext.MessageBox.alert('Kommunikation mit dem Lada Server fehlgeschlagen',
+                'Es konnte keine erfolgreiche Verbindung zum lada server aufgebaut werden.');
+    },
+
+    onLoginSuccess: function() {
+        /* Strip out the openid query params to look nicers. */
+        window.history.pushState(this.name, this.name, window.location.pathname);
+
+        Ext.create('Lada.view.Viewport');
+
+        /* Todo maybe parse username and such from login service response */
         Ext.create('Lada.store.Datenbasis', {
             storeId: 'datenbasis'
         });
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/override/RestProxy.js	Thu Mar 19 14:31:07 2015 +0100
@@ -0,0 +1,45 @@
+/* Copyright (C) 2015 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+Ext.define('Lada.override.RestProxy', {
+    override: 'Ext.data.proxy.Rest',
+
+    buildRequest: function (operation) {
+        this.headers = { 'X-OPENID-PARAMS': Lada.openIDParams };
+        return this.callParent(arguments);
+    },
+
+    processResponse: function (success, operation, request, response, callback, scope) {
+        /* Check if we were authenticated at one point (Lada.openIDParams) and
+         * if the response means that we lost that authentcation */
+        if (Lada.openIDParams && !success && response.status == 401) {
+            var json = Ext.decode(response.responseText);
+            if (json) {
+                if (json.message === "699" || json.message === "698") {
+                    /* This is the unauthorized message with the authentication
+                     * redirect in the data */
+
+                    /* We decided to handle this with a redirect to the identity
+                     * provider. In which case we have no other option then to
+                     * handle it here with relaunch. */
+                    Ext.MessageBox.confirm('Erneutes Login erforderlich',
+                        'Der Server konnte die Anfrage nicht authentifizieren.<br/>'+
+                        'Für ein erneutes Login muss die Anwendung neu geladen werden.<br/>' +
+                        'Alle ungesicherten Daten gehen dabei verloren.<br/>' +
+                        'Soll die Anwendung jetzt neu geladen werden?', this.reload);
+                }
+            }
+        }
+        this.callParent(arguments);
+    },
+    reload: function(btn) {
+        if (btn === 'yes') {
+            location.reload();
+        }
+    }
+});

http://lada.wald.intevation.org