diff options
| author | Deep Bundela <dbu@odoo.com> | 2015-08-17 18:20:16 +0530 |
|---|---|---|
| committer | Jérome Maes <jem@openerp.com> | 2016-04-27 16:35:45 +0200 |
| commit | 3e1fb87e93692a11b03e1bd815a0a04d7416b4c4 (patch) | |
| tree | 45df87aad86eba151d0424f5205ca14de29ff451 | |
| parent | 65ec248883644a0fac6ada58143bafbafd7069bc (diff) | |
[MIG] google_account: migrate into new API
| -rw-r--r-- | addons/google_account/__openerp__.py | 5 | ||||
| -rw-r--r-- | addons/google_account/controllers/main.py | 38 | ||||
| -rw-r--r-- | addons/google_account/data/google_account_data.xml | 6 | ||||
| -rw-r--r-- | addons/google_account/models/google_service.py | 104 |
4 files changed, 71 insertions, 82 deletions
diff --git a/addons/google_account/__openerp__.py b/addons/google_account/__openerp__.py index c45baf8e285..8aae3b023cc 100644 --- a/addons/google_account/__openerp__.py +++ b/addons/google_account/__openerp__.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. - { 'name': 'Google Users', - 'version': '1.0', 'category': 'Tools', 'description': """ The module adds google user in res user. @@ -14,7 +12,4 @@ The module adds google user in res user. 'data': [ 'data/google_account_data.xml', ], - 'demo': [], - 'installable': True, - 'auto_install': False, } diff --git a/addons/google_account/controllers/main.py b/addons/google_account/controllers/main.py index 504a9933fea..dd35c932a1b 100644 --- a/addons/google_account/controllers/main.py +++ b/addons/google_account/controllers/main.py @@ -1,32 +1,28 @@ +# -*- coding: utf-8 -*- + import json -import urllib -import openerp -from openerp import http -from openerp.http import request -import openerp.addons.web.controllers.main as webmain -from openerp.addons.web.http import SessionExpiredException -from werkzeug.exceptions import BadRequest -import werkzeug.utils +from werkzeug.utils import redirect + +from odoo import http, registry +from odoo.http import request + + +class GoogleAuth(http.Controller): -class google_auth(http.Controller): - @http.route('/google_account/authentication', type='http', auth="none") def oauth2callback(self, **kw): """ This route/function is called by Google when user Accept/Refuse the consent of Google """ - + state = json.loads(kw['state']) dbname = state.get('d') service = state.get('s') url_return = state.get('f') - - registry = openerp.modules.registry.RegistryManager.get(dbname) - with registry.cursor() as cr: - if kw.get('code',False): - registry.get('google.%s' % service).set_all_tokens(cr,request.session.uid,kw['code']) - return werkzeug.utils.redirect(url_return) + + with registry(dbname).cursor() as cr: + if kw.get('code'): + request.env(cr, request.session.uid)['google.%s' % service].set_all_tokens(kw['code']) + return redirect(url_return) elif kw.get('error'): - return werkzeug.utils.redirect("%s%s%s" % (url_return ,"?error=" , kw.get('error'))) + return redirect("%s%s%s" % (url_return, "?error=", kw['error'])) else: - return werkzeug.utils.redirect("%s%s" % (url_return ,"?error=Unknown_error")) - - + return redirect("%s%s" % (url_return, "?error=Unknown_error")) diff --git a/addons/google_account/data/google_account_data.xml b/addons/google_account/data/google_account_data.xml index c6748df7dc9..1c3a5f4089e 100644 --- a/addons/google_account/data/google_account_data.xml +++ b/addons/google_account/data/google_account_data.xml @@ -1,9 +1,9 @@ -<?xml version="1.0"?> -<openerp> +<?xml version="1.0" encoding="utf-8"?> +<odoo> <data noupdate="1"> <record id="config_google_redirect_uri" model="ir.config_parameter"> <field name="key">google_redirect_uri</field> <field name="value">urn:ietf:wg:oauth:2.0:oob</field> </record> </data> -</openerp>
\ No newline at end of file +</odoo> diff --git a/addons/google_account/models/google_service.py b/addons/google_account/models/google_service.py index 9142dc67638..2654b305303 100644 --- a/addons/google_account/models/google_service.py +++ b/addons/google_account/models/google_service.py @@ -1,30 +1,28 @@ # -*- coding: utf-8 -*- -import openerp -from openerp.http import request -from openerp.osv import osv -from openerp import SUPERUSER_ID -from openerp.tools.translate import _ from datetime import datetime -from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT +from odoo import api, fields, models, registry, _ +from odoo.http import request -import werkzeug.urls -import urllib2 import json +import urllib2 +import werkzeug.urls import logging _logger = logging.getLogger(__name__) TIMEOUT = 20 -class google_service(osv.osv_memory): + +class GoogleService(models.TransientModel): _name = 'google.service' - def generate_refresh_token(self, cr, uid, service, authorization_code, context=None): - ir_config = self.pool['ir.config_parameter'] - client_id = ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service) - client_secret = ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_secret' % service) - redirect_uri = ir_config.get_param(cr, SUPERUSER_ID, 'google_redirect_uri') + @api.model + def generate_refresh_token(self, service, authorization_code): + ICPSudo = self.env['ir.config_parameter'].sudo() + client_id = ICPSudo.get_param('google_%s_client_id' % service) + client_secret = ICPSudo.get_param('google_%s_client_secret' % service) + redirect_uri = ICPSudo.get_param('google_redirect_uri') #Get the Refresh Token From Google And store it in ir.config_parameter headers = {"Content-type": "application/x-www-form-urlencoded"} @@ -35,30 +33,31 @@ class google_service(osv.osv_memory): content = urllib2.urlopen(req, timeout=TIMEOUT).read() except urllib2.HTTPError: error_msg = _("Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired") - raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context) + raise self.env['res.config.settings'].get_config_warning(error_msg) content = json.loads(content) return content.get('refresh_token') - def _get_google_token_uri(self, cr, uid, service, scope, context=None): - ir_config = self.pool['ir.config_parameter'] + @api.model + def _get_google_token_uri(self, service, scope): + ICPSudo = self.env['ir.config_parameter'].sudo() params = { 'scope': scope, - 'redirect_uri': ir_config.get_param(cr, SUPERUSER_ID, 'google_redirect_uri'), - 'client_id': ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service), + 'redirect_uri': ICPSudo.get_param('google_redirect_uri'), + 'client_id': ICPSudo.get_param('google_%s_client_id' % service), 'response_type': 'code', - 'client_id': ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service), } uri = 'https://accounts.google.com/o/oauth2/auth?%s' % werkzeug.url_encode(params) return uri # If no scope is passed, we use service by default to get a default scope - def _get_authorize_uri(self, cr, uid, from_url, service, scope=False, context=None): - """ This method return the url needed to allow this instance of OpenErp to access to the scope of gmail specified as parameters """ - state_obj = dict(d=cr.dbname, s=service, f=from_url) + @api.model + def _get_authorize_uri(self, from_url, service, scope=False): + """ This method return the url needed to allow this instance of Odoo to access to the scope of gmail specified as parameters """ + state_obj = dict(d=self.env.cr.dbname, s=service, f=from_url) - base_url = self.get_base_url(cr, uid, context) - client_id = self.get_client_id(cr, uid, service, context) + base_url = self.get_base_url() + client_id = self.get_client_id(service) params = { 'response_type': 'code', @@ -73,12 +72,14 @@ class google_service(osv.osv_memory): uri = self.get_uri_oauth(a='auth') + "?%s" % werkzeug.url_encode(params) return uri - def _get_google_token_json(self, cr, uid, authorize_code, service, context=None): + @api.model + def _get_google_token_json(self, authorize_code, service): res = False - base_url = self.get_base_url(cr, uid, context) - client_id = self.get_client_id(cr, uid, service, context) - client_secret = self.get_client_secret(cr, uid, service, context) + base_url = self.get_base_url() + client_id = self.get_client_id(service) + client_secret = self.get_client_secret(service) + headers = {"content-type": "application/x-www-form-urlencoded"} params = { 'code': authorize_code, 'client_id': client_id, @@ -87,22 +88,21 @@ class google_service(osv.osv_memory): 'redirect_uri': base_url + '/google_account/authentication' } - headers = {"content-type": "application/x-www-form-urlencoded"} - try: uri = self.get_uri_oauth(a='token') data = werkzeug.url_encode(params) - st, res, ask_time = self._do_request(cr, uid, uri, params=data, headers=headers, type='POST', preuri='', context=context) + st, res, ask_time = self._do_request(uri, params=data, headers=headers, type='POST', preuri='') except urllib2.HTTPError: error_msg = _("Something went wrong during your token generation. Maybe your Authorization Code is invalid") - raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context) + raise self.env['res.config.settings'].get_config_warning(error_msg) return res - def _refresh_google_token_json(self, cr, uid, refresh_token, service, context=None): # exchange_AUTHORIZATION vs Token (service = calendar) + @api.model + def _refresh_google_token_json(self, refresh_token, service): # exchange_AUTHORIZATION vs Token (service = calendar) res = False - client_id = self.get_client_id(cr, uid, service, context) - client_secret = self.get_client_secret(cr, uid, service, context) + client_id = self.get_client_id(service) + client_secret = self.get_client_secret(service) params = { 'refresh_token': refresh_token, @@ -117,28 +117,25 @@ class google_service(osv.osv_memory): uri = self.get_uri_oauth(a='token') data = werkzeug.url_encode(params) - st, res, ask_time = self._do_request(cr, uid, uri, params=data, headers=headers, type='POST', preuri='', context=context) + st, res, ask_time = self._do_request(uri, params=data, headers=headers, type='POST', preuri='') except urllib2.HTTPError, e: if e.code == 400: # invalid grant - registry = openerp.modules.registry.RegistryManager.get(request.session.db) - with registry.cursor() as cur: - self.pool['res.users'].write(cur, uid, [uid], {'google_%s_rtoken' % service: False}, context=context) + with registry(request.session.db).cursor() as cur: + self.env(cur)['res.users'].browse(self.env.uid).write({'google_%s_rtoken' % service: False}) error_key = json.loads(e.read()).get("error", "nc") _logger.exception("Bad google request : %s !" % error_key) error_msg = _("Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired [%s]") % error_key - raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context) + raise self.env['res.config.settings'].get_config_warning(error_msg) return res - def _do_request(self, cr, uid, uri, params={}, headers={}, type='POST', preuri="https://www.googleapis.com", context=None): - if context is None: - context = {} - + @api.model + def _do_request(self, uri, params={}, headers={}, type='POST', preuri="https://www.googleapis.com"): """ Return a tuple ('HTTP_CODE', 'HTTP_RESPONSE') """ _logger.debug("Uri: %s - Type : %s - Headers: %s - Params : %s !" % (uri, type, headers, werkzeug.url_encode(params) if type == 'GET' else params)) status = 418 response = "" - ask_time = datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT) + ask_time = fields.Datetime.now() try: if type.upper() == 'GET' or type.upper() == 'DELETE': data = werkzeug.url_encode(params) @@ -170,17 +167,18 @@ class google_service(osv.osv_memory): _logger.exception("Bad google request : %s !" % e.read()) if e.code in (400, 401, 410): raise e - raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong with your request to google"), context=context) + raise self.env['res.config.settings'].get_config_warning(_("Something went wrong with your request to google")) return (status, response, ask_time) - def get_base_url(self, cr, uid, context=None): - return self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://www.openerp.com?NoBaseUrl', context=context) + def get_base_url(self): + return self.env['ir.config_parameter'].get_param('web.base.url', default='http://www.odoo.com?NoBaseUrl') - def get_client_id(self, cr, uid, service, context=None): - return self.pool.get('ir.config_parameter').get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % (service,), default=False, context=context) + @api.model + def get_client_id(self, service): + return self.env['ir.config_parameter'].sudo().get_param('google_%s_client_id' % (service,), default=False) - def get_client_secret(self, cr, uid, service, context=None): - return self.pool.get('ir.config_parameter').get_param(cr, SUPERUSER_ID, 'google_%s_client_secret' % (service,), default=False, context=context) + def get_client_secret(self, service): + return self.env['ir.config_parameter'].sudo().get_param('google_%s_client_secret' % (service,), default=False) def get_uri_oauth(self, a=''): # a = optional action return "https://accounts.google.com/o/oauth2/%s" % (a,) |
