Revisión 73
Añadido por Francisco Damián Méndez Palma hace alrededor de 14 años
controlies/Server.py | ||
---|---|---|
|
||
# Start up the web service.
|
||
Root = MainLoop.ControlIESProtocol() #Resource object
|
||
Root.PageDir='/home/manu/proyectos/controlies/www/'
|
||
#Root.PageDir='/home/manu/proyectos/controlies/www/'
|
||
Root.PageDir='/home/chisco/Proyectos/controlies/www'
|
||
site = server.Site(Root)
|
||
|
||
#my_server = static.File('/home/chisco/workspace/adminies/www/')
|
controlies/Plugins/Hosts.py | ||
---|---|---|
import ldap
|
||
import logging
|
||
from math import ceil
|
||
from operator import itemgetter
|
||
|
||
class Hosts(object):
|
||
|
||
... | ... | |
def getName (self):
|
||
return self.mac
|
||
|
||
def validation(self):
|
||
def validation(self,action):
|
||
|
||
if action == "add":
|
||
if self.type == "none":
|
||
return "type"
|
||
|
||
if self.name == "":
|
||
return "name"
|
||
|
||
if self.type <> 'thinclient':
|
||
if self.ip == "":
|
||
return "ip"
|
||
|
||
if self.ip == "":
|
||
return "ip"
|
||
|
||
if self.mac == "":
|
||
return "mac"
|
||
|
||
|
||
if self.type == "":
|
||
return "type"
|
||
|
||
return "OK"
|
||
if action == "add":
|
||
if self.existsHostname():
|
||
return "hostAlreadyExists"
|
||
|
||
# thinclients no requieren ip, la cogen dinamicamente en el aula
|
||
if self.type <> "thinclient":
|
||
if self.existsIP():
|
||
return "ipAlreadyExists"
|
||
|
||
if self.existsMAC():
|
||
return "macAlreadyExists"
|
||
|
||
elif action == "modify":
|
||
return "OK"
|
||
|
||
return "OK"
|
||
|
||
def process(self,action):
|
||
import pdb
|
||
if action == "add":
|
||
val = self.validation()
|
||
val = self.validation(action)
|
||
|
||
if val != "OK":
|
||
return val
|
||
... | ... | |
|
||
def list(self,args):
|
||
|
||
#Distinguimos entre hosts ltsp, workstations y portatiles
|
||
print "Estoy en Hosts.py"
|
||
#from Plugins.LdapConnection import LdapConnection
|
||
|
||
#l = LdapConnection("172.23.36.5",'cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es',"Sta1987teleco")
|
||
#l.connect()
|
||
|
||
# grid parameters
|
||
limit = int(args['rows'][0])
|
||
page = int(args['page'][0])
|
||
start = limit * page - limit
|
||
finish = start + limit;
|
||
|
||
# sort by field
|
||
sortBy = args['sidx'][0]
|
||
#if sortBy == "uid":
|
||
#sortBy = "id"
|
||
|
||
# reverse Sort
|
||
reverseSort = False
|
||
if args['sord'][0] == "asc":
|
||
reverseSort = True
|
||
|
||
#Distinguimos entre hosts ltsp, workstations y portatiles
|
||
type = args['type'][0]
|
||
|
||
if type == "LTSP":
|
||
search = self.ldap.search("ou=hosts","cn=*",["cn","ipHostNumber","macAddress"])
|
||
elif type == "thinClient":
|
||
search = self.ldap.search("ou=hosts","cn=*",["cn","ipHostNumber","macAddress"])
|
||
|
||
if type == "ltsp":
|
||
# Obtengo todos los elementos del nodo hosts
|
||
#search = l.search("ou=hosts","cn=*",["cn","ipHostNumber","macAddress"])
|
||
#filter = self.buildFilter(args)
|
||
search = self.ldap.search("ou=hosts","cn=*",["cn","ipHostNumber","macAddress"])
|
||
|
||
start = limit * page - limit
|
||
finish = start + limit;
|
||
# triplets que contiene los nombres de los ltsp-servers
|
||
#triplets = l.search("ou=Netgroup","cn=ltsp-server-hosts",["nisNetgroupTriple"])
|
||
triplets = self.ldap.search("ou=Netgroup","cn=ltsp-server-hosts",["nisNetgroupTriple"])
|
||
triplets = triplets [0][0][1]["nisNetgroupTriple"]
|
||
hostnames=list()
|
||
|
||
for node in triplets:
|
||
name = node.replace(",-,-)","").replace("(","")
|
||
hostnames.append(name)
|
||
|
||
# Ahora tengo que quedarme con los elementos de search que estan en hostnames: los que son ltsp
|
||
resultado=list()
|
||
for element in search:
|
||
if element[0][1]["cn"][0] in hostnames:
|
||
resultado.append(element)
|
||
|
||
search = resultado
|
||
|
||
if len(search) > 0:
|
||
totalPages = ceil( len(search) / int(limit) )
|
||
else:
|
||
totalPages = 0
|
||
if page > totalPages:
|
||
page = totalPages
|
||
|
||
rows = []
|
||
for i in search[start:finish]:
|
||
row = {
|
||
"id":i[0][1]["cn"][0],
|
||
"cell":[i[0][1]["cn"][0], i[0][1]["ipHostNumber"][0],i[0][1]["macAddress"]],
|
||
"cn":i[0][1]["cn"][0],
|
||
"ipHostNumber":i[0][1]["ipHostNumber"][0],
|
||
"macAddress":i[0][1]["macAddress"][0]
|
||
}
|
||
#row = { "cn":i[0][0], "cell":[i[0][1]["cn"][0], i[0][1]["ipHostNumber"][0],i[0][1]["macAddress"]]}
|
||
rows.append(row)
|
||
|
||
result = sorted(rows, key=itemgetter(sortBy), reverse=reverseSort)
|
||
return { "page":page, "total":totalPages, "records":len(search), "rows":result }
|
||
|
||
elif type == "thinclient":
|
||
#import pdb
|
||
#search = l.search("cn=THINCLIENTS,cn=DHCP Config", "cn=*",["cn","dhcpHWAddress"])
|
||
search = self.ldap.search("cn=THINCLIENTS,cn=DHCP Config","cn=*",["cn","dhcpHWAddress"])
|
||
#search[6][0][1]["cn"][0]
|
||
|
||
if len(search) > 0:
|
||
totalPages = ceil( len(search) / int(limit) )
|
||
else:
|
||
totalPages = 0
|
||
if page > totalPages:
|
||
page = totalPages
|
||
|
||
rows = []
|
||
# esto hay que cambiarlo: tenemos 4 groups en thinclientes
|
||
for i in search[6:finish]:
|
||
row = {
|
||
"id":i[0][1]["cn"][0],
|
||
"cell":[i[0][1]["cn"][0], i[0][1]["dhcpHWAddress"]],
|
||
"cn":i[0][1]["cn"][0],
|
||
"dhcpHWAddress":i[0][1]["dhcpHWAddress"][0]
|
||
}
|
||
#row = { "cn":i[0][0], "cell":[i[0][1]["cn"][0], i[0][1]["dhcpHWAddress"][0]]}
|
||
rows.append(row)
|
||
|
||
result = sorted(rows, key=itemgetter(sortBy), reverse=reverseSort)
|
||
return { "page":page, "total":totalPages, "records":len(search), "rows":result }
|
||
|
||
if len(search) > 0:
|
||
totalPages = ceil( len(search) / int(limit) )
|
||
else:
|
||
totalPages = 0
|
||
elif type == "workstation":
|
||
# Obtengo todos los elementos del nodo hosts
|
||
#search = l.search("ou=hosts","cn=*",["cn","ipHostNumber","macAddress"])
|
||
search = self.ldap.search("ou=hosts","cn=*",["cn","ipHostNumber","macAddress"])
|
||
# triplets que contiene los nombres de las workstations
|
||
#triplets = l.search("ou=Netgroup","cn=workstation-hosts",["nisNetgroupTriple"])
|
||
triplets = self.ldap.search("ou=Netgroup","cn=workstation-hosts",["nisNetgroupTriple"])
|
||
triplets = triplets [0][0][1]["nisNetgroupTriple"]
|
||
hostnames=list()
|
||
|
||
# obtengo lista de nombres de los hosts workstation
|
||
for node in triplets:
|
||
name = node.replace(",-,-)","").replace("(","")
|
||
hostnames.append(name)
|
||
|
||
# Ahora tengo que quedarme con los elementos de search que estan en hostnames
|
||
resultado=list()
|
||
for element in search:
|
||
if element[0][1]["cn"][0] in hostnames:
|
||
resultado.append(element)
|
||
|
||
search = resultado
|
||
|
||
if page > totalPages:
|
||
page = totalPages
|
||
# print search[0][0][1]["uidNumber"][0]
|
||
rows = []
|
||
for i in search[start:finish]:
|
||
row = { "cn":i[0][0], "cell":[i[0][1]["cn"][0], i[0][1]["ipHostNumber"][0],i[0][1]["macAddress"]]}
|
||
rows.append(row)
|
||
if len(search) > 0:
|
||
totalPages = ceil( len(search) / int(limit) )
|
||
else:
|
||
totalPages = 0
|
||
if page > totalPages:
|
||
page = totalPages
|
||
|
||
rows = []
|
||
for i in search[start:finish]:
|
||
row = {
|
||
"id":i[0][1]["cn"][0],
|
||
"cell":[i[0][1]["cn"][0], i[0][1]["ipHostNumber"][0],i[0][1]["macAddress"]],
|
||
"cn":i[0][1]["cn"][0],
|
||
"ipHostNumber":i[0][1]["ipHostNumber"][0],
|
||
"macAddress":i[0][1]["macAddress"][0]
|
||
}
|
||
#row = { "cn":i[0][0], "cell":[i[0][1]["cn"][0], i[0][1]["ipHostNumber"][0],i[0][1]["macAddress"]]}
|
||
rows.append(row)
|
||
|
||
return { "page":page, "total":totalPages, "records":len(search), "rows":rows }
|
||
result = sorted(rows, key=itemgetter(sortBy), reverse=reverseSort)
|
||
return { "page":page, "total":totalPages, "records":len(search), "rows":result }
|
||
|
||
def add(self):
|
||
record = [
|
||
('objectclass', ['person','organizationalperson','inetorgperson']),
|
||
('uid', ['francis']),
|
||
('cn', [self.name] ),
|
||
('sn', ['Bacon'] ),
|
||
('userpassword', [self.password]),
|
||
('ou', ['users'])
|
||
]
|
||
try:
|
||
self.ldap.add("cn=hosts", record)
|
||
except ldap.ALREADY_EXISTS:
|
||
return "fail"
|
||
#record = [
|
||
#('objectclass', ['person','organizationalperson','inetorgperson']),
|
||
#('uid', ['francis']),
|
||
#('cn', [self.name] ),
|
||
#('sn', ['Bacon'] ),
|
||
#('userpassword', [self.password]),
|
||
#('ou', ['users'])
|
||
#]
|
||
#try:
|
||
# self.ldap.add("cn=hosts", record)
|
||
#except ldap.ALREADY_EXISTS:
|
||
# return "fail"
|
||
|
||
return "OK"
|
||
|
||
... | ... | |
from twisted.internet import defer
|
||
from Plugins import NetworkUtils
|
||
NetworkUtils.startup(self.mac)
|
||
|
||
|
||
def existsHostname(self):
|
||
|
||
if self.type == 'thinclient':
|
||
result = self.ldap.search("ou=hosts","cn="+self.name,["cn"])
|
||
else:
|
||
result = self.ldap.search("ou=hosts","cn="+self.name,["cn"])
|
||
|
||
if len(result) > 0:
|
||
return True
|
||
|
||
return False
|
||
|
||
def existsMAC(self):
|
||
import pdb
|
||
# Compruebo con las macs de la rama hosts
|
||
pdb.set_trace()
|
||
if self.type == 'thinclient':
|
||
search = self.ldap.search("cn=THINCLIENTS,cn=DHCP Config","cn=a*",["dhcpHWAddress"])
|
||
|
||
#print search [0][0][1]['dhcpHWAddress'][0]
|
||
|
||
pdb.set_trace()
|
||
result = self.ldap.search("ou=hosts","macAddress="+self.mac,["macAddress"])
|
||
else:
|
||
result = self.ldap.search("ou=hosts","macAddress="+self.mac,["macAddress"])
|
||
|
||
if len(result) > 0:
|
||
return True
|
||
|
||
return False
|
||
|
||
def existsIP (self):
|
||
# Cojo las ips de la rama hosts -> arpa -> in-addr
|
||
result = self.ldap.search ("dc=23,dc=172,dc=in-addr,dc=arpa,ou=hosts", "dc=*",["associatedDomain"])
|
||
|
||
myIP = self.ip.split (".")
|
||
|
||
for i in range (0, len (result) -1):
|
||
reverseIP = result [i][0][1]['associatedDomain'][0].replace (".in-addr.arpa","").split(".")
|
||
reverseIP.reverse()
|
||
if myIP == reverseIP:
|
||
return True
|
||
|
||
return False
|
||
|
||
|
||
# def wakeup(self):
|
||
# from twisted.internet.task import LoopingCall
|
||
# from twisted.internet import defer
|
controlies/www/ltsp/index.html | ||
---|---|---|
caption: "Insertar",
|
||
buttonicon :'ui-icon-plus',
|
||
onClickButton : function (){
|
||
handleRecord('add','Añadir Usuario');
|
||
addRecord();
|
||
}
|
||
});
|
||
$("#list").jqGrid('navButtonAdd','#pager',{
|
||
... | ... | |
}
|
||
}).dialog('open');
|
||
}
|
||
|
||
function addRecord(){
|
||
|
||
$("#dialog-form").html("");
|
||
$("#dialog-form").load("ltsp/form.html", function() {
|
||
$("#form_data #action").val("add");
|
||
$("#form_data #messageForm").html("Todos los campos son obligatorios");
|
||
});
|
||
|
||
x = ($(window).width()-250)/2;
|
||
y = ($(window).height()-400)/2;
|
||
|
||
$("#dialog-form").dialog({
|
||
resizable: false,
|
||
position: top,
|
||
modal: true,
|
||
title: "Añadir Servidor de Aula (ltsp)"
|
||
}).dialog('option', 'position', [x, y]);
|
||
}
|
||
</script>
|
||
|
||
<div id="tabla_clientes">
|
controlies/www/thinclients/index.html | ||
---|---|---|
caption: "Insertar",
|
||
buttonicon :'ui-icon-plus',
|
||
onClickButton : function (){
|
||
handleRecord('add','Añadir Usuario');
|
||
addRecord();
|
||
}
|
||
});
|
||
$("#list").jqGrid('navButtonAdd','#pager',{
|
||
... | ... | |
}
|
||
}).dialog('open');
|
||
}
|
||
|
||
function addRecord(){
|
||
|
||
$("#dialog-form").html("");
|
||
$("#dialog-form").load("thinclients/form.html", function() {
|
||
$("#form_data #action").val("add");
|
||
$("#form_data #messageForm").html("Todos los campos son obligatorios");
|
||
});
|
||
|
||
x = ($(window).width()-250)/2;
|
||
y = ($(window).height()-400)/2;
|
||
|
||
$("#dialog-form").dialog({
|
||
resizable: false,
|
||
position: top,
|
||
modal: true,
|
||
title: "Añadir Cliente Ligero"
|
||
}).dialog('option', 'position', [x, y]);
|
||
}
|
||
</script>
|
||
|
||
<div id="tabla_clientes">
|
controlies/www/workstation/index.html | ||
---|---|---|
$("#list").jqGrid('navButtonAdd','#pager',{
|
||
caption: "Insertar",
|
||
buttonicon :'ui-icon-plus',
|
||
onClickButton : function (){
|
||
handleRecord('add','Añadir Usuario');
|
||
onClickButton : function (){
|
||
addRecord();
|
||
}
|
||
});
|
||
$("#list").jqGrid('navButtonAdd','#pager',{
|
||
caption: "Modificar",
|
||
buttonicon :'ui-icon-pencil',
|
||
onClickButton : function (){
|
||
handleRecord('modify','Modificar Usuario');
|
||
modifyRecord();
|
||
}
|
||
});
|
||
$("#list").jqGrid('navButtonAdd','#pager',{
|
||
... | ... | |
|
||
$("#list").jqGrid('filterToolbar');
|
||
}
|
||
|
||
function modifyRecord(){
|
||
var uid;
|
||
|
||
var uid = rowSelected();
|
||
|
||
}
|
||
|
||
function rowSelected(){
|
||
var id = $("#list").jqGrid('getGridParam','selrow');
|
||
|
||
alert (id);
|
||
if( id == null ){
|
||
$( "#dialog-alert" ).dialog({
|
||
resizable: false,
|
||
... | ... | |
}
|
||
}).dialog('open');
|
||
}
|
||
|
||
function addRecord(){
|
||
|
||
$("#dialog-form").html("");
|
||
$("#dialog-form").load("workstation/form.html", function() {
|
||
$("#form_data #action").val("add");
|
||
$("#form_data #messageForm").html("Todos los campos son obligatorios");
|
||
});
|
||
|
||
x = ($(window).width()-250)/2;
|
||
y = ($(window).height()-400)/2;
|
||
|
||
$("#dialog-form").dialog({
|
||
resizable: false,
|
||
position: top,
|
||
modal: true,
|
||
title: "Añadir Workstation"
|
||
}).dialog('option', 'position', [x, y]);
|
||
}
|
||
|
||
</script>
|
||
|
||
<div id="tabla_clientes">
|
controlies/MainLoop.py | ||
---|---|---|
return json.dumps({"connection" : response})
|
||
|
||
if command == "users":
|
||
|
||
from Plugins.Users import Users
|
||
|
||
if request.args['action'][0] == "list":
|
||
... | ... | |
classrooms = request.args['multiselect_classrooms']
|
||
except:
|
||
pass
|
||
|
||
u = Users(l,request.args['type'][0],request.args['name'][0],request.args['surname'][0],request.args['nif'][0],request.args['user'][0],request.args['password'][0],request.args['password2'][0],departments,classrooms)
|
||
response = u.process(request.args['action'][0])
|
||
return json.dumps({"response" : response})
|
||
... | ... | |
if command == "hosts":
|
||
|
||
from Plugins.Hosts import Hosts
|
||
|
||
|
||
if request.args['action'][0] == "list":
|
||
h = Hosts (l,"","","","")
|
||
response = h.list(request.args)
|
||
... | ... | |
#h.wakeup()
|
||
return json.dumps(response)
|
||
else:
|
||
h = Hosts(l,request.args['name'][0],request.args['ip'][0],request.args['mac'][0])
|
||
print request.args['name'][0]
|
||
if request.args ['type'][0] == 'thinclient':
|
||
ip = ""
|
||
else:
|
||
ip = request.args ['ip'][0]
|
||
h = Hosts(l,request.args['name'][0],ip,request.args['mac'][0],request.args['type'][0])
|
||
response = h.process(request.args['action'][0])
|
||
return json.dumps({"response" : response})
|
||
|
Exportar a: Unified diff
Validaciones en formularios de maquinas