예제 #1
0
def ensure_db():
    db = request.params.get('db') and request.params.get('db').strip()

    # Ensure db is legit
    if db and db not in http.db_filter([db]):
        db = None

    if db and not request.session.db:
        # User asked a specific database on a new session.
        request.session.db = db
        return

    # if db not provided, use the session one
    if not db and request.session.db and http.db_filter([request.session.db]):
        db = request.session.db

    # if no database provided and no database in session, use monodb
    if not db:
        db = http.db_monodb(request.httprequest)

    # always switch the session to the computed db
    if db != request.session.db:
        request.session.logout()

    request.session.db = db
예제 #2
0
 def _get_company_image_response(self,
                                 dbname,
                                 field,
                                 placeholders,
                                 default_mimetype,
                                 company=None):
     uid = request.session.uid if request.session.db else None
     placeholder = self._get_company_image_placeholder()
     if request.session.db:
         dbname = request.session.db
     elif dbname is None:
         dbname = http.db_monodb()
     if not dbname:
         response = http.send_file(placeholder(placeholders[0]))
     else:
         uid = uid if uid else SUPERUSER_ID
         company_data = self._get_company_image_data(
             dbname, uid, field, company)
         if company_data and company_data[0]:
             image_data = base64.b64decode(company_data[0])
             mimetype = guess_mimetype(image_data, default=default_mimetype)
             extension = mimetypes.guess_extension(mimetype)
             response = http.send_file(io.BytesIO(image_data),
                                       filename=('logo%s' % extension),
                                       mimetype=mimetype,
                                       mtime=company_data[1])
         else:
             response = http.send_file(placeholder(placeholders[1]))
     return response
예제 #3
0
파일: database.py 프로젝트: pasgou/muk_misc
 def _render_template(self, **d):
     d.setdefault('manage', True)
     d['insecure'] = tools.config.verify_admin_password('admin')
     d['list_db'] = tools.config['list_db']
     d['langs'] = service.db.exp_list_lang()
     d['countries'] = service.db.exp_list_countries()
     d['pattern'] = DBNAME_PATTERN
     d['system_name'] = tools.config.get("database_manager_system_name",
                                         "Odoo")
     d['system_logo'] = tools.config.get("database_manager_system_logo_url",
                                         "/web/static/src/img/logo2.png")
     d['system_favicon'] = tools.config.get(
         "database_manager_system_favicon_url",
         "/web/static/src/img/favicon.ico")
     d['privacy_policy'] = tools.config.get(
         "database_manager_privacy_policy_url",
         "https://www.odoo.com/privacy")
     d['databases'] = []
     try:
         d['databases'] = db_list()
         d['incompatible_databases'] = service.db.list_db_incompatible(
             d['databases'])
     except exceptions.AccessDenied:
         monodb = db_monodb()
         if monodb:
             d['databases'] = [monodb]
     return env.get_template("database_manager.html").render(d)
예제 #4
0
 def _render_template(self, **d):
     res = super(BackupDatabase, self)._render_template(**d)
     # Show button 'Restore via Odoo-backup.sh' on web/database/manager and web/database/selector pages
     place_for_backup_button = re.search(
         'Set Master Password</button>.*\n.*</div>', res)
     if place_for_backup_button:
         place_for_backup_button = place_for_backup_button.end()
     else:
         place_for_backup_button = re.search(
             '<a role="button" data-toggle="modal" data-target=".o_database_restore" class="btn btn-link">',
             res)
         if place_for_backup_button:
             place_for_backup_button = place_for_backup_button.start()
     if place_for_backup_button:
         d['list_db'] = config['list_db']
         d['databases'] = []
         try:
             d['databases'] = http.db_list()
         except odoo.exceptions.AccessDenied:
             monodb = http.db_monodb()
             if monodb:
                 d['databases'] = [monodb]
         backup_button = env.get_template("backup_button.html").render(d)
         res = res[:place_for_backup_button] + backup_button + res[
             place_for_backup_button:]
     return res
예제 #5
0
 def database_list(self, **kw):
     databases = []
     incompatible_databases = []
     try:
         databases = http.db_list()
         incompatible_databases = service.db.list_db_incompatible(databases)
     except AccessDenied:
         monodb = http.db_monodb()
         if monodb:
             databases = [monodb]
     result = {'databases': databases, 'incompatible_databases': incompatible_databases}
     content = json.dumps(result, sort_keys=True, indent=4, cls=ResponseEncoder)
     return Response(content, content_type='application/json;charset=utf-8', status=200)
예제 #6
0
 def authenticate(self):
     params = request.params
     db_name = params.get("db", db_monodb())
     request.session.authenticate(db_name, params["login"], params["password"])
     result = request.env["ir.http"].session_info()
     # avoid to rotate the session outside of the scope of this method
     # to ensure that the session ID does not change after this method
     _rotate_session(request)
     request.session.rotate = False
     expiration = datetime.datetime.utcnow() + datetime.timedelta(days=90)
     result["session"] = {
         "sid": request.session.sid,
         "expires_at": fields.Datetime.to_string(expiration),
     }
     return result
예제 #7
0
 def wrapper(*args, **kwargs):
     params = http.request.params
     session = http.request.session
     database = params.get('db') and params.get('db').strip()
     if database and database not in http.db_filter([database]):
         database = None
     if not database and session.db and http.db_filter([session.db]):
         database = session.db
     if not database:
         database = http.db_monodb(http.request.httprequest)
     if not database:
         return exceptions.common.NoDatabaseFound()
     if database != session.db:
         session.logout()
     session.db = database
     return func(*args, **kwargs)
예제 #8
0
 def authentication(self, payload):
     params = request.params
     db_name = params.get("db", db_monodb())
     request.session.authenticate(db_name, params["agentid"],
                                  params["password"])
     result = request.env["ir.http"].session_info()
     _rotate_session(request)
     request.session.rotate = False
     expiration = datetime.datetime.utcnow() + datetime.timedelta(days=7)
     return self.env.datamodels["saleforce.login.datamodel.out"](
         session_id=request.session.sid,
         expires_at=fields.Datetime.to_string(expiration),
         uid=result.get("uid"),
         agentid=result.get("username"),
         name=result.get("name"),
         partner_id=result.get("partner_id"),
     )
    def backup(self):
        db_name = http.db_monodb()

        Config = self.env['ir.config_parameter'].sudo()
        local_backup = Config.get_param('abackup_local_backup')
        backup_path = Config.get_param('abackup_local_path')
        gdrive_backup = Config.get_param('abackup_gdrive_backup')
        backup = None

        try:
            ts = datetime.utcnow().strftime(self.TIME_FORMAT)
            filename = "%s_%s_%s.%s" % (self.PREFIX, db_name, ts, 'dump')
            file_path = None
            drive_id = None
            dump_stream = odoo.service.db.dump_db(db_name, None, 'dump').read()

            if local_backup:
                file_path = backup_path + filename
                with open(file_path, 'wb') as f:
                    f.write(dump_stream)

            if gdrive_backup:
                Drive = self.env['odoo_addon_auto_backup.google_drive']
                drive_id = Drive.upload_resumable(dump_stream, filename)
                # drive_id = Drive.upload(dump_stream, filename)

            # Create a new backup record
            backup = self.env['odoo_addon_auto_backup.backup'].create({
                'created_time':
                datetime.now(),
                'file_name':
                filename,
                'local_path':
                file_path,
                'gdrive_id':
                drive_id,
            })

        except Exception as e:
            _logger.exception('Database.backup')

        return backup
예제 #10
0
def ensure_db(redirect='/web/database/selector'):
    db = request.params.get('db')
    if db and db not in http.db_filter([db]):
        db = None
    if db and not request.session.db:
        r = request.httprequest
        url_redirect = r.base_url
        if r.query_string:
            url_redirect += '?' + r.query_string
        response = werkzeug.utils.redirect(url_redirect, 302)
        request.session.db = db
        abort_and_redirect(url_redirect)
    if not db and request.session.db and http.db_filter([request.session.db]):
        db = request.session.db
    if not db:
        db = http.db_monodb(request.httprequest)
    if not db:
        werkzeug.exceptions.abort(werkzeug.utils.redirect(redirect, 303))
    if db != request.session.db:
        request.session.logout()
        abort_and_redirect(request.httprequest.url)
    request.session.db = db