summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeep Bundela <dbu@odoo.com>2015-08-17 18:20:16 +0530
committerJérome Maes <jem@openerp.com>2016-04-27 16:35:45 +0200
commit3e1fb87e93692a11b03e1bd815a0a04d7416b4c4 (patch)
tree45df87aad86eba151d0424f5205ca14de29ff451
parent65ec248883644a0fac6ada58143bafbafd7069bc (diff)
[MIG] google_account: migrate into new API
-rw-r--r--addons/google_account/__openerp__.py5
-rw-r--r--addons/google_account/controllers/main.py38
-rw-r--r--addons/google_account/data/google_account_data.xml6
-rw-r--r--addons/google_account/models/google_service.py104
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,)