12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # -*- coding: utf-8 -*-
- # Part of Odoo. See LICENSE file for full copyright and licensing details.
- import hashlib
- import uuid
- from datetime import datetime
- from werkzeug import urls
- from odoo import api, models
- VALIDATION_KARMA_GAIN = 3
- class Users(models.Model):
- _inherit = 'res.users'
- @property
- def SELF_READABLE_FIELDS(self):
- return super().SELF_READABLE_FIELDS + ['karma']
- @property
- def SELF_WRITEABLE_FIELDS(self):
- return super().SELF_WRITEABLE_FIELDS + [
- 'country_id', 'city', 'website', 'website_description', 'website_published',
- ]
- @api.model
- def _generate_profile_token(self, user_id, email):
- """Return a token for email validation. This token is valid for the day
- and is a hash based on a (secret) uuid generated by the forum module,
- the user_id, the email and currently the day (to be updated if necessary). """
- profile_uuid = self.env['ir.config_parameter'].sudo().get_param('website_profile.uuid')
- if not profile_uuid:
- profile_uuid = str(uuid.uuid4())
- self.env['ir.config_parameter'].sudo().set_param('website_profile.uuid', profile_uuid)
- return hashlib.sha256((u'%s-%s-%s-%s' % (
- datetime.now().replace(hour=0, minute=0, second=0, microsecond=0),
- profile_uuid,
- user_id,
- email
- )).encode('utf-8')).hexdigest()
- def _send_profile_validation_email(self, **kwargs):
- if not self.email:
- return False
- token = self._generate_profile_token(self.id, self.email)
- activation_template = self.env.ref('website_profile.validation_email')
- if activation_template:
- params = {
- 'token': token,
- 'user_id': self.id,
- 'email': self.email
- }
- params.update(kwargs)
- token_url = self.get_base_url() + '/profile/validate_email?%s' % urls.url_encode(params)
- with self._cr.savepoint():
- activation_template.sudo().with_context(token_url=token_url).send_mail(
- self.id, force_send=True, raise_exception=True)
- return True
- def _process_profile_validation_token(self, token, email):
- self.ensure_one()
- validation_token = self._generate_profile_token(self.id, email)
- if token == validation_token and self.karma == 0:
- return self.write({'karma': VALIDATION_KARMA_GAIN})
- return False
|