Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 232

Conexión con NFS para la creación el home directory

Ver diferencias:

controlies/trunk/applications/controlies/controllers/usuarios.py
@service.json
@auth.requires_login()
def modify_user():
l=conecta()
departments=[]
classrooms=[]
......
response = u.process(request.vars['action'])
l.close()
return dict(response = response)
#return dict(response = "OK")
@service.json
@auth.requires_login()
def create_home_directory():
from applications.controlies.modules.SSHConnection import SSHConnection
c = SSHConnection(request.vars['host'],request.vars['user'],request.vars['password'])
response = c.process()
if response != True:
return dict(response = response)
l=conecta()
u = Users(l,"","","","",request.vars['username'],"","","","")
responseUser = u.getUserData()
l.close()
if request.vars['type'] == "teacher":
homeDirectory = "/home/profesor/"+responseUser["user"]
else:
homeDirectory = "/home/alumnos/"+responseUser["user"]
c.exec_command("cp -r /etc/skel "+homeDirectory)
c.exec_command("chown -R "+responseUser["uidnumber"]+":"+responseUser["gidnumber"]+" "+homeDirectory)
c.close()
return dict(response = "OK")
def form():
return dict()
def form_home_directory():
return dict()
def call():
"""
exposes services. for example:
controlies/trunk/applications/controlies/modules/SSHConnection.py
##############################################################################
# -*- coding: utf-8 -*-
# Project: ControlIES
# Module: SSHConnection.py
# Purpose: Connection with ssh protocol
# Language: Python 2.5
# Date: 17-Oct-2011.
# Ver: 17-Oct-2011.
# Author: Manuel Mora Gordillo
# Copyright: 2011 - Manuel Mora Gordillo <manuito @no-spam@ gmail.com>
#
# ControlIES 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.
# ControlIES 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 ControlAula. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import paramiko
class SSHConnection(object):
connection = ""
channel = ""
def __init__(self,session):
pass
def __init__(self,host,user,passwd):
self.host = host
self.user = user
self.passwd = passwd
self.port = 22
def validation(self):
if self.host == "":
return "host"
if self.user == "":
return "user"
if self.passwd == "":
return "password"
return "OK"
def process(self):
val = self.validation()
if val != "OK":
return val
auth = self.connect()
return auth
def connect(self):
try:
self.connection = paramiko.Transport((self.host, self.port))
except:
return "failServer"
try:
self.connection.connect(username = self.user, password = self.passwd)
except:
return "failAuth"
return True
def exec_command(self,command):
self.channel = self.connection.open_session()
self.channel.exec_command(command)
"""salida = self.channel.makefile('rb', -1).readlines()
if salida:
# Si ha ido todo bien mostramos el listado de directorios
print salida
else:
# Si se ha producido algún error lo mostramos
print self.channel.makefile_stderr('rb', -1).readlines()"""
def close(self):
self.connection.close()
controlies/trunk/applications/controlies/modules/Users.py
def getUserData(self):
self.getUserGroups()
result = self.ldap.search("ou=People","uid="+self.user,["uid","cn","sn","employeenumber","homedirectory","jpegPhoto"])
result = self.ldap.search("ou=People","uid="+self.user,["uid","cn","sn","employeenumber","homedirectory","uidnumber","gidnumber","jpegPhoto"])
if len(result) == 0:
return { "user":"", "name":"", "surname":"", "nif":"", "photo":"", "type":"", "groups":[] }
return { "user":"", "name":"", "surname":"", "nif":"", "photo":"", "type":"","uidnumber":"","gidnumber":"", "groups":[] }
type = "student"
if result[0][0][1]["homeDirectory"][0][0:14]=="/home/profesor":
......
"name":userdata["cn"][0],
"surname":userdata["sn"][0],
"nif":userdata["employeeNumber"][0],
"uidnumber":userdata["uidNumber"][0],
"gidnumber":userdata["gidNumber"][0],
"photo":photo,
"type":type,
"groups":self.getUserGroups()
controlies/trunk/applications/controlies/views/usuarios/form.html
function send(){
restartStyle();
jQuery.post('call/json/modify_user', jQuery("#form_data").serialize(), function(result) {
//var result = $.parseJSON(data);
switch(result.response){
case "OK":{
jQuery('#message').html("Operación realizada correctamente").css("color","green").effect("highlight", {"color":"yellow"}, 1000);
setTimeout("$('#dialog-form').dialog('close')",1000);
jQuery("#list").trigger("reloadGrid");
if(jQuery("#form_data #action").val()=="add" && jQuery("#form_data #homeDirectory").is(':checked'))
setTimeout("createHomeDirectory('"+jQuery("#form_data #user").val()+"','"+jQuery("#form_data #type").val()+"')",500);
else{
setTimeout("$('#dialog-form').dialog('close')",1000);
jQuery("#list").trigger("reloadGrid");
//setTimeout("createHomeDirectory()",1000);
}
break;
}
case "fail":{
......
return false;
}
function searchUsername(){
if(jQuery("#form_data #action").val()=="add")
jQuery.post('call/json/searchUsername','name='+jQuery("#form_data #name").val()+'&surname='+jQuery("#form_data #surname").val(), function(data) {
......
<p><span id="userTag">Usuario</span><br><input type="text" id="user" name="user"/></p>
<p><span id="passwordTag">Contraseña</span><br><input type="text" id="password" name="password"/></p>
<p><span id="password2Tag">Repita Contraseña</span><br><input type="text" id="password2" name="password2"/></p>
<p id="homeDirectoryP" style="display:none;"><span id="homeDirectoryTag">Crear directorio personal</span>&nbsp;&nbsp;<input type="checkbox" id="homeDirectory" name="homeDirectory"/></p>
</div>
</div>
<div id="message" style="text-align:center; font-weight:bold; color:red; padding:3px; "></div>
<div style="text-align:center;"><button id="saveButton" type="submit" style="width:100px;">Guardar</button>&nbsp;&nbsp;<button type="button" id="cancelButton" style="width:100px;">Cancelar</button></div>
<p style="padding-top:10px; text-align:center; font-size:10px;" id="messageForm"></p>
</form>
<div id="dialog-form-home-directory"></div>
controlies/trunk/applications/controlies/views/usuarios/index.html
jQuery("#messageLoading").show();
jQuery("#dialog-form").html("").css("display","none");;
jQuery("#dialog-form").html("").css("display","none");
jQuery("#dialog-form").load("form.html", function() {
getAllGroups();
jQuery("#form_data #action").val("add");
jQuery("#form_data #homeDirectoryP").css("display","block");
jQuery("#form_data #messageForm").html("Todos los campos son obligatorios");
x = (jQuery(window).width()-300)/2;
x = (jQuery(window).width()-350)/2;
y = (jQuery(window).height()-500)/2;
jQuery("#messageLoading").hide();
......
resizable: false,
position: top,
modal: true,
width: 300,
width: 350,
title: "Añadir Usuario"
}).dialog('option', 'position', [x, y]);
});
......
jQuery('#form_data input:checkbox[value='+l+']').attr('checked', true);
});
x = (jQuery(window).width()-300)/2;
x = (jQuery(window).width()-350)/2;
y = (jQuery(window).height()-500)/2;
jQuery("#messageLoading").hide();
......
jQuery("#dialog-form").dialog({
resizable: false,
modal: true,
width: 300,
width: 350,
title: "Modificar Usuario"
}).dialog('option', 'position', [x, y]);
});
......
jQuery("#form_data #classrooms").multiselect();
});
}
function createHomeDirectory(username,type){
if(jQuery("#form_data #action").val()=="add"){
if(jQuery("#form_data #homeDirectory").is(':checked')){
jQuery("#dialog-form").load("form_home_directory.html", function() {
jQuery("#form_data #username").val(username);
jQuery("#form_data #type").val(type);
x = (jQuery(window).width()-300)/2;
y = (jQuery(window).height()-500)/2;
jQuery("#dialog-form").dialog({
resizable: false,
position: top,
modal: true,
width: 300,
title: "Crear Directorio Personal"
}).dialog('option', 'position', [x, y]);
});
}
}
}
</script>
controlies/trunk/applications/controlies/views/usuarios/form_home_directory.html
<script language="javascript">
$(function() {
$("#password").focus();
$("#saveButton").button({ icons: { primary: "ui-icon-disk"}});
$("#cancelButton")
.button({ icons: { primary: "ui-icon-close"}})
.click( function(){ $('#dialog-form').dialog('close'); });
});
function restartStyle(){
$("#form_data p span").css("color","black");
$('#message').html("");
}
function send(){
restartStyle();
jQuery.post('call/json/create_home_directory', jQuery("#form_data").serialize(), function(result) {
//var result = $.parseJSON(data);
switch(result.response){
case "OK":{
jQuery('#message').html("Operación realizada correctamente").css("color","green").effect("highlight", {"color":"yellow"}, 1000);
setTimeout("$('#dialog-form').dialog('close')",1000);
jQuery("#list").trigger("reloadGrid");
createHomeDirectory();
break;
}
case "failServer":{
jQuery('#message').html("Falló la conexión con el servidor").effect("highlight", {"color":"yellow"}, 1000);
break;
}
case "failAuth":{
jQuery('#message').html("Falló la autenticación").effect("highlight", {"color":"yellow"}, 1000);
break;
}
default:{
jQuery('#'+result.response+"Tag").css("color","red");
jQuery('#'+result.response).effect("highlight", {"color":"yellow"}, 1000).focus();
jQuery('#message').html("Hay campos vacíos o incorrectos").effect("slide");
break;
}
}
});
return false;
}
function createHomeDirectory(){
if(jQuery("#form_data #action").val()=="add"){
if(jQuery("#form_data #homeDirectory").is(':checked')){
jQuery.post('call/json/searchUsername','name='+jQuery("#form_data #name").val()+'&surname='+jQuery("#form_data #surname").val(), function(data) {
//var result = $.parseJSON(data);
jQuery("#form_data #user").val(result.response);
});
}
}
}
</script>
<form id="form_data" onsubmit="return send();">
<input type="hidden" id="action" name="action"/>
<input type="hidden" id="username" name="username"/>
<input type="hidden" id="type" name="type"/>
<div>
<div>
<p><span id="hostTag">Servidor NFS</span><br><input type="text" id="host" name="host" value="servidor"/></p>
<p><span id="userTag">Usuario</span><br><input type="text" id="user" name="user" value="root"/></p>
<p><span id="passwordTag">Contraseña</span><br><input type="text" id="password" name="password"/></p>
</div>
</div>
<div id="message" style="text-align:center; font-weight:bold; color:red; padding:3px; "></div>
<div style="text-align:center;"><button id="saveButton" type="submit" style="width:100px;">Guardar</button>&nbsp;&nbsp;<button type="button" id="cancelButton" style="width:100px;">Cancelar</button></div>
<p style="padding-top:10px; text-align:center; font-size:10px;" id="messageForm"></p>
</form>

Exportar a: Unified diff