Commit f73bdbe4 authored by Linedwell's avatar Linedwell

2019 update

parent b3c09872
Pipeline #41787949 passed with stages
in 1 minute and 7 seconds
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Script de suivi des modifications de droits utilisateur sur Vikidia.
# (C) Linedwell, 2011-2018
#
# Distribué sous licence GNU GPLv3
# Distributed under the terms of the GNU GPLv3 license
# http://www.gnu.org/licenses/gpl.html
import sys
sys.path.insert(1, '..') #ajoute au PYTHONPATH le répertoire parent
import logging
logging.basicConfig(filename='log/rights_log_analyzer.log', format='%(asctime)s :: %(levelname)s :: %(message)s', level=logging.INFO)
import json
from datetime import datetime
def analyse(event_log):
#print event_log
report = []
for event in event_log:
#print event
dico = json.loads(event)
#print type(dico)
if dico['type'] == 'log' and dico['log_type'] == 'rights':
watched_rights = ["bureaucrat","sysop","nuker","abusefilter","bot","checkuser","oversight","developer"]
if isinstance(dico['timestamp'],int):
dico['timestamp'] = datetime.fromtimestamp(dico['timestamp']).isoformat()
oldgroups = dico['log_params']['oldgroups']
newgroups = dico['log_params']['newgroups']
#Différence symétrique entre les deux listes, on regarde quels droits ont été retirés/ajoutés
diff = list(set(oldgroups).symmetric_difference(set(newgroups)))
# Si l'un des droits modifiés figure dans la liste des droits surveillés
if (set(diff).intersection(watched_rights)):
line = "[%s][%s] %s -> %s : %s -> %s (%s)" %(dico['server_name'], dico['timestamp'], dico['user'], dico['title'], str(oldgroups), str(newgroups), dico['comment'])
report.append(line)
#mail_report(report)
#print report
#print dico
return report
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Script de suivi des modifications de droits utilisateur sur Vikidia.
# (C) Linedwell, 2011-2018
#
# Distribué sous licence GNU GPLv3
# Distributed under the terms of the GNU GPLv3 license
# http://www.gnu.org/licenses/gpl.html
import sys
sys.path.insert(1, '..') #ajoute au PYTHONPATH le répertoire parent
import logging
logging.basicConfig(filename='log/rights_log_check.log', format='%(asctime)s :: %(levelname)s :: %(message)s', level=logging.INFO)
import pywikibot
from pywikibot import pagegenerators
from datetime import datetime
import json
import rights_log_analyser
import mailer
# Déclarations
sites = {
'fr' : pywikibot.Site('fr','vikidia'),
'it' : pywikibot.Site('it','vikidia'),
'de' : pywikibot.Site('de','vikidia'),
'en' : pywikibot.Site('en','vikidia'),
'es' : pywikibot.Site('es','vikidia'),
'ru' : pywikibot.Site('ru','vikidia'),
'ca' : pywikibot.Site('ca','vikidia'),
'eu' : pywikibot.Site('eu','vikidia'),
'scn' : pywikibot.Site('scn','vikidia'),
#'test' : pywikibot.Site('test','vikidia'),
'central' : pywikibot.Site('central','vikidia'),
}
### debug ###
for s in sites:
sites[s].login()
### end debug
#Recuperation des journaux de modification de droits "sensibles"
def rights_logs(end):
watched_rights = ["bureaucrat","sysop","nuker","abusefilter","bot","checkuser","oversight","developer"]
event_log = []
for s in sites:
site = sites[s]
logevents = site.logevents(logtype="rights",end=end)
for le in logevents:
log_dico = le.data
json_data = {}
for key in log_dico:
json_data[key] = log_dico[key]
#print type(json_data)
json_data["log_id"] = json_data.pop("logid")
json_data["log_action"] = json_data.pop("action")
json_data["log_type"] = json_data.pop("type")
json_data["log_params"] = json_data.pop("params")
json_data["type"] = "log"
json_data["server_name"] = "%s.%s.org" %(site.code, str(site.family.name))
json_str = json.dumps(json_data)
event_log.append(json_str)
return event_log
#Envoie par mail le rapport de modification des droits
def send_report(report):
if len(report) > 0:
mail = "\n".join(report)
print mail
mailer.send('[RW] Modification de droits sur Vikidia.',mail)
#Exécution
def main():
last_check_file = 'rights-log-check.last'
file = open(last_check_file,'r')
last_check = file.read()
file.close()
event_log = rights_logs(last_check)
report = rights_log_analyser.analyse(event_log)
send_report(report)
now = datetime.utcnow()
file = open(last_check_file,'w')
file.write(now.isoformat())
file.close()
if __name__ == "__main__":
try:
main()
finally:
pywikibot.stopme()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Script d'initialisation des sections hebdomadaires / mensuelles
# (C) Linedwell, 2011-2018
#
# Distribué sous licence GNU GPLv3
# Distributed under the terms of the GNU GPLv3 license
# http://www.gnu.org/licenses/gpl.html
import sys
sys.path.insert(1, '..') #ajoute au PYTHONPATH le répertoire parent
import pywikibot
import re
# Déclarations
site = pywikibot.Site('fr','wikipedia')
monthList = [u"",u"janvier",u"février",u"mars",u"avril",u"mai",u"juin",u"juillet",u"août",u"septembre",u"octobre",u"novembre",u"décembre"]
pattern = re.compile(ur"^Catégorie:(?P<month>janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre) (?P<year>\d{1,4})$", re.I | re.U)
nbrModif = 0
nbrTotal = 0
#retourne un générateur sur la liste des Catégories demandées
def getWantedCategories():
return site.wantedcategories()
#retourne la liste des Catégories demandées du type [[Catégorie:<mois> <année>]]
def getWantedMonthsCategories():
wantedCats = getWantedCategories()
for cat in wantedCats:
if pattern.match(cat.title()):
yield cat
#créé la Catégorie demandée
def createWantedCategory(cat):
if not cat.exists():
match = pattern.match(cat.title())
mm = str(monthList.index(match.group('month').lower())).zfill(2)
yyyy = str(match.group('year'))
cat.text = "{{mois|" + mm + "|" + yyyy + "}}"
cat.save("[[WP:Bot|Robot]] : Création de catégorie")
#Exécution
def main():
catsToCreate = getWantedMonthsCategories()
for cat in catsToCreate:
createWantedCategory(cat)
if __name__ == "__main__":
try:
main()
finally:
pywikibot.stopme()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment