Example #1
0
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"
Example #2
0
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"
Example #3
0
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"
Example #4
0
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"
Example #5
0
 def __call__(self,  exctype, value, traceback):
     self.write(exctype)
     self.write(value)
     for line in traceback.rstrip().splitlines():
         self.write(line.rstrip())
     self.flush()
Example #6
0
 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())
Example #7
0
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"
Example #8
0
 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