Proyecto

General

Perfil

Descargar (12,5 KB) Estadísticas
| Rama: | Revisión:
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.


(3-3/10)