[FIX] adapt auth_openid to new login page

bzr revid: chs@openerp.com-20120112125416-uixisb5sks604ejg
This commit is contained in:
Christophe Simonis
2012-01-12 13:54:16 +01:00
parent 5446d01ba1
commit 137310ed4a
5 changed files with 60 additions and 34 deletions
+4 -1
View 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'],
},
+2 -2
View 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):
+7 -15
View 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;
}
+20 -10
View 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);
}
});
@@ -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>
@@ -30,14 +30,35 @@
</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>