[MERGE] forward port of branch saas-3 up to ec27773
[odoo/odoo.git] / addons / mail / controllers / main.py
1 import base64
2 import psycopg2
3
4 import openerp
5 from openerp import SUPERUSER_ID
6 from openerp import http
7 from openerp.http import request
8 from openerp.addons.web.controllers.main import content_disposition
9 import mimetypes
10
11
12 class MailController(http.Controller):
13     _cp_path = '/mail'
14
15     @http.route('/mail/download_attachment', type='http', auth='user')
16     def download_attachment(self, model, id, method, attachment_id, **kw):
17         # FIXME use /web/binary/saveas directly
18         Model = request.registry.get(model)
19         res = getattr(Model, method)(request.cr, request.uid, int(id), int(attachment_id))
20         if res:
21             filecontent = base64.b64decode(res.get('base64'))
22             filename = res.get('filename')
23             content_type = mimetypes.guess_type(filename)
24             if filecontent and filename:
25                 return request.make_response(
26                     filecontent,
27                     headers=[('Content-Type', content_type[0] or 'application/octet-stream'),
28                              ('Content-Disposition', content_disposition(filename))])
29         return request.not_found()
30
31     @http.route('/mail/receive', type='json', auth='none')
32     def receive(self, req):
33         """ End-point to receive mail from an external SMTP server. """
34         dbs = req.jsonrequest.get('databases')
35         for db in dbs:
36             message = dbs[db].decode('base64')
37             try:
38                 registry = openerp.registry(db)
39                 with registry.cursor() as cr:
40                     mail_thread = registry['mail.thread']
41                     mail_thread.message_process(cr, SUPERUSER_ID, None, message)
42             except psycopg2.Error:
43                 pass
44         return True