|
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.
|
|
|
|
|