[FIX] adapt auth_openid to new login page
authorChristophe Simonis <chs@openerp.com>
Thu, 12 Jan 2012 12:54:16 +0000 (13:54 +0100)
committerChristophe Simonis <chs@openerp.com>
Thu, 12 Jan 2012 12:54:16 +0000 (13:54 +0100)
bzr revid: chs@openerp.com-20120112125416-uixisb5sks604ejg

addons/auth_openid/__openerp__.py
addons/auth_openid/controllers/main.py
addons/auth_openid/static/src/css/openid.css
addons/auth_openid/static/src/js/auth_openid.js
addons/auth_openid/static/src/xml/auth_openid.xml

index 6fa802b..178996b 100644 (file)
@@ -2,7 +2,7 @@
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2010-2011 OpenERP s.a. (<http://openerp.com>).
+#    Copyright (C) 2010-2012 OpenERP s.a. (<http://openerp.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -38,6 +38,9 @@
     'css': [
         'static/src/css/openid.css',
     ],
+    'qweb': [
+        'static/src/xml/auth_openid.xml',
+    ],
     'external_dependencies': {
         'python' : ['openid'],
     },
index 0c1274b..c95189b 100644 (file)
@@ -2,7 +2,7 @@
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2010-2011 OpenERP s.a. (<http://openerp.com>).
+#    Copyright (C) 2010-2012 OpenERP s.a. (<http://openerp.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -216,7 +216,7 @@ class OpenIDController(openerpweb.Controller):
 
 
         fragment = '#loginerror' if not user_id else ''
-        return werkzeug.utils.redirect('/web/webclient/home?debug=1'+fragment)
+        return werkzeug.utils.redirect('/'+fragment)
 
     @openerpweb.jsonrequest
     def status(self, req):
index 8763ec3..ab01ffd 100644 (file)
@@ -1,4 +1,9 @@
-input[name='openid_url'] {
+.login .pane {
+    width: 260px;
+    height: 175px;
+}
+
+.login .pane input[name='openid_url'] {
     background: #fff url(../img/login-bg.gif) no-repeat 1px;
     padding-left: 20px;
 }
@@ -8,19 +13,6 @@ input[name='openid_url'] {
     display: none;
 }
 
-.openerp .login .oe_forms .oe_box2 td input[name="db"], .oe_forms .oe_box2 td select[name="db"] {
-    width: 50%;
-    float: left;
-    margin-top: 15px;
-}
-
-.openerp .login .oe_login_right_pane {
-    margin-left: 525px;
-}
-.openerp .login form {
-    width: 475px;
-}
-
 .openid_providers {
     padding: 0;
     list-style: none;
@@ -59,6 +51,6 @@ input[name='openid_url'] {
 .openid_providers a[title="Launchpad"]   { background-image: url(../img/launchpad.png); }
 
 
-tr.auth_choice.selected {
+li.auth_choice.selected {
     display: table-row;
 }
index bc067d8..fd6ec01 100644 (file)
@@ -2,13 +2,14 @@
 openerp.auth_openid = function(instance) {
 
 var QWeb = instance.web.qweb;
-QWeb.add_template('/auth_openid/static/src/xml/auth_openid.xml');
 
 instance.web.Login = instance.web.Login.extend({
     start: function() {
         this._super.apply(this, arguments);
         var self = this;
 
+        this._default_error_message = this.$element.find('.login_error_message').text();
+
         this.$openid_selected_button = $();
         this.$openid_selected_input = $();
         this.$openid_selected_provider = null;
@@ -39,6 +40,8 @@ instance.web.Login = instance.web.Login.extend({
             }
         });
 
+        this._check_fragment();
+
     },
 
 
@@ -48,7 +51,7 @@ instance.web.Login = instance.web.Login.extend({
             self.$openid_selected_button.add(self.$openid_selected_input).removeClass('selected');
             self.$openid_selected_button = self.$element.find(button).addClass('selected');
 
-            var input = _(provider.split(',')).map(function(p) { return 'tr[data-provider="'+p+'"]'; }).join(',');
+            var input = _(provider.split(',')).map(function(p) { return 'li[data-provider="'+p+'"]'; }).join(',');
             self.$openid_selected_input = self.$element.find(input).addClass('selected');
 
             self.$openid_selected_input.find('input:first').focus();
@@ -64,20 +67,20 @@ instance.web.Login = instance.web.Login.extend({
 
     },
 
-    on_login_invalid: function() {
+    _check_fragment: function() {
         var self = this;
         var fragment = jQuery.deparam.fragment();
-        if (fragment.loginerror != undefined) {
+        console.log(fragment);
+        if (fragment.loginerror !== undefined) {
             this.rpc('/auth_openid/login/status', {}, function(result) {
                 if (_.contains(['success', 'failure'], result.status) && result.message) {
-                    self.notification.warn('Invalid OpenID Login', result.message);
+                    self.do_warn('Invalid OpenID Login', result.message);
                 }
                 if (result.status === 'setup_needed' && result.message) {
                     window.location.replace(result.message);
                 }
             });
         }
-        return this._super();
     },
 
     on_submit: function(ev) {
@@ -86,6 +89,7 @@ instance.web.Login = instance.web.Login.extend({
 
         if(!dataurl) {
             // login-password submitted
+            this.reset_error_message();
             this._super(ev);
         } else {
             ev.preventDefault();
@@ -107,13 +111,11 @@ instance.web.Login = instance.web.Login.extend({
         var self = this;
         this.rpc('/auth_openid/login/verify', {'db': db, 'url': openid_url}, function(result) {
             if (result.error) {
-                self.notification.warn(result.title, result.error);
-                self.on_login_invalid();
+                self.do_warn(result.title, result.error);
                 return;
             }
             if (result.session_id) {
-                self.session.session_id = result.session_id;
-                self.session.session_save();
+                self.session.set_cookie('session_id', result.session_id);
             }
             if (result.action === 'post') {
                 document.open();
@@ -128,6 +130,14 @@ instance.web.Login = instance.web.Login.extend({
         });
     },
 
+    do_warn: function(title, msg) {
+        //console.warn(title, msg);
+        this.$element.find('.login_error_message').text(msg).show();
+    },
+
+    reset_error_message: function() {
+        this.$element.find('.login_error_message').text(this._default_error_message);
+    }
 
 });
 
index 6fbab72..3489455 100644 (file)
@@ -3,7 +3,7 @@
 <templates id="template" xml:space="preserve">
 
     <t t-extend="Login">
-        <t t-jquery=".oe_box2 tr:first td:nth-child(2)" t-operation="append">
+        <t t-jquery=".login .pane div#logo" t-operation="after">
             <ul class="openid_providers">
                 <li><a href="#login,password" title="Password" data-url="" id="btn_password">Password</a></li>
                 <li><a href="#google" title="Google" data-url="https://www.google.com/accounts/o8/id">Google</a></li>
             </tr>
         </t>
     </t>
+    <t t-extend="Login">
+        <t t-jquery=".login .pane form ul li:nth-child(4)" t-operation="after">
+            <li>
+                Google Apps Domain
+            </li>
+            <li>
+                <input type="text" name="googleapps" />
+            </li>
+            <li>
+                Username
+            </li>
+            <li>
+                <input type="text" name="launchpad" />
+            </li>
+            <li>
+                OpenID URL
+            </li>
+            <li>
+                <input type="text" name="openid_url" />
+            </li>
+        </t>
+    </t>
 
     <t t-extend="Login">
-        <t t-jquery=".oe_box2 tr:has(input[name!='db'])">
-            //this.addClass('auth_choice');     // XXX for some reason, not all tr tags are HTMLElement's and thus, jQuery decide to not change the class...
-            this.attr('class', 'auth_choice');
+        <t t-jquery=".login .pane form ul li:has(input)">
             this.each(function() {
-                var $i = $(this);
-                $i.attr('data-provider', $i.find('input').attr('name'));
+                var $i = $(this),
+                    dp = $i.find('input').attr('name');
+                $i.add($i.prev()).attr('class', 'auth_choice').attr('data-provider', dp);
             });
         </t>
     </t>