Script que desbloqueja els usuaris de Mantis Bug Tracker que han quedat bloquejats

Script que desbloqueja els usuaris de Mantis Bug Tracker que han quedat bloquejat

Ací et deixe el codi d'un script Python que hem afegit al gestor de ticketing Mantis Bug Tracker perquè, quan els usuaris s'equivoquen el Mantis, el seu compte queda bloquejat.

La idea és fer l'script desbloquejar_mantis.py i que s'execute cada 5 minuts. Per a fer-ho, l'he afegit al Crontab de la següent manera:


## Cada 5 minuts executem l'script que desbloqueja els usuaris de Mantis
*/5 * * * * /usr/bin/python /var/www/asistencias-25/desbloquejar_mantis.py >> /var/log/desbloquejar_mantis-cron.log 2>&1

I ací el codi de l'script:


#!/usr/bin/env python2
# -*- coding: utf-8 -*-

"""
Desbloqueig automatic d'usuaris de MantisBT 2.25.4
Compatible amb Python 2.7
"""

from __future__ import print_function

import sys
import logging
import MySQLdb

# Configuracio de la base de dades
DB_CONFIG = {
    "host": "localhost",
    "user": "admindb",
    "passwd": "lacasitos",
    "db": "mantisbt_2_25_db",
    "charset": "utf8"
}

# Maxim d'intents fallits
MAX_INTENTS = 2

# Fitxer de registre
LOG_FILE = "/var/log/desbloquejar_mantis.log"

logging.basicConfig(
    filename=LOG_FILE,
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s"
)

def main():
    conn = None
    cursor = None

try:
conn = MySQLdb.connect(**DB_CONFIG)
cursor = conn.cursor(MySQLdb.cursors.DictCursor)

# Buscar usuaris bloquejats
cursor.execute("""
SELECT id, username, failed_login_count
FROM mantis_user_table
WHERE enabled = 1
AND failed_login_count >= %s
ORDER BY username
""", (MAX_INTENTS,))

usuaris = cursor.fetchall()

if not usuaris:
print("No hi ha usuaris bloquejats.")
return 0

print("Usuaris bloquejats: {}".format(len(usuaris)))

for usuari in usuaris:
print(
"Desbloquejant: {} (intents: {})".format(
usuari["username"],
usuari["failed_login_count"]
)
)

# Reiniciar comptadors
cursor.execute("""
UPDATE mantis_user_table
SET failed_login_count = 0
WHERE enabled = 1
AND failed_login_count >= %s
""", (MAX_INTENTS,))

modificats = cursor.rowcount
conn.commit()

for usuari in usuaris:
logging.info(
"Desbloquejat: %s (ID=%s, intents=%s)",
usuari["username"],
usuari["id"],
usuari["failed_login_count"]
)

print("Total usuaris desbloquejats: {}".format(modificats))

logging.info(
"Execucio completada. Total desbloquejats: %s",
modificats
)

return 0

except MySQLdb.Error as error:
if conn:
conn.rollback()

print("ERROR de base de dades: {}".format(error))
logging.error("Error de base de dades: %s", error)
return 1

except Exception as error:
if conn:
conn.rollback()

print("ERROR: {}".format(error))
logging.exception("Error inesperat")
return 1

finally:
if cursor:
cursor.close()
if conn:
conn.close()

if __name__ == "__main__":
sys.exit(main())

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.

Utilitats

NAVEGACIÓ SENSE RATOLÍ

- Tab següent enllaç.
- Shift+Tab anterior enllaç.
- Enter activa l'enllaç.
- Alt+esquerra anar arrere.

CONTRAST DE COLORS

Accessibilitat - Color Negre
Accessibilitat - Color Groc
Accessibilitat - Color Verd

Accessibilitat - Color Blau
Accessibilitat - Color Crema
Accessibilitat - Color Blanc

 

PORTADES ALTERNATIVES