def send_update(): src = request.params.get('source', default=None) code = request.params.get('code') url = request.params.get('url', default=None) upload = request.files.get('content', default=None) response.content_type = "text/plain; charset=utf-8" if not code or not (url or upload): return "FAIL" remote_ip = request.remote_addr sources = utils.get_sources() for s in sources: if src and sources[s]["comment"] != src: continue if not code in sources[s]["password"]: continue try: if url: tools.update.update(sources[s], url, remote_ip=remote_ip) elif upload: (name, ext) = os.path.splitext(upload.filename) if ext not in ('.bz2', '.gz', '.xml'): return 'FAIL: File extension not allowed.' save_filename = os.path.join(utils.dir_results, upload.filename) upload.save(save_filename, overwrite=True) tools.update.update(sources[s], save_filename, remote_ip=remote_ip) os.unlink(save_filename) except tools.update.OsmoseUpdateAlreadyDone: pass except: import traceback from cStringIO import StringIO import smtplib s = StringIO() sys.stderr = s traceback.print_exc() sys.stderr = sys.__stderr__ traceback = s.getvalue() return traceback.rstrip() return "OK" return "AUTH FAIL"
def send_update(): src = request.params.get("source", default=None) code = request.params.get("code") url = request.params.get("url", default=None) upload = request.files.get("content", default=None) response.content_type = "text/plain; charset=utf-8" if not code or not (url or upload): return "FAIL" remote_ip = request.remote_addr sources = utils.get_sources() for s in sources: if src and sources[s]["comment"] != src: continue if not code in sources[s]["password"]: continue try: if url: tools.update.update(sources[s], url, remote_ip=remote_ip) elif upload: (name, ext) = os.path.splitext(upload.filename) if ext not in (".bz2", ".gz", ".xml"): return "FAIL: File extension not allowed." save_filename = os.path.join(utils.dir_results, upload.filename) upload.save(save_filename, overwrite=True) tools.update.update(sources[s], save_filename, remote_ip=remote_ip) os.unlink(save_filename) except tools.update.OsmoseUpdateAlreadyDone: pass except: import traceback from cStringIO import StringIO import smtplib s = StringIO() sys.stderr = s traceback.print_exc() sys.stderr = sys.__stderr__ traceback = s.getvalue() return traceback.rstrip() return "OK" return "AUTH FAIL"
def send_update(db): src = request.params.get('source', default=None) code = request.params.get('code') upload = request.files.get('content', default=None) response.content_type = "text/plain; charset=utf-8" if not code or not upload: return "FAIL" db.execute( """ SELECT id FROM source JOIN source_password ON source.id = source_id WHERE analyser || '-' || country = %(comment)s AND password = %(password)s LIMIT 1 """, { "comment": src, "password": code }) res = db.fetchone() if not res and not os.environ.get("OSMOSE_UNLOCKED_UPDATE"): return "AUTH FAIL" if not res and os.environ.get("OSMOSE_UNLOCKED_UPDATE"): r = db.execute("SELECT COALESCE(MAX(id), 0) + 1 AS id FROM source") source_id = db.fetchone()["id"] analyser, country = src.split("-") db.execute( "INSERT INTO source(id, country, analyser) VALUES (%s, %s, %s)", (source_id, country, analyser)) db.execute( "INSERT INTO source_password(source_id, password) VALUES(%s, %s)", (source_id, code)) db.connection.commit() else: source_id = res["id"] remote_ip = request.remote_addr try: (name, ext) = os.path.splitext(upload.filename) if ext not in ('.bz2', '.gz', '.xml'): return 'FAIL: File extension not allowed.' save_filename = os.path.join(utils.dir_results, upload.filename) upload.save(save_filename, overwrite=True) tools.update.update(source_id, save_filename, remote_ip=remote_ip) os.unlink(save_filename) except tools.update.OsmoseUpdateAlreadyDone: return 'FAIL: Already up to date' except: import traceback from cStringIO import StringIO import smtplib s = StringIO() sys.stderr = s traceback.print_exc() sys.stderr = sys.__stderr__ traceback = s.getvalue() return traceback.rstrip() return "OK"
def send_update(db): src = request.params.get('source', default=None) # Deprecated, replaced by analyser & country analyser = request.params.get('analyser', default=None) country = request.params.get('country', default=None) code = request.params.get('code') upload = request.files.get('content', default=None) response.content_type = "text/plain; charset=utf-8" if not code or not upload: return "FAIL" if src: # Deprecated, replaced by analyser & country analyser, country = src.rsplit("-", 1) db.execute(""" SELECT id FROM source JOIN source_password ON source.id = source_id WHERE analyser = %(analyser)s AND country = %(country)s AND password = %(password)s LIMIT 1 """, {"analyser": analyser, "country": country, "password": code}) res = db.fetchone() if not res and not os.environ.get("OSMOSE_UNLOCKED_UPDATE"): return "AUTH FAIL" if not res and os.environ.get("OSMOSE_UNLOCKED_UPDATE"): r = db.execute("SELECT COALESCE(MAX(id), 0) + 1 AS id FROM source") source_id = db.fetchone()["id"] db.execute("INSERT INTO source(id, country, analyser) VALUES (%s, %s, %s)", (source_id, country, analyser)) db.execute("INSERT INTO source_password(source_id, password) VALUES(%s, %s)", (source_id, code)) db.connection.commit() else: source_id = res["id"] remote_ip = request.remote_addr try: (name, ext) = os.path.splitext(upload.filename) if ext not in ('.bz2','.gz','.xml'): return 'FAIL: File extension not allowed.' save_filename = os.path.join(utils.dir_results, upload.filename) upload.save(save_filename, overwrite=True) tools.update.update(source_id, save_filename, remote_ip=remote_ip) os.unlink(save_filename) except tools.update.OsmoseUpdateAlreadyDone: return 'FAIL: Already up to date' except: import traceback from cStringIO import StringIO import smtplib s = StringIO() sys.stderr = s traceback.print_exc() sys.stderr = sys.__stderr__ traceback = s.getvalue() return traceback.rstrip() return "OK"
def __call__(self, exctype, value, traceback): self.write(exctype) self.write(value) for line in traceback.rstrip().splitlines(): self.write(line.rstrip()) self.flush()
def __call__(self, exctype, value, traceback): self.logger.log(self.log_level, exctype) self.logger.log(self.log_level, value) for line in traceback.rstrip().splitlines(): self.logger.log(self.log_level, line.rstrip())
def send_update(db): src = request.params.get( 'source', default=None) # Deprecated, replaced by analyser & country analyser = request.params.get('analyser', default=None) country = request.params.get('country', default=None) code = request.params.get('code') upload = request.files.get('content', default=None) response.content_type = "text/plain; charset=utf-8" if not code or not upload: abort(401, 'FAIL') if src: # Deprecated, replaced by analyser & country analyser, country = src.rsplit("-", 1) db.execute( """ SELECT id FROM sources JOIN sources_password ON sources.id = source_id WHERE analyser = %(analyser)s AND country = %(country)s AND password = %(password)s LIMIT 1 """, { "analyser": analyser, "country": country, "password": code }) res = db.fetchone() if not res and not os.environ.get("OSMOSE_UNLOCKED_UPDATE"): abort(403, 'AUTH FAIL') if not res and os.environ.get("OSMOSE_UNLOCKED_UPDATE"): r = db.execute("SELECT COALESCE(MAX(id), 0) + 1 AS id FROM sources") source_id = db.fetchone()["id"] db.execute( "INSERT INTO sources(id, country, analyser) VALUES (%s, %s, %s)", (source_id, country, analyser)) db.execute( "INSERT INTO sources_password(source_id, password) VALUES(%s, %s)", (source_id, code)) db.connection.commit() else: source_id = res["id"] remote_ip = request.remote_addr try: (name, ext) = os.path.splitext(upload.filename) if ext not in ('.bz2', '.gz', '.xml'): abort(406, 'FAIL: File extension not allowed.') save_filename = os.path.join(utils.dir_results, upload.filename) upload.save(save_filename, overwrite=True) update.update(source_id, save_filename, remote_ip=remote_ip) os.unlink(save_filename) except update.OsmoseUpdateAlreadyDone: abort(409, 'FAIL: Already up to date') except: import traceback from io import StringIO import smtplib s = StringIO() sys.stderr = s traceback.print_exc() sys.stderr = sys.__stderr__ traceback = s.getvalue() abort(500, traceback.rstrip()) return "OK"
def format(self, record: logging.LogRecord) -> str: # noqa: A003 msg = super().format(record) traceback = getattr(record, "traceback", None) if traceback: msg += " -- see below:\n" + traceback.rstrip("\n") return msg