Proyecto

General

Perfil

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Project: wifi-ltsp
# Module: configura_hostapd.py
# Purpose: genera un archivo hostapc.accept para dar acceso a internet a los alumnos.
# Language: Python 2.5
# Date: 07-Feb-2011.
# Ver: 07-Feb-2011.
# Author: Isabel Aparicio Pérez
# Copyright: 2011 - Isabel Aparicio Pérez <prog5pe@edu.juntaextremadura.net>
#
# wifi-ltsp is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# Script2 is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with wifi-ltsp. If not, see <http://www.gnu.org/licenses/>.

""" Este programa genera el archivo hostapd.access necesario para que en el momento del logueo del
profesor se de acceso a internet a los alumnos que tienen clase en esa hora con ese profesor. Para ello
tenemos que recoger el dia de la semana y la hora actual que tiene el servidor de aula y con el dia actual
buscar en el servidor nfs el fichero del dia de la semana que corresponde con el dia concreto. El fichero
descargado del servidor nfs se almacena en el servidor de aula en la ruta /wifi con el nombre horario.txt.
Tambien controlamos el usuario que esta logueado en ese preciso momento en el servidor. A partir del usuario
logueado, de la hora del sistema y del fichero descargado del servidor nfs se genera el fichero hostapd.access
con las mac de los alumnos correspondientes.

Isabel Aparicio Pérez
Consejería de Educacion.
prog5pe@edu.juntaextremadura.net

"""

import time
import urllib
import os
import errno
import sys
import re

#Expresiones regulares

fecha=[]
ip=[]
dia_semana={"Mon":"lunes.txt","Tue":"martes.txt","Wed":"miercoles.txt","Thu":"jueves.txt","Fri":"viernes.txt"}


def dia_actual():
"""con esta funcion se obtiene la fecha actual que tiene el servidor de aula"""
fecha = time.asctime()
return fecha

def fichero_semana(fecha):
"""Con esta funcion se obtiene la parte de la fecha actual que corresponde con el dia de la semana"""
dia= fecha[0:3]
if dia not in ["Mon","Tue","Web","Thu","Fri"]:
print "El formato de la fecha del sistema no es el esperado"
# break
else:
fichero=dia_semana[dia]
return fichero

def hora_actual(fecha):
"""Con esta funcion se obtiene la hora actual del sistema sin los : de forma que la 08:45 se representaran
como la 0845"""
hora= fecha[11:13]+fecha[14:16]
h=int(hora)
if (h<int(0000) or h>int(2500)):
print "El formato de la hora del sistema no es el esperado"
# break
else:
return hora

def descargar_fichero(fichero):
"""funcion que se encarga de descargar el fichero del dia de la semana correspondiente al dia actual del
servidor nfs y colocarlo en la ubicacion correcta en el servidor de terminales con el nombre de horario.txt"""
file="http://servidor/wifi/"+fichero
print file
destino="/wifi/horario.txt"
destino2="/wifi"
if not os.path.exists(destino2):
print "La ruta destino no existe y hay que crearla"
try:
os.makedirs(destino2)
except OSError:
print "Hay algun error a la hora de crear el directorio /wifi en el servidor de aula"
urllib.urlretrieve(file, destino)
return destino




def devuelve_usuario():
"""con esta funcion recogemos el usuario que esta logueado en ese momento en el ordenador, seguira intentandolo
hasta que se loguee antes"""
resultado = sys.argv[1]
return resultado
def crea_hostapd(destino,resultado,hora):
"""con esta funcion generamos el fichero hostapd con las mac correspondientes a los alumnos a los que se
les va a dar acceso a internet y lo colocamos en la ruta correcta."""
if not os.path.exists(destino):
print "Hay un error el el fichero horario.txt en el servidor de aula"
else:
f=open(destino,"r")
if not os.path.exists("/etc/hostapd"):
try:
os.makedirs("/etc/hostapd")
except IOError:
print "Ha habido algun error a la hora de crear el directorio /etc/hostapd"
# break
if not os.access("/etc/hostapd", os.W_OK):
print "No tiene permisos de escritura sobre el directorio /etc/hostapd"
# break
else:
g=open("/etc/hostapd/hostapd.accept","w")
while True:
dato=f.readline()
if not dato:
break
else:
lin=dato.split("|")
if lin[0]==resultado:
if hora>lin[2] and hora<lin[3]:
g.write(lin[1])
g.write("\n")
f.close()
g.close()
return g

def reinicia_hostapd():
resultado = os.system("invoke-rc.d hostapd restart")


if __name__ == '__main__':
dia_hoy=""
hora=""
user=""
fich=""
hos=""
res=""
f=""
dia_hoy=dia_actual()
hora=hora_actual(dia_hoy)
fich=fichero_semana(dia_hoy)
f=descargar_fichero(fich)
user=devuelve_usuario()
hos=crea_hostapd(f,user,hora)
res=reinicia_hostapd()
if hos=="":
print "El script no ha funcionado correctamente"
else:
print "Todo ha ido bien"
(1-1/2)