Commit 4aae5c67 authored by Gabriel Detraz's avatar Gabriel Detraz

Merge branch 'master' of https://gitlab.crans.org/nounous/scripts

MAJ
parents 48e63735 09a9e291
This diff is collapsed.
This diff is collapsed.
......@@ -86,7 +86,7 @@ class Dialog(proprio.Dialog):
title="Modification de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=choices)
def todo(tag, menu, adherent, cont_ret):
......@@ -111,6 +111,10 @@ class Dialog(proprio.Dialog):
codes_todo=[([self.dialog.DIALOG_OK], todo, [tag, menu, adherent, cont_ret])]
)
def modif_adherent_attributs(self, adherent, attr, cont):
"""Juste un raccourci vers edit_attributs spécifique aux adherents"""
return self.edit_attributs(obj=adherent, update_obj='adherent', attr=attr, title="Modification de %s %s" % (adherent['prenom'][0], adherent['nom'][0]), cont=cont)
def adherent_administratif(self, cont, adherent, default_item=None):
"""Menu de gestion du compte crans d'un proprio"""
......@@ -142,7 +146,7 @@ class Dialog(proprio.Dialog):
title="Gestion administrative de %s %s" % (adherent.get('prenom', [''])[0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(k, menu[k]['text'], menu[k]['help']) for k in menu_order if self.has_right(menu_droits[k], adherent)])
def todo(tag, menu, adherent, self_cont):
......@@ -348,7 +352,7 @@ class Dialog(proprio.Dialog):
title="Connexion de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(k, menu[k]['text']) for k in menu_order])
# Génération et crédit de la facture
......@@ -889,7 +893,7 @@ class Dialog(proprio.Dialog):
title="Déménagement de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(k, menu[k]['text'], menu[k]['help']) for k in menu_order if self.has_right(menu_droits[k], adherent)])
def todo(tag, menu, adherent, self_cont, cont):
......@@ -1089,7 +1093,7 @@ class Dialog(proprio.Dialog):
title="Études de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=choices_etablissement)
def box_annee(default_item):
......@@ -1123,7 +1127,7 @@ class Dialog(proprio.Dialog):
title="Études de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=box_choice)
def box_section(default_item):
......@@ -1147,7 +1151,7 @@ class Dialog(proprio.Dialog):
title="Études de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=section_ENS)
self_cont = TailCall(self.adherent_etudes, adherent=adherent, cont=cont, cancel_cont=cancel_cont, default_item=default_item, etablissement=etablissement, annee=annee, section=section)
......
......@@ -54,7 +54,7 @@ class Dialog(lc.Dialog):
scrollbar=True,
colors=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=choices)
def todo(tag):
......@@ -93,7 +93,7 @@ class Dialog(lc.Dialog):
scrollbar=True,
colors=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(k,v) for (k,v) in config.blacklist_items.items()])
def todo(tag, retry_cont):
......
......@@ -448,7 +448,7 @@ les valeurs valident sont :
title="Modification des certificats de %s" % certificat.machine()['host'][0],
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(key, menu[key]['text'], menu[key]['help']) for key in menu_order if self.has_right(menu_droits[key], certificat)])
def todo(tag, menu, certificat, self_cont):
......@@ -515,7 +515,7 @@ les valeurs valident sont :
scrollbar=True,
default_item=str(default_item),
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=choices)
def todo(tag):
......
......@@ -47,6 +47,12 @@ class Dialog(CPS.Dialog):
return True
return False
def _connected_as(self):
ret = u"Vous êtes connecté en tant que %s" % self.conn.current_login
if self.ldap_test:
ret += u" sur la base de test"
return ret
def check_ldap(self):
"""Se connecte à la base ldap et vérifie les droits de l'utilisateur courant"""
self.check_ldap_last = time.time()
......
......@@ -164,11 +164,6 @@ class Dialog(certificat.Dialog, blacklist.Dialog):
"""Juste un raccourci vers edit_attributs spécifique aux machines"""
return self.edit_attributs(obj=machine, update_obj='machine', attr=attr, title="Modification de la machine %s" % machine['host'][0], cont=cont)
def modif_adherent_attributs(self, adherent, attr, cont):
"""Juste un raccourci vers edit_attributs spécifique aux adherents"""
return self.edit_attributs(obj=adherent, update_obj='adherent', attr=attr, title="Modification de %s %s" % (adherent['prenom'][0], adherent['nom'][0]), cont=cont)
def modif_machine_boolean(self, machine, cont):
"""Juste un raccourci vers edit_boolean_attributs spécifique aux machines"""
a = attributs
......@@ -225,7 +220,7 @@ class Dialog(certificat.Dialog, blacklist.Dialog):
title="Modification de %s" % machine['host'][0],
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(key, menu[key]['text']) for key in menu_order if self.has_right(menu_droits[key], machine)])
def todo(tag, menu, machine, cont_ret):
......@@ -286,7 +281,7 @@ class Dialog(certificat.Dialog, blacklist.Dialog):
title="Création de machines",
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(key, menu[key]['text']) for key in menu_order if self.has_right(menu_droits[key], proprio)])
def todo(tag, menu, proprio, self_cont, cont):
......
......@@ -333,7 +333,7 @@ class Dialog(machine.Dialog, blacklist.Dialog):
title="Gestion du compte de %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=[(k, menu[k]['text'], menu[k]['help']) for k in menu_order if self.has_right(menu_droits[k], proprio)])
def todo(tag, menu, proprio, self_cont):
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
import subprocess
_options = ['PasswordAuthentication=no', 'ConnectTimeout=1', 'VerifyHostKeyDNS=yes',
_options = ['PasswordAuthentication=no', 'ConnectTimeout=1', 'VerifyHostKeyDNS=no',
'BatchMode=yes', 'ServerAliveInterval=5', 'ServerAliveCountMax=1']
_args = ["ssh", "-4", "-i", "/etc/crans/secrets/trigger-generate" ]
......
......@@ -53,19 +53,31 @@ isbureau = u'Bureau' in droits
encoding = sys.stdin.encoding or 'UTF-8'
if u'Nounou' in droits:
# Si on est nounou
if os.path.exists(os.path.expanduser('~/.dialogrc')):
dialogrc='~/.dialogrc'
# Si on a un fichier de configuration du programme dialog dans son
# HOME, alors on récupère son chemin.
DIALOGRC = '~/.dialogrc'
else:
dialogrc='/etc/dialog.rc'
dlg = dialog.Dialog(DIALOGRC=dialogrc)
dialog_theme='DIALOGRC='+dialogrc
# Sinon on utilise celui du système.
DIALOGRC = '/etc/dialog.rc'
dlg = dialog.Dialog(DIALOGRC=DIALOGRC)
else:
# Si on est pas nounou, on est libre de faire ce que l'on veut avec la
# variable d'environnement DIALOGRC.
DIALOGRC = ''
dlg = dialog.Dialog()
dialog_theme=''
def dialog(arg):
return affich_tools.dialog(u'Gestion des adhérents et machines du Crans', arg, dialog_theme)
"""
Raccourci permettant d'appeler :py:func:`affich_tools.dialog`.
.. seealso:: :py:func:`affich_tools.dialog`
"""
return affich_tools.dialog(u'Gestion des adhérents et machines du Crans', arg, DIALOGRC)
in_facture = None
#########################################################################
......@@ -92,7 +104,8 @@ def set_bases(adher):
# Affichage
annul, result = dialog(arg)
if annul: return 1
if annul:
return 1
# Traitement
err = ''
......@@ -675,7 +688,7 @@ def set_actif(adher):
if annul: return 1
# Traitement
if '1\n' in result:
if '1' in result:
adher.active(False)
else:
adher.active(True)
......@@ -1012,7 +1025,7 @@ def set_vente(proprio):
f = Facture(proprio)
# Traitement
for key in items.keys():
if '%s\n' % key in result:
if key in result:
while 1:
if items[key]['pu'] != '*':
arg = u'--title "Nombre de %s ?" ' % items[key]['designation']
......@@ -1345,17 +1358,17 @@ def set_admin(proprio):
# Traitement
if has_card:
if '1\n' in result:
if '1' in result:
proprio.carteEtudiant(True)
elif iscontroleur or carte_ok == 'off':
proprio.carteEtudiant(False)
if '2\n' in result:
if '2' in result:
proprio.controle('+c')
else:
proprio.controle('-c')
if has_card:
if '3\n' in result:
if '3' in result:
proprio.charteMA(True)
elif isadm or isbureau:
proprio.charteMA(False)
......@@ -2317,7 +2330,7 @@ def select(clas, quoi, mde=''):
si m = ro ouvre l'objet en mode read-only
"""
s= ['', '', '', '', '', '', '', '', '', '', '']
s= ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
def unicodize(a):
try:
return unicode(a, 'utf-8')
......@@ -2342,6 +2355,11 @@ def select(clas, quoi, mde=''):
arg += u'"mid :" 5 37 "%s" 5 43 17 5 ' % s[9]
arg += u'"Filtres facture" 6 40 "" 0 0 0 0 '
arg += u'"fid :" 7 37 "%s" 7 43 17 5 ' % s[10]
arg += u'"Filtres clubs" 1 70 "" 0 0 0 0 '
arg += u'"Nom :" 2 64 "%s" 2 73 20 30 ' % s[11]
arg += u'"Local :" 3 64 "%s" 3 73 20 00 ' % s[12]
arg += u'"cid :" 4 64 "%s" 4 73 20 5 ' % s[13]
arg += u'"Login :" 5 64 "%s" 5 73 20 00 ' % s[14]
arg += u'"Remarque : les champs vides sont ignorés." 8 1 "" 0 0 0 0'
annul, result = dialog(arg)
......@@ -2365,10 +2383,10 @@ def select(clas, quoi, mde=''):
s[5] += '@crans.org'
### Contruction de la chaîne de recherche
print s
filtre_adher = u'nom=%s&prenom=%s&tel=%s&chbre=%s&aid=%s&mail=%s&' % tuple(s[:6])
filtre_machine = u'host=%s&macAddress=%s&ipHostNumber=%s&mid=%s&' % tuple(s[6:10])
filtre_facture = u'fid=%s&' % s[10]
filtre_clubs = u'nom=%s&chbre=%s&cid=%s&uid=%s&' % tuple(s[11:])
filtre = u''
if filtre_adher.count('=*&') != 6:
......@@ -2381,6 +2399,9 @@ def select(clas, quoi, mde=''):
if filtre_facture.count('=*&') != 1:
if filtre: filtre += '&'
filtre += filtre_facture[:-1]
if filtre_clubs.count('=*&') != 4:
if filtre: filtre += '&'
filtre += filtre_clubs[:-1]
if filtre == '':
# Aucune condion => erreur
arg = u'--title "Recherche" '
......@@ -2429,9 +2450,9 @@ def select(clas, quoi, mde=''):
valid.append(m)
elif quoi[-1] == 'f':
valid = res['facture']
if not valid and res['adherent']:
if not valid and (res['adherent'] or res['club']):
# On va récupérer les machines des adhérents trouvés
for a in res['adherent']:
for a in res['adherent'] + res['club']:
for f in a.factures():
valid.append(f)
else:
......
......@@ -35,14 +35,14 @@ def handle_exit_code(d, code):
os.system('clear')
sys.exit(0)
else:
msg = "Vous avez appuyer sur ESC ou CTRL+C dans la dernière fenêtre de dialogue.\n\n" \
msg = "Vous avez appuyé sur ESC ou CTRL+C dans la dernière fenêtre de dialogue.\n\n" \
"Voulez vous quitter le programme ?"
if d.yesno(msg, width=60) == d.DIALOG_OK:
os.system('clear')
sys.exit(0)
return False
else:
return True
return True
class GestCrans(adherent.Dialog, club.Dialog, machine.Dialog):
@tailcaller
......@@ -119,6 +119,7 @@ class GestCrans(adherent.Dialog, club.Dialog, machine.Dialog):
raise EnvironmentError("Je ne connais que des adherents et des club comme proprio")
menu.update(menu_proprio)
menu_order = menu_proprio_order + menu_order
def box(default_item=None):
choices = []
for key in menu_order:
......@@ -139,7 +140,7 @@ class GestCrans(adherent.Dialog, club.Dialog, machine.Dialog):
scrollbar=True,
timeout=self.timeout,
cancel_label="Quitter",
backtitle=u"Vous êtes connecté en tant que %s" % self.conn.current_login,
backtitle=self._connected_as(),
choices=choices)
(code, tag) = self.handle_dialog(TailCall(handle_exit_code, self.dialog, self.dialog.DIALOG_ESC), box, tag)
......
......@@ -25,6 +25,7 @@ import ldap
import ldap.modlist
import ldap_passwd
import netaddr
import traceback
import annuaires_pg as annuaires
import config
......@@ -88,6 +89,7 @@ else:
ldap_password = secrets.get('ldap_password')
except:
sys.stdout.write(coul('Warning : impossible de lire le fichier de secret !\n', 'jaune'))
sys.stdout.write("\n".join(traceback.format_stack()[:-1]) + '\n')
sys.exit(1)
# uri pour les instances de CransLdap faisant de la lecture seule
......
......@@ -43,26 +43,21 @@ d'historique des déconnexions affichées (défaut %(limit_aff_blacklist)i)
-6 ou --ipv6 : affiche les ipv6 dans l'affichage synthétique
"""
try:
import sys,locale
loc = locale.getdefaultlocale()
if loc[1]:
sys.reallysetdefaultencoding(loc[1])
except:
pass
base = None
import commands
import getopt
import subprocess
import sys
from time import strftime, localtime, time
from affich_tools import *
from ldap_crans import is_actif, crans_ldap, AssociationCrans, hostname
from ldap_crans import MachineCrans, MachineWifi, BorneWifi
from ldap_crans import Adherent
from affich_tools import *
import gestion.config as config
import user_tests
import subprocess, commands
import ridtools
import user_tests
base = None
limit_aff_details = 1
limit_aff_machines = 15
......@@ -1102,7 +1097,7 @@ def borne_etat(borne) :
retour = os.system("fping6 -q -c 1 %s > /dev/null 2> /dev/null" % borne)
if (retour == 0):
return True
else:
else:
retour = os.system("fping -q -c 1 %s > /dev/null 2> /dev/null" % borne)
return retour == 0
except:
......@@ -1495,8 +1490,6 @@ if __name__ == '__main__' :
global debug
debug = 0
import sys, getopt
base = crans_ldap()
try :
......
......@@ -111,33 +111,33 @@ def limits(data, args):
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Recherche dans la base des adhérents", add_help=False)
parser.add_argument('-6', '--ipv6', help="Affiche les ipv6.", action="store_true")
parser.add_argument('-a', '--adherent', help="Limite l'affichage aux adhérents.", action="store_true")
parser.add_argument('--adm', help="Limite l'affichage aux machines adm.", action="store_true")
parser.add_argument('-A', '--adresse', help="Affiche l'adresse de l'adhérent.", action="store_true")
parser.add_argument('-b', '--borne', help="Limite l'affichage aux bornes.", action="store_true")
parser.add_argument('-c', '--club', help="Limite l'affichage aux clubs.", action="store_true")
parser.add_argument('-d', '--blacklist', type=int, help="Choix du nombre d'entrées blacklist à afficher pour les entrées détaillées.", action="store", default=10)
parser.add_argument('--crans', help="Limite l'affichage aux machines crans.", action="store_true")
parser.add_argument('-h', '--help', help="Affiche ce message et quitte.", action="store_true")
parser.add_argument('-i', '--ipsec', help="Affichage de la clef wifi de la machine.", action="store_true")
parser.add_argument('-l', '--limit', type=int, help="Modifier la taille limite de recherche dans la base LDAP", action="store", default=1000)
parser.add_argument('-L', '--historique', type=int, help="Choix du nombre d'entrées d'historique à afficher pour les entrées détaillées.", action="store", default=10)
parser.add_argument('-m', '--machine', help="Limite l'affichage aux machines.", action="store_true")
parser.add_argument('--serveur', help="Limite l'affichage aux serveurs.", action="store_true")
parser.add_argument('--special', help="Limite l'affichage aux machines spéciales.", action="store_true")
parser.add_argument('-s', '--sshfp', help="Affiche les fingerprint SSH si elles existent.", action="store_true")
parser.add_argument('--switch', help="Limite l'affichage aux switches (pas encore implémenté).", action="store_true")
parser.add_argument('-t', '--ldap', help="Utiliser les filtres tels que définis dans ldap", action="store_true")
parser.add_argument('-v', '--verbose', help="Rend le script (très) verbeux.", action="store_true")
parser.add_argument('filtre', type=str, nargs="?", help="Le filtre whos à utiliser")
type_group = parser.add_mutually_exclusive_group(required=False)
type_group.add_argument('-a', '--adherent', help="Limite l'affichage aux adhérents.", action="store_true")
type_group.add_argument('--adm', help="Limite l'affichage aux machines adm.", action="store_true")
type_group.add_argument('-b', '--borne', help="Limite l'affichage aux bornes.", action="store_true")
type_group.add_argument('-c', '--club', help="Limite l'affichage aux clubs.", action="store_true")
type_group.add_argument('--crans', help="Limite l'affichage aux machines crans.", action="store_true")
type_group.add_argument('-m', '--machine', help="Limite l'affichage aux machines.", action="store_true")
type_group.add_argument('--serveur', help="Limite l'affichage aux serveurs.", action="store_true")
type_group.add_argument('--special', help="Limite l'affichage aux machines spéciales.", action="store_true")
type_group.add_argument('--switch', help="Limite l'affichage aux switches (pas encore implémenté).", action="store_true")
args = parser.parse_args()
if args.help:
parser.print_help()
sys.exit(0)
else:
# Promis, quand j'aurai la foi, je ferai ça avec argparse.
if int(args.adherent) + int(args.adm) + int(args.borne) + int(args.club) + int(args.crans) + int(args.machine) + int(args.serveur) + int(args.special) + int(args.switch) >= 2:
raise EnvironmentError("Les arguments limitant l'affiachage de résultats à certains types d'objets sont mutuellement exclusifs.")
#logger = Logger()
explore_db(args)
......@@ -3,16 +3,25 @@
#!/bin/bash /usr/scripts/python.sh
#Ceci permet alors de lancer python avec un PYTHONPATH custom (/usr/scripts)
#pour éviter de l'importer dans chaque script
# CPATH: dossier de base de tous les scripts
export CPATH=/usr/scripts
# Quel binaire lancer ?
BIN=python
if [ "$1" = ipython ]; then
BIN=ipython
shift 1
fi
# Et quel script ?
SCRIPT=$1
if [ -z "$SCRIPT" ]; then
SCRIPT=$0
fi
# Si nous ne trouvons pas dans /usr/scripts (le vrai), alors on part à la
# recherche de la racine du dépôt cloné. (Màj $CPATH)
readlink -e $SCRIPT | grep "^/usr/scripts/" -q || {
f=`readlink -e $SCRIPT`
p=`dirname "$f"`
......@@ -25,10 +34,16 @@ readlink -e $SCRIPT | grep "^/usr/scripts/" -q || {
done;
echo "Dépôt custom. PYTHONPATH: $CPATH"
export CPATH
# Placer dans testing.sh les variables d'env supplémentaires pour
# debugguer des scripts
test -f $CPATH/testing.sh && . $CPATH/testing.sh
}
# Some additionnal paths, for 3rd party libs
for i in $CPATH/lib/python2.7/site-packages/*.egg; do
CPATH=$CPATH:$i
done
CPATH=$CPATH:/usr/scripts/lib/python2.7/site-packages/
# Fin:
/usr/bin/env PYTHONPATH=$CPATH $BIN "$@"
......@@ -24,3 +24,6 @@ export DBG_PRINTER=1
# Un dossier où trouver une version alternative des secrets (fichier par
# fichier)
export DBG_SECRETS=/etc/crans/dbg_secrets/`whoami`/
# Pour la wifimap
export DBG_WIFIMAP_DB=$CPATH/var/wifi_xml
......@@ -37,9 +37,10 @@ multicast={
},
}
for i in range(1, 5):
multicast['Radio']['BBC Radio %s' % i]=('bbc%s' % i, '239.231.140.19%s' % i, '1234', ['http://bbcmedia.ic.llnwd.net/stream/bbcmedia_intl_lc_radio%s_p' % i ])
for i in range(1, 4):
multicast['Radio']['BBC Radio %s' % i]=('bbc%s' % i, '239.231.140.19%s' % i, '1234', ['http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio%d_mf_p' % i ])
i+=1
multicast['Radio']['BBC Radio %s' % i]=('bbc%s' % i, '239.231.140.19%s' % i, '1234', ['http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio4fm_mf_p'])
# dico groupe => (tag => (nom, ...))
multicast_tag = {}
......
......@@ -31,7 +31,7 @@ while True:
ip=None
for line in msg[:-1]:
(tag, value) = line.split('=', 1)
print (tag, value)
#print (tag, value)
if tag=='s':
s=value
if tag=='c':
......
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