desarrollosconsejeria/aulalinex-ltsp-alumno/4.2-2/serveralumnolinex-ltsp/clservidor.pas @ master
23a384b9 | Elisa | unit clservidor;
|
|
{$mode objfpc}{$H+}
|
|||
interface
|
|||
uses
|
|||
unix,Classes, SysUtils, StrUtils, IniFiles,process, clcomandosroot;
|
|||
type
|
|||
{ Tservidor }
|
|||
Tservidor = class
|
|||
private
|
|||
fIP:String;
|
|||
fUsuarioCanon:Boolean;
|
|||
fSoyUnProfesor:Boolean;
|
|||
fPuerto:integer;
|
|||
fPuertoVNC:integer;
|
|||
fNombreEquipo:String;
|
|||
fMacProfe:String;
|
|||
fIPProfe:String;
|
|||
fNombreEquipoProfe:string;
|
|||
fUsuarioAlumno:String;
|
|||
fHomeUsuario:string;
|
|||
fUsuarioProfe:string;
|
|||
fDirRecibidos:string;
|
|||
fDirEnviar:string;
|
|||
fIPVLC:string;
|
|||
fNombreClase:string;
|
|||
fRatonTecladoDesactivados:Boolean;
|
|||
fInternetDesactivado:Boolean;
|
|||
fImpresoraDesactivada:integer;
|
|||
fAutentificacionMac:integer;
|
|||
fAutentificacionIP:integer;
|
|||
fEstoyEnMaqProfe:boolean;
|
|||
procedure Ejecutar(comando: string);
|
|||
procedure LeerSetupIni(archivo:string);
|
|||
function maquinaprofesor(): boolean;
|
|||
function ObtenerMiIp():string;
|
|||
Function NumOrdLet(num:integer):string;
|
|||
procedure OrdenarDesactivarInternet();
|
|||
public
|
|||
constructor create (archivoini:string='/var/lib/aulalinex-profesor-ltsp/setup.ini');
|
|||
property EstoyMaqProfe:Boolean read fEstoyEnMaqProfe;
|
|||
property IP:String read fIP;
|
|||
property Puerto:integer read fPuerto;
|
|||
property PuertoVNC:integer read fPuertoVNC;
|
|||
property NombreEquipo:String read fNombreEquipo;
|
|||
property MacProfe:String read fMacProfe write fMacProfe;
|
|||
property IPProfe:String read fIPProfe write fIPProfe;
|
|||
property NombreEquipoProfe:String read fNombreEquipoProfe write fNombreEquipoProfe;
|
|||
property UsuarioProfe:String read fUsuarioProfe write fUsuarioProfe;
|
|||
property UsuarioCanon:Boolean read fUsuarioCanon;
|
|||
property UsuarioAlumno:String read fUsuarioAlumno write fUsuarioAlumno;
|
|||
property DirRecibidos:String read fDirRecibidos write fDirRecibidos;
|
|||
property DirEnviar:String read fDirEnviar write fDirEnviar;
|
|||
property HomeUsuario:String read fHomeUsuario write fHomeUsuario;
|
|||
property IPVLC:String read fIPVLC write fIPVLC;
|
|||
property NombreClase:String read fNombreClase write fNombreClase;
|
|||
property InternetDesactivado:Boolean read fInternetDesactivado write fInternetDesactivado;
|
|||
property RatonTecladoDesactivados:Boolean read fRatonTecladoDesactivados write fRatonTecladoDesactivados;
|
|||
property ImpresoraDesactivada:integer read fImpresoraDesactivada write fImpresoraDesactivada;
|
|||
property AutentificacionMac:integer read fAutentificacionMac write fAutentificacionMac;
|
|||
property AutentificacionIP:integer read fAutentificacionIP write fAutentificacionIP;
|
|||
function ObtenerNombreUsuario():string;
|
|||
function ObtenerHomeUsuario(usuario:string):string;
|
|||
function ObtenerPuerto:integer;
|
|||
function HallarDato(Cmd: string): string;
|
|||
Function SoyUsuarioCanon():Boolean;
|
|||
procedure InactivarTecladoRaton();
|
|||
procedure ActivarTecladoRaton();
|
|||
procedure cierraPuerto();
|
|||
end;
|
|||
implementation
|
|||
uses globales;
|
|||
procedure Tservidor.cierraPuerto();
|
|||
var
|
|||
orden_cierra_puerto:string;
|
|||
begin
|
|||
orden_cierra_puerto:='reiniciaServerAlumno '+IntToStr(fmipuerto);
|
|||
with ThrComandosRoot.Create('localhost',310,orden_cierra_puerto) do resume;
|
|||
//writeln( orden_cierra_puerto);
|
|||
end;
|
|||
Function Tservidor.SoyUsuarioCanon():Boolean;
|
|||
//const
|
|||
//ORD_NOMBRE_EQUIPO:string='hostname | cut -f1 -d"-"';
|
|||
var
|
|||
nombreaula,nombrealumno:string;
|
|||
i:integer;
|
|||
desactivar:boolean;
|
|||
begin
|
|||
nombreaula:=HallarDato('hostname | cut -f1 -d"-"');
|
|||
desactivar:=false;
|
|||
for i:=0 to 25 do
|
|||
begin
|
|||
nombrealumno:=nombreaula+'-o'+NumOrdLet(i);
|
|||
if nombrealumno = fUsuarioAlumno then
|
|||
begin
|
|||
desactivar:=true;
|
|||
break;
|
|||
end;
|
|||
end;
|
|||
result:=desactivar;
|
|||
end;
|
|||
Function Tservidor.NumOrdLet(num:integer):string;
|
|||
var
|
|||
letraord:string;
|
|||
begin
|
|||
num:=succ(num);
|
|||
letraord:=ifthen(num<10,'0'+inttostr(num),inttostr(num));
|
|||
result:=letraord;
|
|||
end;
|
|||
function Tservidor.maquinaprofesor():boolean;
|
|||
const
|
|||
ORD_MAQ_PROFE:string='echo $LTSP_CLIENT';
|
|||
var
|
|||
EstoyProfe:String;
|
|||
begin
|
|||
EstoyProfe:=Trim(HallarDato(ORD_MAQ_PROFE));
|
|||
result:=(EstoyProfe='');
|
|||
end;
|
|||
procedure Tservidor.Ejecutar (comando:string);
|
|||
begin;
|
|||
unix.fpSystem(comando);
|
|||
end;
|
|||
function Tservidor.HallarDato(Cmd:string):String;
|
|||
var
|
|||
file1: TextFile;
|
|||
s,t: ansistring;
|
|||
n: longint;
|
|||
j:integer;
|
|||
begin
|
|||
j:=0;
|
|||
n:=popen(file1, Cmd, 'r');
|
|||
if n=-1 then
|
|||
begin
|
|||
result:='';
|
|||
writeln('Error al hallar dato');
|
|||
Exit;
|
|||
end;
|
|||
t:='';
|
|||
while not eof(file1) do begin
|
|||
Readln(File1,s);
|
|||
t:=t+s+Chr(10);
|
|||
inc(j);
|
|||
end;
|
|||
pclose(file1);
|
|||
result := trim(t);
|
|||
end;
|
|||
constructor Tservidor.create(archivoini:string='/var/lib/aulalinex-profesor-ltsp/setup.ini');
|
|||
const
|
|||
SOY_PROFESOR:string='id -Gn | grep teachers | grep -v grep';
|
|||
begin
|
|||
inherited create;
|
|||
fSoyUnProfesor:=TRIM(HallarDato(SOY_PROFESOR))<>'';
|
|||
fUsuarioCanon:=false;
|
|||
fInternetDesactivado:=false;
|
|||
fRatonTecladoDesactivados:=false;
|
|||
fAutentificacionIP:=0;
|
|||
fAutentificacionMAC:=0;
|
|||
fEstoyEnMaqProfe:=maquinaprofesor();
|
|||
fIP:=ObtenerMiIP();
|
|||
fUsuarioAlumno:=ObtenerNombreUsuario();
|
|||
fHomeUsuario:=ObtenerHomeUsuario(fUsuarioAlumno);
|
|||
fPuerto:=ObtenerPuerto();
|
|||
if FileExists(archivoini) then
|
|||
LeerSetupIni(archivoini);
|
|||
if fRatonTecladoDesactivados and not fSoyUnProfesor then
|
|||
InactivarTecladoRaton();
|
|||
fUsuarioCanon:=SoyUsuarioCanon();
|
|||
if fInternetDesactivado and not fSoyUnProfesor then
|
|||
OrdenarDesactivarInternet()
|
|||
end;
|
|||
procedure Tservidor.OrdenarDesactivarInternet();
|
|||
var
|
|||
orden_interner_equipo_no:string;
|
|||
begin
|
|||
if trim(fUsuarioAlumno)='' then exit;
|
|||
orden_interner_equipo_no:='desactivarInternet '+fUsuarioAlumno;
|
|||
with ThrComandosRoot.Create('localhost',303,orden_interner_equipo_no) do resume;
|
|||
orden_interner_equipo_no:='desactivarAccesoInternet '+fUsuarioAlumno;
|
|||
with ThrComandosRoot.Create(fIP,316,orden_interner_equipo_no) do resume;
|
|||
end;
|
|||
function Tservidor.ObtenerHomeUsuario(usuario:string):string;
|
|||
const
|
|||
ORD_HOME:string='echo ~%s';
|
|||
var
|
|||
homeusu:string;
|
|||
orden:string;
|
|||
begin
|
|||
orden:=Format(ORD_HOME,[usuario]);
|
|||
homeusu:=HallarDato(orden);
|
|||
//writeln('Home de usuario ' +homeusu);
|
|||
fDirRecibidos:=homeusu+'/recibidos_profesor';
|
|||
fDirEnviar:=homeusu+'/enviar_profesor';
|
|||
result:=trim(homeusu);
|
|||
end;
|
|||
function Tservidor.ObtenerNombreUsuario():string;
|
|||
var
|
|||
nombreusu:string;
|
|||
begin
|
|||
nombreusu:=GetEnvironmentVariable('USER');
|
|||
if nombreusu='' then nombreusu:=' ';
|
|||
fUsuarioAlumno:=nombreusu;
|
|||
result:=nombreusu;
|
|||
end;
|
|||
procedure Tservidor.LeerSetupIni(archivo:string);
|
|||
var
|
|||
FicheroIni:TMemIniFile;
|
|||
begin
|
|||
try
|
|||
FicheroIni:=TMemIniFile.create(archivo);
|
|||
try
|
|||
with FicheroIni do
|
|||
begin
|
|||
fInternetDesactivado:=ReadBool('Internet','Internet desactivado',false);
|
|||
fRatonTecladoDesactivados:=ReadBool('RatonTeclado','RatonTeclado inactivos',false);
|
|||
fAutentificacionIP:=ReadInteger('Profesor','Autentificacion IP',0);
|
|||
fAutentificacionMAC:=ReadInteger('Profesor','Autentificacion MAC',0);
|
|||
fMacProfe:=ReadString('Profesor','MAC Profesor','');
|
|||
fIPProfe:=ReadString('Profesor','IP Profesor','');
|
|||
fNombreClase :=ReadString('Clase','Nombre','');
|
|||
fIPVLC:=ReadString('Clase','IPVLC','');
|
|||
end;
|
|||
finally
|
|||
FicheroIni.free;
|
|||
end;
|
|||
except
|
|||
writeLn('Error al cargar datos');
|
|||
end;
|
|||
end;
|
|||
function Tservidor.ObtenerMiIp():string;
|
|||
//const
|
|||
//ORD_IP:string='echo $LTSP_CLIENT';
|
|||
var
|
|||
//tarjeta_red:string;
|
|||
//orden_ip:string;
|
|||
mip:string;
|
|||
begin
|
|||
mip:=trim(HallarDato('echo $LTSP_CLIENT'));
|
|||
result:=mip;
|
|||
end;
|
|||
function Tservidor.ObtenerPuerto():integer;
|
|||
const
|
|||
ORD_NOM_EQUIPO:string='echo $LTSP_CLIENT | cut -f4 -d"."';
|
|||
var
|
|||
miequipo1:string;
|
|||
// longip:integer;
|
|||
mipuerto,finalport:integer;
|
|||
begin
|
|||
miequipo1:=HallarDato(ORD_NOM_EQUIPO);
|
|||
//longip:=Length(miequipo1);
|
|||
if Length(miequipo1)> 0 then
|
|||
finalport:=strtoint(miequipo1)
|
|||
else
|
|||
finalport:=99;
|
|||
fPuertoVNC:=5900+finalport;
|
|||
mipuerto:=37000+finalport;
|
|||
result:=mipuerto;
|
|||
//writeln('mipuerto es ',mipuerto);
|
|||
end;
|
|||
procedure Tservidor.ActivarTecladoRaton();
|
|||
const
|
|||
ORD_ACT_RA:string='xmodmap -e "pointer = default"';
|
|||
ORD_ACT_TE:string='xmodmap %s';
|
|||
ORD_CUR:string='cp -f /tmp/.sermodaula %s';
|
|||
var
|
|||
//ordendebug,
|
|||
archivoCurrent,mihome,orden:string;
|
|||
begin
|
|||
try
|
|||
mihome:=GetEnvironmentVariable('HOME');
|
|||
fRatonTecladoDesactivados:=false;
|
|||
archivoCurrent:=mihome+'/.current_modmap';
|
|||
if fUsuarioCanon then
|
|||
begin
|
|||
orden:=Format(ORD_CUR,[archivoCurrent]);
|
|||
Ejecutar(orden);
|
|||
end;
|
|||
ejecutar(ORD_ACT_RA);
|
|||
orden:=Format(ORD_ACT_TE,[archivoCurrent]);
|
|||
ejecutar(orden);
|
|||
if FileExists(archivoCurrent) then
|
|||
deletefile(archivoCurrent);
|
|||
except
|
|||
writeln('Problemas al activar teclado');
|
|||
end;
|
|||
end;
|
|||
procedure Tservidor.InactivarTecladoRaton();
|
|||
const
|
|||
ORD_INA_TE:string='xmodmap %s';
|
|||
ORD_INA_RA:string='xmodmap -e "pointer = 9 8 7 6 5 4 3 2 1 "';
|
|||
var
|
|||
i:integer;
|
|||
//ordendebug:string;
|
|||
ordcurmod,orden:string;
|
|||
mimapa:TstringList;
|
|||
mihome,ArchivoNull,archivoCurrent:string;
|
|||
begin
|
|||
//orden='';
|
|||
if trim(fUsuarioAlumno)='' then exit;
|
|||
try
|
|||
mihome:=GetEnvironmentVariable('HOME');
|
|||
ArchivoNull:=mihome+'/.null_modmap';
|
|||
//ejecutar(orden);
|
|||
archivoCurrent:=mihome+'/.current_modmap';
|
|||
// ejecutar(orden);
|
|||
mimapa:=TstringList.create;
|
|||
try
|
|||
for i:= 8 to 255 do mimapa.add('keycode ' + inttostr(i) + ' = NoSymbol');
|
|||
mimapa.add('clear Shift');
|
|||
mimapa.add('clear Lock');
|
|||
mimapa.add('clear Control');
|
|||
mimapa.add('clear Mod1');
|
|||
mimapa.add('clear Mod2');
|
|||
mimapa.add('clear Mod3');
|
|||
mimapa.add('clear Mod4');
|
|||
mimapa.add('clear Mod5');
|
|||
mimapa.savetofile(ArchivoNull);
|
|||
sleep(100);
|
|||
ordcurmod:='xmodmap -pke > '+archivoCurrent;
|
|||
Ejecutar(ordcurmod);
|
|||
mimapa.clear;
|
|||
sleep(300);
|
|||
if fileexists(archivoCurrent) then
|
|||
mimapa.loadfromfile(archivoCurrent);
|
|||
mimapa.add('clear Shift');
|
|||
mimapa.add('clear Lock');
|
|||
mimapa.add('clear Control');
|
|||
mimapa.add('clear Mod1');
|
|||
mimapa.add('clear Mod2');
|
|||
mimapa.add('clear Mod3');
|
|||
mimapa.add('clear Mod4');
|
|||
mimapa.add('clear Mod5');
|
|||
mimapa.add('add Shift = Shift_L Shift_R');
|
|||
mimapa.add('add Lock = Caps_Lock');
|
|||
mimapa.add('add Control = Control_L Control_R');
|
|||
mimapa.add('add Mod1 = Alt_L 0x007D 0x009C');
|
|||
mimapa.add('add Mod2 = Num_Lock');
|
|||
mimapa.add('add Mod4 = 0x007F 0x0080');
|
|||
mimapa.add('add Mod5 = Mode_switch ISO_Level3_Shift ISO_Level3_Shift');
|
|||
mimapa.savetofile(archivoCurrent);
|
|||
orden:=Format(ORD_INA_TE,[ArchivoNull]);
|
|||
Ejecutar(orden);
|
|||
Ejecutar(ORD_INA_RA);
|
|||
fRatonTecladoDesactivados:=true;
|
|||
DeleteFile(ArchivoNull);
|
|||
finally
|
|||
mimapa.free;
|
|||
end;
|
|||
except
|
|||
writeln('Problemas al desactivar teclado');
|
|||
end;
|
|||
end;
|
|||
end.
|
|||