[WIP] auth_signup

bzr revid: fme@openerp.com-20140117141806-r6f1dejdcg7ii1e0
This commit is contained in:
Fabien Meghazi 2014-01-17 15:18:06 +01:00
parent f41243acd3
commit c3f7ab7ddd
5 changed files with 100 additions and 13 deletions

View File

@ -34,11 +34,13 @@ Allow users to sign up and reset their password
'depends': [
'base_setup',
'email_template',
'web',
],
'data': [
'auth_signup_data.xml',
'res_config.xml',
'res_users_view.xml',
'views/auth_signup_login.xml',
],
'js': ['static/src/js/auth_signup.js'],
'qweb': ['static/src/xml/auth_signup.xml'],

View File

@ -22,16 +22,27 @@ import logging
import openerp
from openerp import http
from openerp.http import request
from openerp.http import request, LazyResponse
from openerp.modules.registry import RegistryManager
from ..res_users import SignupError
_logger = logging.getLogger(__name__)
class Controller(http.Controller):
class Home(openerp.addons.web.controllers.main.Home):
@http.route('/auth_signup/get_config', type='json', auth="none")
def get_config(self, dbname):
@http.route('/web/login', type='http', auth="none")
def web_login(self, *args, **kw):
response = super(Home, self).web_login(*args, **kw)
if isinstance(response, LazyResponse):
config = self.get_auth_signup_config(request.session.db)
response.params['values'].update(config)
if request.params.get('signup', None) and config['signup']:
response.params['template'] = 'auth_signup.signup'
if request.params.get('reset', None) and config['signup']:
response.params['template'] = 'auth_signup.reset'
return response
def get_auth_signup_config(self, dbname):
""" retrieve the module config (which features are enabled) for the login page """
registry = RegistryManager.get(dbname)
with registry.cursor() as cr:
@ -42,6 +53,8 @@ class Controller(http.Controller):
}
return config
class Controller(http.Controller):
@http.route('/auth_signup/retrieve', type='json', auth="none")
def retrieve(self, dbname, token):
""" retrieve the user info (name, login or email) corresponding to a signup token """

View File

@ -66,19 +66,19 @@ class res_partner(osv.Model):
self.signup_prepare(cr, uid, [partner.id], context=context)
partner.refresh()
# the parameters to encode for the query and fragment part of url
query = {'db': cr.dbname}
# the parameters to encode for the query
query = dict(db=cr.dbname)
signup_type = context.get('signup_force_type_in_url', partner.signup_type or '')
fragment = {'action': action, 'type': signup_type}
query[signup_type] = 1
if partner.signup_token and signup_type:
fragment['token'] = partner.signup_token
query['token'] = partner.signup_token
elif partner.user_ids:
fragment['db'] = cr.dbname
fragment['login'] = partner.user_ids[0].login
query['login'] = partner.user_ids[0].login
else:
continue # no signup token, no user, thus no signup url!
fragment = dict()
if view_type:
fragment['view_type'] = view_type
if menu_id:
@ -88,7 +88,7 @@ class res_partner(osv.Model):
if res_id:
fragment['id'] = res_id
res[partner.id] = urljoin(base_url, "?%s#%s" % (urlencode(query), urlencode(fragment)))
res[partner.id] = urljoin(base_url, "/web/login?%s#%s" % (urlencode(query), urlencode(fragment)))
return res

View File

@ -2,7 +2,8 @@ openerp.auth_signup = function(instance) {
instance.auth_signup = instance.auth_signup || {};
var _t = instance.web._t;
/* TODO: make this a server side controller
return;
instance.web.Login.include({
start: function() {
var self = this;
@ -184,5 +185,4 @@ openerp.auth_signup = function(instance) {
});
},
});
*/
};

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- vim:fdn=3:
-->
<openerp>
<data>
<template id="auth_signup.login" inherit_id="web.login" name="Login (overloaded by auth_signup)">
<xpath expr="//button[@type='submit']" position="before">
<a t-if="signup" href="/web/login?signup=1" class="btn btn-default pull-left">Sign up</a>
<a t-if="reset_password" href="/web/login?reset=1" class="btn btn-default pull-left">Reset Password</a>
</xpath>
</template>
<template id="auth_signup.signup" name="Sinup">
<t t-call="web.login_layout">
<t t-set="head">
<t t-foreach="css" t-as="css_file">
<link rel="stylesheet" t-att-href="css_file"/>
</t>
<t t-foreach="js" t-as="js_file">
<script type="text/javascript" t-att-src="js_file"></script>
</t>
</t>
<form class="oe_signup_form" role="form" t-attf-action="/web/login{{ '?debug' if debug else '' }}" method="post">
<div class="form-group field-name">
<label for="name" class="control-label">Name</label>
<input type="text" name="name" t-att-value="name" id="name" class="form-control" placeholder="Enter your name" required="required" autofocus="autofocus"/>
</div>
<div class="form-group field-login">
<label for="login" class="control-label">Username (email)</label>
<input type="text" name="login" t-att-value="login" id="login" class="form-control" placeholder="Enter login" required="required"/>
</div>
<div class="form-group field-password">
<label for="password" class="control-label">Password</label>
<input type="password" name="password" id="password" class="form-control" placeholder="Password" required="required"/>
</div>
<div class="form-group field-confirm_password">
<label for="confirm_password" class="control-label">Confirm Password</label>
<input type="password" name="confirm_password" id="confirm_password" class="form-control" placeholder="Confirm your password" required="required"/>
</div>
<div class="oe_login_messages">
<p class="alert alert-danger" t-if="authentication_failed">
Wrong login/password
</p>
</div>
<hr/>
<input type="hidden" name="redirect" t-att-value="redirect"/>
<input type="hidden" name="signup" value="1"/>
<div class="clearfix oe_login_buttons">
<a href="/web/login" class="btn btn-default pull-left">Back to Login</a>
<button type="submit" class="btn btn-primary pull-right">Signup</button>
</div>
</form>
<div class="oe_single_form_footer" t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="oe_login_manage_db" t-attf-href="/web/database/manager{{ '?debug' if debug else '' }}">Manage Databases</a>
<span class="oe_footer_seperator"> | </span>
</t>
<a href="http://www.openerp.com" target="_blank">Powered by <span>OpenERP</span></a>
</div>
</t>
</template>
</data>
</openerp>