# -*- python -*- # -*- coding: utf-8 -*- ############################################ ## Définition du comportement des scripts ## ############################################ from time import localtime from datetime import datetime # Fichier généré from config_srv import adm_only, role # Pour les emails import email.Header ##### Gestion des câblages # Selon la date, on met : # -ann_scol : Année scolaire en cours # -periode_transitoire : on accepte ceux qui ont payé l'année dernière # Ne modifier que les dates ! dat = localtime() if dat[1] < 8 or dat[1] == 8 and dat[2] < 16: # Si pas encore début août, on est dans l'année précédente ann_scol = dat[0]-1 periode_transitoire = False # sinon on change d'année elif dat[1] < 10 or (dat[1] == 10 and dat[2] < 4): # Si pas encore octobre, les gens ayant payé l'année précédente sont # acceptés ann_scol = dat[0] periode_transitoire = True else: # Seulement ceux qui ont payé cette année sont acceptés ann_scol = dat[0] periode_transitoire = False ## Bloquage si carte d'étudiants manquante pour l'année en cours # /!\ Par sécurité, ces valeurs sont considérées comme False si # periode_transitoire est True # Soft (au niveau du Squid) bl_carte_et_actif = True # Hard (l'adhérent est considéré comme paiement pas ok) bl_carte_et_definitif = True #Sursis pour les inscription après le 1/11 pour fournir la carte étudiant sursis_carte=8*24*3600 # Gel des cableurs pas a jour de cotisation # Les droits ne sont pas retires mais il n'y a plus de sudo bl_vieux_cableurs = False ##Création de comptes # Gid des comptes créés gid=100 club_gid=120 # Shell login_shell='/bin/zsh' club_login_shell='/usr/bin/rssh' # Longueur maximale d'un login maxlen_login=15 # Quels droits donnent l'appartenance à quel groupe Unix ? droits_groupes = {'adm' : [u'Nounou'], 'respbats' : [u'Imprimeur', u'Cableur', u'Nounou'], 'moderateurs' : [u'Moderateur'], 'disconnect' : [u'Bureau'], 'imprimeurs' : [u'Imprimeur', u'Nounou', u'Tresorier'], 'bureau' : [u'Bureau'], 'webadm' : [u'WebMaster'], 'webradio' : [u'WebRadio'], } ####### Les ML # Le + devant un nom de ML indique une synchronisation # ML <-> fonction partielle : il n'y a pas d'effacement automatique # des abonnés si le droit est retiré droits_mailing_listes = {'roots' : [ u'Nounou', u'Apprenti'], 'mailman' : [ u'Nounou'], '+nounou' : [ u'Nounou', u'Apprenti'], 'respbats' : [ u'Cableur', u'Nounou', u'Bureau'], '+moderateurs' : [ u'Moderateur', u'Bureau'], '+disconnect' : [ u'Nounou', u'Bureau'], '+impression' : [ u'Imprimeur'], 'bureau' : [u'Bureau'], 'tresorier' : [u'Tresorier'], '+ca' : [u'Bureau', u'Apprenti', u'Nounou', u'Cableur'], '+federez' : [u'Bureau', u'Apprenti', u'Nounou'], '+install-party' : [u'Bureau', u'Apprenti', u'Nounou'], # Correspondance partielle nécessaire... Des adresses non-crans sont inscrites à ces ML. '+dsi-crans' : [u'Nounou', u'Bureau'], '+crous-crans' : [u'Nounou', u'Bureau'], '+wrc' : [u'WebRadio'], } ## Répertoire de stockage des objets détruits cimetiere = '/home/cimetiere' ## Adresses mac utiles mac_komaz = '00:19:BB:31:3B:80' mac_wifi = '00:0f:1f:66:e0:e8' mac_titanic = 'aa:73:65:63:6f:76' mac_g = '00:0f:1f:66:e5:92' ## Serveur principal de bcfg2 bcfg2_main = "bcfg2.adm.crans.org" ## Compatibilité inverse cfengine_main = bcfg2_main ## Fichier de mapping lun/nom de volume iscsi ISCSI_MAP_FILE = "/usr/scripts/var/iscsi_names.py" ISCSI_MAP_FILE_TEMPLATE = "/usr/scripts/var/iscsi_names_%s.py" # format: { algorithm : (IANA_id, ssh_algo) } # où algorithm est tel qu'il apparait dans les fichiers /etc/ssh/ssh_host_%s_key.pub % algorithm # IANA_id correspond à l'entier attribué par l'IANA pour l'algorithm dans les champs dns SSHFP # ssh_algo correspond a la première chaine de charactère donnant le nom de l'algorithme de chiffrement lorsque la clef ssh est dans le format openssh (algo key comment) sshfp_algo = { "rsa" : (1,"ssh-rsa"), "dsa" : (2,"ssh-dss"), } sshkey_max_age=2*(365.25*24*3600) sshkey_size = { 'rsa':4096, 'dsa':1024, } ## Impression class impression: """Cette classe contient toutes les variables de prix concernant l'impression""" # l'imprimante utilisée imprimante = "canon" # Découvert autorisé (en euro) decouvert = 0. ###### Variables de prix (tout est exprimé en centimes) ###### # Cout imprimante : 2024 euros pour 30 mois - 19136 euros de partenariat # 5 000 pages par mois # Donc ammortissement : 1.3493 centimes par pages amm = 1.3493 # Cout d'une feuille A4 # 25.06 euros les 2500 feuilles c_a4 = 1.0024 + amm # Cout d'une feuille A3 # 53.76 euros les 2500 feuilles c_a3 = 2.1504 + amm # Cout d'un transparent # 15.85 euros les 100 transparents c_trans = 15.85 + amm c_face_couleur = 9.4484 c_face_nb = 0.9568 # Prix d'une agrafe # 200 euros les 15 000 c_agrafe = 1.3333 ################# FIN des variables de prix ###################### # L'adresse mail de l'imprimante From_imprimante = 'impression@crans.org' # Informations supplémentaires sur l'état de l'imprimante state_msg = [u'Attention ! La gestion des agrafes est actuellement défectueuses. Nous travaillons à la résolution de ce problème.'] ## Pour le controle d'upload et d'autres trucs qui n'ont en fait rien à foutre là… class upload: # liste des exemptations générales exempt = [ ['138.231.136.0/21', '138.231.0.0/16'], ['138.231.148.0/22', '138.231.0.0/16'] ] # limite soft soft = 300 # limite hard hard = 4096 # envoi des mails à disconnect@ disconnect_mail_soft = False disconnect_mail_hard = True # expéditeur des mails de déconnexion expediteur = "disconnect@crans.org" # textes des mails message_soft = u"""From: %(from)s To: %(to)s Subject: [CRANS] Attention !! Content-Type: text/plain; charset="utf-8" Bonjour %(proprio)s, Nous t'informons que ta (tes) machine(s) envoie(nt) une quantité importante de données vers l'extérieur (%(upload)s Mo en 24 heures). *Ce message t'est envoyé à titre informatif, il ne te sanctionne pas.* Il signifie que tu as envoyé plus de 300 Mo au cours des dernières 24 heures. Cela peut venir du fait que, *par exemple*, tu essaies d'envoyer des fichiers de grosse taille à l'extérieur de la zone crans, ou encore que tu as fait une utilisation importante de logiciels envoyant une très grande quantité de petites données (vidéo-conférence par exemple). Il peut y avoir d'autres raisons. Si cela continuait, et que tu dépassais la limite acceptable des 4096 Mo sur 24 heures, tu serais automatiquement déconnecté du réseau pour une durée de 24 heures. Il t'appartient donc de surveiller cela de plus près et de faire en sorte que tes machines n'uploadent pas de manière excessive à l'avenir. Pour plus d'informations, tu peux consulter la page: http://wiki.crans.org/VieCrans/DéconnexionPourUpload Si tu as des questions, contacte disconnect@crans.org N.B. : L'upload consiste en l'envoi de données vers des machines n'étant pas branchées sur le CRANS. --\u0020 Disconnect team""" message_hard = u"""From: %(from)s To: %(to)s Subject: [CRANS] =?iso-8859-1?Q?D=E9connexion?= temporaire Content-Type: text/plain; charset="utf-8" Bonjour %(proprio)s, Tu as temporairement été déconnecté du réseau en raison de l'envoi trop important de données vers l'extérieur (%(upload)s Mo en 24h). Tu as toujours accès au web ainsi qu'à tes mails crans mais tous les autres services te sont suspendus. Si cela devait se renouveler trop souvent, tu serais déconnecté complètement pour une durée plus importante. Il t'appartient donc de surveiller cela de plus près et de faire en sorte que ta machine n'uploade plus de manière excessive à l'avenir. Pour plus d'informations, tu peux consulter la page : http://wiki.crans.org/VieCrans/DéconnexionPourUpload Si tu as des questions, contacte disconnect@crans.org N.B. : L'upload consiste en l'envoi de données vers des machines n'étant pas branchées sur le CRANS. --\u0020 Disconnect team""" message_disconnect_soft = u"""From: %(from)s To: %(to)s Subject: %(proprio)s uploade Content-Type: text/plain; charset="utf-8" %(proprio)s uploade actuellement %(upload)s Mo. --\u0020 Message créé par deconnexion.py""" message_disconnect_hard = u"""From: %(from)s To: %(to)s Subject: %(proprio)s a =?iso-8859-1?Q?=E9t=E9=20d=E9connect=E9?= Content-Type: text/plain; charset="utf-8" %(proprio)s a été déconnecté pour upload (%(upload)s Mo). --\u0020 Message créé par deconnexion.py""" message_disconnect_multi = u"""From: %(from)s To: %(to)s Subject: %(proprio)s a =?iso-8859-1?Q?=E9t=E9=20d=E9connect=E9?= %(nbdeco)d fois pour upload en un mois ! Content-Type: text/plain; charset="utf-8" L'adhérent %(proprio)s a été déconnecté %(nbdeco)d fois pour upload en un mois ! Le PS a été généré et se trouve sur zamok : %(ps)s --\u0020 Message créé par deconnexion.py""" demenagement_delai = 8 # Nombre de jours après le passage en chambre ???? où on supprime les machines message_demenagement = u"""From: %%(from)s To: %%(to)s Subject: %s Content-Type: text/plain; charset="utf-8" Bonjour, Un adhérent au Cr@ns a déclaré résider dans la chambre %%(chambre)s, que tu occupais précédemment. Cela signifie que nous ne disposons plus d'informations de résidence valides à ton sujet. Si tu souhaites conserver ton accès au Cr@ns : - et que tu as déménagé hors du campus : il te suffit de nous préciser ta nouvelle adresse, ton déménagement sera pris en compte. - et que tu as déménagé vers une chambre du campus : tu dois passer à une permanence pour signer une autorisation de câblage pour ta nouvelle chambre. Si tu ne souhaites pas conserver ton accès au Cr@ns, un simple message de ta part et nous supprimerons les machines que tu possèdes de notre base de données. Cette suppression aura automatiquement lieu dans %%(jours)s jours en l'absence de réponse. S'il s'agit d'une erreur de notre part, préviens-nous au plus vite afin que nous puissions corriger le problème. --\u0020 Les membres actifs du Crans""" % email.Header.make_header([("Déménagement non déclaré", "utf8")]) # Classe pour les paramètres du firewall # ########################################## class conf_fw: mark = { 'https-radin': '0x3', 'https-gratuit' : '0x3', 'proxy' : '0x2', 'secours' : '0x4', 'bittorrent' : '0x1' } # Valeur du masque utilisé pour créer un arbre dans les filtres mask = [24] # Empiriquement, 95 correspond à un débit de 100Mbit/s # sur des outils tels que munin now=datetime.now() if now.hour >= 6 and now.hour < 19 and now.weekday() < 5: debit_max = 95 * 1024 / 8 # kbytes per second en connexion de jour debit_jour=True else: debit_max = 500 * 1024 / 8 # connexion de nuit et du week-end debit_jour=False #~ debit_max = 95 * 1024 / 8 # connexion de nuit http://www.speedtest.net/result/2318350458.png # Classe pour la détection des virus # ###################################### class virus: # Nombre de Flood Par heure flood = 100 virus = 10 # Classe pour la détection du p2p # ################################### #Le traffic udp vers les ip (v4 et v6) des hotes dans la liste suivante est bloqué udp_torrent_tracker=[ 'tracker.openbittorrent.com', 'tracker.ccc.de', 'tracker.istole.it', 'tracker.publicbt.com', 'tracker.1337x.org', 'fr33domtracker.h33t.com', 'tracker.torrentbox.com', '11.rarbg.com', 'exodus.desync.com', 'fr33dom.h33t.com', 'torrentbay.to', 'tracker.ex.ua', 'tracker.ilibr.org', 'tracker.prq.to', 'tracker.publichd.eu', 'tracker.yify-torrents.com', ] class p2p : # Limite de débit pour l'ensemble du p2p classifié, en octets/s # identique en upload et download debit_max = 1000000 # = 1 Mb/s = 125 ko/s debit_adh = 12000 # = 12 Kb/s = 1500 o/s (>= MTU [1500 bytes]) # Limite de paquets acceptés par protocole P2P en deux heures limite = {'Bittorrent': 100, 'AppleJuice': 50, 'SoulSeek': 500, 'WinMX': 50, 'eDonkey': 50, 'DirectConnect': 50, 'KaZaa': 50, 'Ares': 50, 'GNUtella': 50 } # Envoi des mails à disconnect@ disconnect_mail = True # Expéditeur des mails de déconnexion expediteur = "disconnect@crans.org" avertissement = u"""From: %(From)s To: %(To)s Subject: =?iso-8859-1?Q?D=E9tection?= de p2p sur la machine %(hostname)s Content-Type: text/plain; charset="utf-8" La machine %(hostname)s a été déconnectée pendant 24h pour utilisation du protocole %(protocole)s. Nombre de paquets : %(nb_paquets)s paquets depuis le %(datedebut)s. --\u0020 Message créé par deconnexion.py""" deconnexion = u"""From: %(From)s To: %(To)s Subject: Avis de =?iso-8859-15?Q?D=E9connexion?= Content-Type: text/plain; charset="utf-8" Bonjour, Nous avons détecté que ta machine, %(hostname)s utilisait le *protocole* %(protocole)s. Cela signifie : - Ou bien que tu utilises le logiciel qui a le même nom que ce protocole, - Ou bien que tu utilises un logiciel qui utilise le protocole en question pour partager des fichiers. Or l'usage de *protocoles* de type peer to peer est interdit sur notre réseau, conformément aux documents que tu as acceptés en adhérant au CR@NS. Lorsqu'un seul des adhérents du CR@NS utilise des protocoles interdits, il pénalise l'ensemble des adhérents de l'association. Tu seras donc déconnecté 24h. --\u0020 Disconnect Team""" avertissement_bt = u"""From: %(From)s To: %(To)s Subject: Avertissement d'utilisation du protocole Bittorrent Content-Type: text/plain; charset="utf-8" Bonjour, Nous avons détecté que ta machine, %(hostname)s utilisait le *protocole* %(protocole)s. *Ce message t'est envoyé à titre informatif, il ne te sanctionne pas.* Cela signifie : - Ou bien que tu utilises le logiciel qui a le même nom que ce protocole, - Ou bien que tu utilises un logiciel qui utilise le protocole en question pour partager des fichiers. Or l'usage de *protocoles* de type peer to peer est interdit sur notre réseau, conformément aux documents que tu as acceptés en adhérant au CR@NS. Nous empêchons donc ce trafic Bittorrent de sortir du réseau Cr@ns, rendant inopérant les logiciels l'utilisant. Si tu es à l'origine de ce trafic, merci de couper les logiciels en question. Sinon, il est possible qu'un logiciel malveillant en soit la cause, nous te conseillons d'installer un anti-virus et un pare-feu afin d'arrêter la source de ce trafic. --\u0020 Disconnect Team""" message_disconnect_multi = u"""From: %(from)s To: %(to)s Subject: %(proprio)s a =?iso-8859-15?Q?=E9t=E9=20d=E9connect=E9?= %(nbdeco)d fois pour p2p en un an ! Content-Type: text/plain; charset="utf-8" L'adhérent %(proprio)s a été déconnecté %(nbdeco)d fois pour p2p en un an ! Le PS a été généré et se trouve sur zamok : %(ps)s --\u0020 Message créé par deconnexion.py""" ############################# ## Paramètres des machines ## ############################# ## >>>>>>>>>>>>>>> La modification des paramètres suivants doit se ## >> ATTENTION >> faire avec précaution, il faut mettre la base à ## >>>>>>>>>>>>>>> jour en parralèle de ces modifs. # Sous réseaux alloués à chaque type de machine ou bâtiment # Pour la zone wifi, il faut penser à modifier le /etc/network/interfaces # de sable, zamok et komaz pour ajouter les zones en plus (et de # faire en sorte qu'ils prennent effet immédiatement ; c'est important pour # komaz car c'est la route par défaut mais aussi pour zamok et sable # à cause de leur firewall et de leur patte wifi. _filaire_adh = [ '138.231.137.0/24', '138.231.138.0/24', '138.231.139.0/24','138.231.140.0/22' ] NETs = { 'serveurs' : [ '138.231.136.0/24' ], 'adherents' : _filaire_adh, 'bornes' : [ '138.231.148.0/24' ], 'adm' : [ '10.231.136.0/24' ], 'wifi-adh' : [ '138.231.144.0/24', '138.231.145.0/24', '138.231.146.0/24', '138.231.147.0/24', '138.231.149.0/24', '138.231.150.0/24', '138.231.151.0/24' ], 'fil' : _filaire_adh, 'gratuit': [ '10.42.0.0/16' ], 'wifi': [ '138.231.144.0/21' ], 'accueil': ['10.51.0.0/16' ], 'isolement': ['10.52.0.0/16' ], 'personnel-ens': ['10.2.9.0/24' ], 'ens' : ['138.231.135.0/24'], 'all' : [ '138.231.136.0/21', '138.231.144.0/21' ], 'multicast' : ['239.0.0.0/8'], } NETs_regexp = { 'all' : '^138\.231\.1(3[6789]|4[0123456789]|5[01])\.\d+$' } # Classes de rid # Merci d'essayer de les faire correspondre avec les réseaux # ci-dessus... rid = { # Rid pour les machines fixes 'fil' : (256, 2047), # Rid pour les machines wifi 'wifi' : (2048, 4095), # Rid pour les machines du vlan adm 'adm' : (51200, 53247), # Rid pour les machines des personnels ens 'personnel-ens' : (55296, 55551), # Mid pour les machines du vlan gratuit 'gratuit' : (53248, 55295), # Rid pour machines spéciales 'special' : (4096, 6143), # Rid pour les filaires v6-only 'fil-v6' : (16384, 24575), # Rid pour les wifi v6-only 'wifi-v6' : (24576, 32767), # Rid pour les serveurs 'serveurs' : (0, 255), } # rid pour les machines spéciales (classe 'special' ci-dessus) rid_machines_speciales = { # freebox.crans.org 4096: '82.225.39.54', # ovh.crans.org 4097: '91.121.84.138', } # Les préfixes ipv6 prefix = { 'subnet' : [ '2a01:240:fe3d::/48' ], 'serveurs' : [ '2a01:240:fe3d:4::/64'], 'fil' : [ '2a01:240:fe3d:4::/64' ], 'adm' : [ '2a01:240:fe3d:c804::/64' ], 'wifi' : [ '2a01:240:fe3d:f7::/64' ], 'fil-v6' : [ '2a01:240:fe3d:4::/64' ], 'wifi-v6' : [ '2a01:240:fe3d:f7::/64' ], 'personnel-ens' : [ '2a01:240:fe3d:4::/64' ], 'sixxs2' : [ '2a01:240:fe00:68::/64' ], } # Domaines dans lesquels les machines sont placées suivant leur type domains = { 'machineFixe': 'crans.org', 'machineCrans': 'crans.org', 'machineWifi': 'wifi.crans.org', 'borneWifi': 'wifi.crans.org' } # VLans vlans = { # VLan d'administration 'adm' : 2, # VLan pour le wifi 'wifi' : 3, # VLan pour le wifi de l'ens 'hotspot' : 4, # VLan des gens qui paient 'adherent' : 1, # VLan des inconnus 'accueil' : 7, # VLan de la connexion gratuite 'gratuit' : 6, 'radin' : 6, # Vlan isolement 'isolement' : 9, # Vlan de tests de chiffrement DSI 'chiffrement': 11, # VLan des appartements de l'ENS 'appts': 21, # Vlan evenementiel (install-party, etc) 'event': 10, # Vlan zone routeur ens (zrt) 'zrt': 1132 } filter_policy = { 'komaz' : { 'policy_input' : 'ACCEPT', 'policy_forward' : 'DROP', 'policy_output' : 'ACCEPT' }, 'zamok' : { 'policy_input' : 'ACCEPT', 'policy_forward' : 'DROP', 'policy_output' : 'ACCEPT' }, 'default' : { 'policy_input' : 'ACCEPT', 'policy_forward' : 'ACCEPT', 'policy_output' : 'ACCEPT' } } # Cf RFC 4890 authorized_icmpv6 = ['echo-request', 'echo-reply', 'destination-unreachable', 'packet-too-big', 'ttl-zero-during-transit', 'parameter-problem'] output_file = { 4 : '/tmp/ipt_rules', 6 : '/tmp/ip6t_rules' } file_pickle = { 4 : '/tmp/ipt_pickle', 6 : '/tmp/ip6t_pickle' } blacklist_sanctions = ['upload', 'warez', 'p2p', 'autodisc_p2p','autodisc_virus','virus','autodisc_upload', 'bloq'] blacklist_sanctions_soft = ['autodisc_virus','ipv6_ra','mail_invalide','virus', 'upload', 'warez', 'p2p', 'autodisc_p2p', 'autodisc_upload', 'bloq','carte_etudiant','chambre_invalide'] adm_users = [ 'root', 'identd', 'daemon', 'postfix', 'freerad', 'amavis', 'nut', 'respbats', 'list', 'sqlgrey', 'ntpd', 'lp' ] open_ports = { 'tcp' : '22' } # Debit max sur le vlan de la connexion gratuite debit_max_radin = 1000000 debit_max_gratuit = 1000000 ############################### ## Vlan accueil et isolement ## ############################### accueil_route = { '138.231.136.1':{'tcp':['80','443']}, '138.231.136.67':{'tcp':['80','443']}, '138.231.136.98':{'tcp':['20','21','80','111','1024:65535'],'udp':['69','1024:65535']}, '138.231.136.130':{'tcp':['80','443']} } ## gestion du dns class dns: parent='138.231.176.4' # ariane pour la zone parente master='10.231.136.9' slaves=[ '10.231.136.8', # ovh '10.231.136.14', # titanic aka freebox ] master_tv='10.231.136.243' slaves_tv=slaves + [master] secours_relay='10.231.136.14'; # résolution directe zones_direct = [ 'crans.org', 'crans.ens-cachan.fr', 'wifi.crans.org', 'ferme.crans.org' , 'clubs.ens-cachan.fr', 'adm.crans.org','crans.eu','wifi.crans.eu' ] # Zones signée par opendnssec sur le serveur master zones_dnssec = ['crans.eu','wifi.crans.eu','v6.crans.eu','wifi.v6.crans.eu'] # Zones alias pour les enregistrements A AAAA CNAME TXT et SSHFP zone_alias = { 'crans.org' : ['crans.eu'], 'wifi.crans.org' : ['wifi.crans.eu'], } # Résolution inverse zones_reverse = NETs["all"] + NETs["adm"] + NETs["personnel-ens"] zones_reverse_v6 = prefix['fil'] + prefix['wifi'] + prefix ['adm'] + prefix['personnel-ens'] # à modifier aussi dans bind.py recursiv = ['138.231.136.98', '138.231.136.247'] # charybde et gordon ####################### ## Mail de bienvenue ## ####################### #From est respbats@crans.org txt_mail_bienvenue = u"""From: Crans <%(From)s> To: %(To)s Subject: [CRANS] Bienvenue au Cr@ns ! Content-Type: text/plain; charset="utf-8" Bienvenue ! Si tu lis ce mail, c'est que ton inscription à l'association s'est déroulée correctement. Le CR@NS est une association gérée, autant d'un point de vue administratif que technique, par des étudiants bénévoles pour les étudiants résidant sur le campus. Ses membres actifs s'occupent de la maintenance du réseau, et des adhésions (câblages), ainsi que de plusieurs services mis à la disposition de tous ses adhérents : * La connexion à Internet en filaire et en wifi * Un wiki, regroupant plein d'informations diverses concernant la vie ici. * Les news, fora de discussion abordant divers thèmes * Un canal IRC * Un client de messagerie instantanée Jabber * Un service de messagerie : une adresse mail @crans.org disponible à vie, fiable, et avec possibilité d'installer des filtres très précis** * Un espace personnel *de 2Go sur le serveur des adhérents * * Un service d'impression, 24h/24 7j/7, A3 ou A4, couleur ou noir et blanc, avec ou sans agrafe, à prix coûtant * La télévision par le réseau Afin *d'assurer le bon fonctionnement de ces services*, il est nécessaire que chaque membre respecte la charte signée lors de son inscription. La notice d'utilisation des services du CR@NS est disponible ici : https://wiki.crans.org/CransPratique. Nous conseillons vivement de s'y reporter aussi bien pour apprendre à utiliser les différents services que pour résoudre les problèmes éventuellement rencontrés. * Chaque membre intéressé par le fonctionnement de l'association peut par exemple contacter l'équipe technique à nounous@crans.org ou l'équipe administrative à ca@crans.org et/ou se rendre aux réunions publiques du CR@NS. . Aucune connaissance technique préalable n'est requise pour participer ! * *A noter* : l'accès aux news et au wiki est limité à un usage interne au campus. Pour accéder depuis l'extérieur * au wiki, il faut se créer un compte * aux news, il faut s'identifier (Utilisateur : Vivelapa / Mot de passe : ranoia!) --\u0020 Les membres actifs. PS: Il t'est conseillé de conserver ce mail à toutes fins utiles """ txt_ajout_droits = u"""From: Crans <%(From)s> To: %(To)s Subject: [CRANS] Ajout des droits %(Droit)s Content-Type: text/plain; charset="utf-8" Bonjour, Tu viens d'être doté des droits %(Droit)s au Cr@ns. Une description de ces droits et de la manière de les utiliser est disponible sur la page : %(Page)s Si tu as des questions, n'hésite pas à les poser à d'autres câbleurs ou aux nounous. --\u0020 Les nounous""" pages_infos_droits = { "Cableur" : "https://wiki.crans.org/%C3%8AtreC%C3%A2bleur", "Imprimeur" : "https://wiki.crans.org/%C3%8AtreC%C3%A2bleur/%C3%8AtreImprimeur", "Bureau" : "https://wiki.crans.org/%C3%8AtreC%C3%A2bleur/%C3%8AtreLeBureau", "Moderateur" : "https://wiki.crans.org/CransTechnique/ModerationDesNews" } txt_charte_MA = u"""From: Crans <%(From)s> To: %(To)s Subject: [CRANS] Charte des membres actifs Content-Type: text/plain; charset="utf-8" Bonjour, Il semble que tu es membre actif du CRANS et que tu n'as pas signé la charte des membres actifs. Si tu n'es pas membre actif ou si tu as signé la charte des membres actifs, merci de nous le signaler. Sinon, il faudrait signer la charte et nous la rendre rapidement. Tu peux l'imprimer à partir du fichier suivant : https://wiki.crans.org/CransAdministratif?action=AttachFile&do=get&target=charte_ma.pdf Merci par avance, --\u0020 Le bureau du CRANS""" txt_menage_cableurs = u"""From: Crans <%(From)s> To: %(To)s Subject: [CRANS] Suppression de droits Content-Type: text/plain; charset="utf-8" Bonjour, Les droits que tu avais sur ton compte CRANS ont été retirés car tu ne cotises pas cette année et que tes droits ne semblent pas être utiles pour une utilisation à distance. Si nous avons commis une erreur, nous te prions de nous en excuser. Si tu souhaites par la suite retrouver des droits, nous serons bien sûr heureux de te les remettre. Cordialement, --\u0020 Le bureau du CRANS"""