oauth_login_ext.py
3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# coding=utf-8
import logging
import werkzeug.utils
import werkzeug
import base64
import json
import odoo
from odoo import http
from odoo.http import request
from odoo.addons import auth_signup
from odoo.addons.auth_oauth.controllers.main import OAuthLogin
_logger = logging.getLogger(__name__)
class AuthSignupHome(OAuthLogin):
def _deal_state_r(self, state):
_logger.info('>>> get_state %s'%request.httprequest.url)
_fm = request.params.get('_fm', None)
if _fm:
fragment = base64.urlsafe_b64decode(_fm.encode('utf-8')).decode('utf-8')
fragment = fragment.replace('_ftype=wo', '')
r = werkzeug.url_unquote_plus(state.get('r', ''))
state['r'] = werkzeug.url_quote_plus('%s#%s'%(r, fragment))
return state
def _get_auth_link_wo(self, provider=None):
if not provider:
provider = request.env(user=1).ref('weodoo.provider_third')
return_url = request.httprequest.url_root + 'auth_oauth/signin3rd'
state = self.get_state(provider)
self._deal_state_r(state)
params = dict(
response_type='token',
client_id=provider['client_id'],
redirect_uri=return_url,
scope=provider['scope'],
state=json.dumps(state),
)
return "%s?%s" % (provider['auth_endpoint'], werkzeug.url_encode(params))
# def list_providers(self):
# providers = super(AuthSignupHome, self).list_providers()
# weodoo_provider = request.env(user=1).ref('weodoo.provider_third')
# for provider in providers:
# if provider['id']==weodoo_provider.id:
# provider['auth_link'] = self._get_auth_link_wo(provider)
# break
# return providers
# @http.route()
# def web_login(self, *args, **kw):
# if request.httprequest.method == 'GET':
# if request.session.uid and request.params.get('redirect'):
# return http.redirect_with_hash(request.params.get('redirect'))
# fm = request.params.get('_fm', None)
# if not request.session.uid and fm!=None:
# fragment = base64.urlsafe_b64decode(fm.encode('utf-8')).decode('utf-8')
# if '_ftype=wo' in fragment:
# auth_link = self._get_auth_link_wo()
# return werkzeug.utils.redirect(auth_link, 303)
# response = super(AuthSignupHome, self).web_login(*args, **kw)
# from .controllers import QR_DICT
# qr_id = str(request.session.get('qr_id', ''))#kw.get('qr_id', False)
# if qr_id and (request.params['login_success'] or request.session.uid):
# from .controllers import QR_DICT
# if qr_id in QR_DICT:
# qr = QR_DICT[qr_id]
# if 1:#qr['state']=='fail' and qr['openid']:
# # 绑定当前登录的用户
# if request.session.uid:
# user = request.env["res.users"].sudo().search(([('id','=',request.session.uid)]))
# else:
# user = request.env.user
# user.write({
# 'oauth_provider_id': qr['data']['oauth_provider_id'],
# 'oauth_uid': qr['data']['user_id'],
# })
# request.env.cr.commit()
# return response
@http.route()
def web_client(self, s_action=None, **kw):
res = super(AuthSignupHome, self).web_client(s_action, **kw)
if not request.session.uid:
fm = request.params.get('_fm', None)
if fm!=None:
res = werkzeug.utils.redirect('/web/login?_fm=%s'%fm, 303)
return res