Browse Source

first commit

master
Andrea Cimbalo 12 years ago
commit
68cf9bbbb8
11 changed files with 19993 additions and 0 deletions
  1. +8
    -0
      config.sample.php
  2. +1109
    -0
      css/bootstrap-responsive.css
  3. +6158
    -0
      css/bootstrap.css
  4. BIN
      img/glyphicons-halflings-white.png
  5. BIN
      img/glyphicons-halflings.png
  6. +249
    -0
      index.php
  7. +9597
    -0
      jquery-1.9.1.js
  8. +2276
    -0
      js/bootstrap.js
  9. +6
    -0
      js/bootstrap.min.js
  10. +458
    -0
      lilikuser.php
  11. +132
    -0
      user.php

+ 8
- 0
config.sample.php View File

@ -0,0 +1,8 @@
<?php
$PORT = 389;
$HOST = "ldap.lilik.it";
$LOGIN_DN='';
$LOGIN_PASS='';
?>

+ 1109
- 0
css/bootstrap-responsive.css
File diff suppressed because it is too large
View File


+ 6158
- 0
css/bootstrap.css
File diff suppressed because it is too large
View File


BIN
img/glyphicons-halflings-white.png View File

Before After
Width: 469  |  Height: 159  |  Size: 8.6 KiB

BIN
img/glyphicons-halflings.png View File

Before After
Width: 469  |  Height: 159  |  Size: 12 KiB

+ 249
- 0
index.php View File

@ -0,0 +1,249 @@
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/jquery-1.9.1.js"></script>
<!-- <script type="text/javascript" src="/jquery.validate.js"></script>-->
<script type="text/javascript" src="/js/bootstrap.js"></script>
<!-- <script type="text/javascript" src="jquery.dform-1.0.1.js"></script>-->
<script type="text/javascript">
var service_hash={'admin':{'text':'Gestisci gli utenti del LILiK', 'href': 'http://login.lilik.it'},
'mail':{'text':'Controlla la tua casella @lilik.it', 'href': 'http://webmail.lilik.it'},
'ltsp':{'text':'Accedi ai client del LILiK'},
'users':{'text':'Hai un utente sulla macchina users', 'href': 'http://users.lilik.it'},
'wiki':{'text':'Modifica la wiki', 'href': 'http://wiki.lilik.it'},
'public_html':{'text':'Hai un sito web sulla macchina users', 'href': 'http://users.lilik.it'},
'lilik.it':{'text':'Accedi con il tuo utente a lilik.it', 'href': 'http://www.lilik.it'},
'cloud':{'text':'Accedi alla piattaforma cloud', 'href': 'http://cloud.lilik.it'},
'projects':{'text':'Accedi al portale progetti', 'href': 'http://projects.lilik.it'},
'teambox':{'text':'Accedi a teambox', 'href': 'http://teambox.lilik.it'}
};
function parsedata(data){
$('#content').text('');
$('#alerts').text('');
$('#services').text('');
if (!data['loggedin']){
$('#loginModal').modal('show');
}
if (data['admin']==true){
$('#search-form').show();
$('#old_password').hide()
}else{
$('#search-form').hide();
$('#old_password').show()
}
if ('username' in data){
$('#content').append($('<h2 class="">').text(data['username']));
var cn=$('<h5>').text(data['cn']);
if (data['admin']==true){
cn=$('<input type="text" name="cn" placeholder="Nome completo" >').val(data['cn']);
}
$('#content').append($('<div class="row-fluid">').append($('<div class="span4">').append(cn)).append($('<div class="span8">').append($('<a href="#passwordModal" role="button" class="btn inline" data-toggle="modal">').text('Cambia password'))));
}
['error', 'info', 'success'].forEach(function(what){
if (what in data){
$('#alerts').append($('<div class="alert alert-block alert-'+what+'">').text(data[what]).append('uup-').fadeIn(700))
}
});
if ('avaible_services' in data){
services=data['services'];
if (data['admin']==true){
var fieldset=$('<fieldset>');
$('#content').append(fieldset);
data['avaible_services'].forEach(function(service){
tmp=$('<label>');
tmp=tmp.prepend($('<input name="services[]" type="checkbox" value="'+service+'" '+((services.indexOf(service)>=0)?'checked="true"':'')+'>'));
tmp.append((service in service_hash)?service_hash[service]['text']:service);
fieldset.append(tmp);
});
}else{
$('#content').append($('<ul id="services">'));
services.forEach(function(service){
var tmp=$('<li>');
tmp.text((service in service_hash && 'text' in service_hash[service])?service_hash[service]['text']:service);
if (service in service_hash && 'href' in service_hash[service]){
tmp.wrapInner($('<a target="_blank">').attr('href', service_hash[service]['href']));
}
$('#services').append(tmp);
});
}
}
if (data['admin']==true & data['exist']!=false & $('#content').text()!=''){
$('#content').append($('<button type="submit" class="btn btn-primary">Salva</button>'));
$('#content').wrapInner($('<form data-async action="user.php" method="POST">'));
}
}
function get(url){
$.getJSON(url).done(parsedata);
}
$(document).ready(function() {
$("#search-user").change(function() {
$("#search-form").attr("action", "/users/" + $(this).val() + "/");
});
$("#inputUsername").change(function() {
$("#newUserForm").attr("action", "/users/" + $(this).val() + "/user.php");
});
jQuery(function($) {
$("body").on('submit', 'form[data-async]', function(event) {
var $form = $(this);
$.ajax({
type: $form.attr('method'),
url: $form.attr('action'),
data: $form.serialize(),
dataType: 'json',
success: function(data, status) {
parsedata(data);
$('#loginModal').modal('hide');
$('#passwordModal').modal('hide');
$('#newUserModal').modal('hide');
}
});
$form.find('input:password').val('');
event.preventDefault();
});
});
get('user.php');
});
</script>
<link href="/css/bootstrap.css" rel="stylesheet" media="screen">
<style type="text/css">
form.form-modal{
margin-bottom: 0px;
}
</style>
</head>
<body>
<div id="container" class="container">
<div class="navbar">
<div class="navbar-inner">
<a class="brand" href="/">Lilik User</a>
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#newUserModal" data-toggle="modal">Crea utente</a></li>
<li><a href="javascript:get('/user.php?logout')">Logout</a></li>
</ul>
<form id="search-form" class="navbar-search pull-right">
<input id="search-user" type="text" class="search-query" placeholder="Cerca">
</form>
</div>
</div>
<div id="alerts"></div>
<div id="content"></div>
<div id="newUserModal" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Crea utente</h3>
</div>
<form data-async action="user.php" method="POST" id="newUserForm" class="form-horizontal form-modal">
<div class="modal-body">
<div class="control-group">
<label class="control-label" for="inputUsername">Username</label>
<div class="controls">
<input type="text" id="inputUsername" placeholder="username" name="new_username">
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputName">Nome</label>
<div class="controls">
<input type="text" id="inputName" placeholder="name" name="new_name">
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputSurname">Cognome</label>
<div class="controls">
<input type="text" id="inputSurname" placeholder="surname" name="new_surname">
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Password</label>
<div class="controls">
<input type="password" id="inputPassword" placeholder="password" name="new_passwd">
</div>
</div>
<input type="hidden" name="new_user" value="true">
</div>
<div class="modal-footer">
<a href="#" class="btn" data-toggle="modal" data-target="#newUserModal">Chiudi</a>
<button type="submit" class="btn btn-primary">Salva</button>
</div>
</form>
</div>
<div id="passwordModal" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Cambia password</h3>
</div>
<form data-async action="user.php" method="POST" class="form-horizontal form-modal">
<div class="modal-body">
<div class="control-group" id="old_password" >
<label class="control-label" for="inputOldPassword">Password attuale</label>
<div class="controls">
<input type="text" id="inputOldPassword" placeholder="old password" name="old_password">
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Password</label>
<div class="controls">
<input type="password" id="inputPassword" placeholder="new password" name="new_password">
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword2">Reimmetti password</label>
<div class="controls">
<input type="password" id="inputPassword2" placeholder="new password" name="new_password2">
</div>
</div>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-toggle="modal" data-target="#passwordModal">Chiudi</a>
<button type="submit" class="btn btn-primary">Salva</button>
</div>
</form>
</div>
<div id="loginModal" class="modal hide fade">
<div class="modal-header">
<h3>Login</h3>
</div>
<form data-async action="user.php" method="POST" class="form-horizontal form-modal">
<div class="modal-body">
<div class="control-group">
<label class="control-label" for="inputUsername">Username</label>
<div class="controls">
<input type="text" id="inputUsername" placeholder="username" name="username">
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Password</label>
<div class="controls">
<input type="password" id="inputPassword" placeholder="password" name="password">
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Login</button>
</div>
</form>
</div>
</div>
</body>
</html>

+ 9597
- 0
jquery-1.9.1.js
File diff suppressed because it is too large
View File


+ 2276
- 0
js/bootstrap.js
File diff suppressed because it is too large
View File


+ 6
- 0
js/bootstrap.min.js
File diff suppressed because it is too large
View File


+ 458
- 0
lilikuser.php View File

@ -0,0 +1,458 @@
<?
$ssha=function($pw){
if (!in_array(strtolower(substr($pw, 0, 5)), array('{ssha', '{cryp', '{sha}',))){
$salt = substr(md5(uniqid(mt_rand(), true)), 0, 4);
return '{SSHA}'.base64_encode( sha1( $pw . $salt, true) . $salt );
}
return $pw;
};
class LdapAdapter{
function __construct($host, $port, $user, $pass){
$this->conn = ldap_connect($host,$port);
ldap_set_option($this->conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($this->conn, $user, $pass);
}
function bind($host, $port, $user, $pass){
$conn = ldap_connect($host,$port);
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
return ldap_bind($conn, $user, $pass);
}
function get_ldap_attr($dn, $attr){
# $search = ldap_search($this->conn, $dn, "$attr=*", array($attr));
$dn_array=ldap_explode_dn($dn, 0);
$new_dn=array();
for ($i=1; $i<$dn_array['count']; $i++){
$new_dn[]=$dn_array[$i];
}
$search=ldap_search($this->conn, implode(',', $new_dn), $dn_array[0]);
if (ldap_count_entries($this->conn, $search)==0){
return Null;
}
$entry = ldap_first_entry($this->conn, $search);
return ldap_get_values ($this->conn, $entry, $attr);
}
function get_ldap_attr_max($dn, $attr){
$search = ldap_search($this->conn, $dn, "$attr=*", array($attr));
$entry = ldap_first_entry($this->conn, $search);
$max=0;
while( $entry){
$tmp=ldap_get_values ($this->conn, $entry, $attr)[0];
if ($tmp>$max){
$max=$tmp;
}
$entry = ldap_next_entry($this->conn, $search);
}
return $max;
}
function add_ldap_obj($dn, $obj){
return ldap_add($this->conn, $dn, $obj);
}
function exist_ldap_obj($dn){
$dn_array=ldap_explode_dn($dn, 0);
$new_dn=array();
for ($i=1; $i<$dn_array['count']; $i++){
$new_dn[]=$dn_array[$i];
}
$search=ldap_search($this->conn, implode(',', $new_dn), $dn_array[0]);
if (ldap_count_entries($this->conn, $search)==0){
return False;
}
return True;
}
function set_ldap_attr($dn, $attr, $value){
return ldap_modify($this->conn, $dn , array($attr=>$value));
}
}
abstract class Adapter{
function __construct($dn){
$this->dn = $dn;
$this->setters = array();
$this->getters = array();
}
function add_getter($attr, $fn = Null){
if (array_key_exists($attr, $this->getters)){
$this->getters[$attr][]= $fn;
}else{
$this->getters[$attr] = array($fn);
}
}
function add_setter($attr, $fn = Null){
if (array_key_exists($attr, $this->setters)){
$this->setters[$attr][]= $fn;
}else{
$this->setters[$attr] = array($fn);
}
}
function get_attr($la, $username, $attr){
if (array_key_exists($attr, $this->getters)){
foreach ($this->getters[$attr] as $getter){
$result=$la->get_ldap_attr(sprintf($this->dn, $username), $attr);
if ($getter != Null)
return $getter($result);
return $result;
}
}
return Null;
}
function set_attr($la, $username, $attr, $value){
$done=False;
if (array_key_exists($attr, $this->setters)){
$done=True;
foreach ($this->setters[$attr] as $setter){
if ($setter != Null)
$value=$setter($value);
$la->set_ldap_attr(sprintf($this->dn, $username), $attr, $value);
}
}
return $done;
}
function get_attributes(){
$attributes=array();
foreach ($this->setters as $setter => $value)
$attributes[]=$setter;
return $attributes;
}
function exist($la, $username){
if ($la->exist_ldap_obj(sprintf($this->dn, $username))){
return True;
}
return False;
}
function bind($username, $password){
global $HOST, $PORT, $LOGIN_DN;
return LdapAdapter::bind($HOST, $PORT, sprintf($this->dn,$username), $password);
}
}
class MailAdapter extends Adapter{
function __construct($dn){
global $ssha;
parent::__construct($dn);
$this->add_getter('mail', function($x){return $x[0];}); # function($x){return substr($x, strlen("@lilik.it")*-1);}
$this->add_setter('mail'); # function($x){return $x[0]."@lilik.it";}
$this->add_getter('cn', function($x){return $x[0];});
$this->add_setter('cn');
$this->add_getter('userPassword', function($x){return $x[0];});
$this->add_setter('userPassword', $ssha);
$this->add_getter('accountActive', function($x){return $x[0];});
$this->add_setter('accountActive');
}
function create($la, $id, $name, $surname, $password){
global $ssha;
$new_mail_obj=['cn'=> [sprintf('%s %s',$name,$surname)],
'accountActive'=> ['FALSE'],
'objectClass'=> ['top', 'VirtualMailAccount', 'Vacation', 'VirtualForward', 'amavisAccount'],
'smtpAuth'=> ['FALSE'],
'mailAutoreply'=> [sprintf('%s@lilik.it.autoreply',$id)],
'uid'=> [sprintf('%s.lilik.it',$id)],
'vacationEnd'=> ['200701010000'],
'userPassword'=> [$ssha($password)],
'amavisBypassSpamChecks'=> ['FALSE'],
'amavisSpamTagLevel'=> ['3.0'],
'otherTransport'=> ['phamm=>'],
'vacationInfo'=> ['vacation'],
'mail'=> [sprintf('%s@lilik.it',$id)],
'vacationStart'=> ['200701010000'],
'vacationActive'=> ['FALSE'],
'amavisSpamTag2Level'=> ['5.5'],
'vdHome'=> [sprintf('/home/mail_deliver/lilik.it/%s',$id)],
'quota'=> ['1024000'],
'mailbox'=> [sprintf('lilik.it/%s/',$id)],
'forwardActive'=> ['FALSE'],
'amavisBypassVirusChecks'=> ['FALSE'],
'sn'=> [sprintf('%s',$surname)],
'amavisSpamKillLevel'=> ['6.0'],
'givenName'=> [sprintf('%s',$name)],
'delete'=> ['FALSE'],
'lastChange'=> [sprintf('%d',time())]
];
return $la->add_ldap_obj(sprintf($this->dn,$id),$new_mail_obj);
}
}
class PosixAdapter extends Adapter{
function __construct($dn){
global $ssha;
parent::__construct($dn);
$this->add_getter('cn', function($x){return $x[0];});
$this->add_setter('cn');
$this->add_getter('host');
$this->add_setter('host');
$this->add_getter('userPassword', function($x){return $x[0];});
$this->add_setter('userPassword', $ssha);
$this->add_getter('memberOf');
$this->add_setter('memberOf');
}
function create($la, $id, $name, $surname, $password){
global $ssha;
$new_posix_obj=['uid'=> [sprintf('%s',$id)],
'objectClass'=> ['top', 'shadowAccount', 'posixAccount', 'account'],
'loginShell'=> ['/bin/bash'],
'userPassword'=> [$ssha($password)],
'uidNumber'=> [$la->get_ldap_attr_max('o=People,dc=lilik,dc=it', 'uidNumber')],
'host'=> ['*'],
'gidNumber'=> ['9000'], #stdusers
'homeDirectory'=> [sprintf('/home/%s',$id)],
'cn'=> [sprintf('%s %s',$name,$surname)],
];
return $la->add_ldap_obj(sprintf($this->dn,$id),$new_posix_obj);
}
}
class GroupAdapter extends Adapter{
function __construct($dn){
parent::__construct($dn);
$this->add_getter('member');
$this->add_setter('member');
}
}
abstract class pippo{
function __construct($id){
global $HOST, $PORT, $LOGIN_DN, $LOGIN_PASS;
$this->id=$id;
$this->la=new LdapAdapter($HOST, $PORT, $LOGIN_DN, $LOGIN_PASS);
}
function get_attr($attr){
foreach($this->adapters as $adapter){
$result=$adapter->get_attr($this->la, $this->id, $attr);
if ($result!=Null)
return $result;
}
return Null;
}
function set_attr($attr, $value){
$result=False;
foreach($this->adapters as $adapter){
if ($adapter->set_attr($this->la, $this->id, $attr, $value)){
$result=True;
}
}
return $result;
}
function add_in_list($attr, $value){
$tmp=$this->get_attr($attr);
if (in_array($value, $tmp)){
return True;
}
$tmp[]=$value;
unset($tmp['count']);
if ($this->set_attr($attr, $tmp)){
return True;
}
return False;
}
function del_in_list($attr, $value){
$tmp=$this->get_attr($attr);
if (!in_array($value, $tmp)){
return True;
}
if(($key = array_search($value, $tmp)) !== false) {
unset($tmp[$key]);
}
unset($tmp['count']);
$tmp=array_values($tmp);
if ($this->set_attr($attr, $tmp)){
return True;
}
return False;
}
function exist(){
foreach ($this->adapters as $adapter){
if ($adapter->exist($this->la, $this->id)){
return True;
}
}
return False;
}
function check_password($password){
foreach ($this->adapters as $adapter)
if ($adapter->bind($this->id, $password))
return True;
return False;
}
}
class LilikGroup extends pippo{
function __construct($id){
global $HOST, $PORT, $LOGIN_DN;
parent::__construct($id);
$this->adapters=[new GroupAdapter("cn=%s,o=Group,dc=lilik,dc=it")];
}
function add_user($user){
return $this->add_in_list('member', sprintf($user->adapters[1]->dn,$user->id));
}
function del_user($user){
return $this->del_in_list('member', sprintf($user->adapters[1]->dn,$user->id));
}
function is_user($user){
if (in_array(sprintf($user->adapters[1]->dn,$user->id), $this->get_attr('member'))){
return True;
}
return False;
}
}
class LilikUser extends pippo{
function __construct($id){
parent::__construct($id);
$this->adapters=array(new MailAdapter("mail=%s@lilik.it,vd=lilik.it,o=hosting,dc=lilik,dc=it"),
new PosixAdapter("uid=%s,o=People,dc=lilik,dc=it"));
$this->_flag=array('mail'=>'accountActive');
$this->_host=array('ltsp'=>'ltsp',
'users'=>'users');
$this->_member=array('admin'=>'admin',
'wiki'=>'wiki',
'public_html'=>'public_html',
'lilik.it'=>'lilik.it',
'cloud'=>'cloud',
'projects'=>'projects',
'teambox'=>'teambox'
);
if ($this->exist()){
$this->sanitize();
}
}
function is_admin(){
return $this->status('admin');
}
function enable($service){
if (array_key_exists($service, $this->_flag)){
return $this->set_attr($this->_flag[$service], 'TRUE');
}elseif (array_key_exists($service, $this->_host)){
return $this->add_in_list('host', $this->_host[$service]);
}elseif (array_key_exists($service, $this->_member)){
$l=new LilikGroup($this->_member[$service]);
return $l->add_user($this);
}else{
throw new Exception("Service not found");
}
}
function disable($service){
if (array_key_exists($service, $this->_flag)){
return $this->set_attr($this->_flag[$service], 'FALSE');
}elseif (array_key_exists($service, $this->_host)){
return $this->del_in_list('host', $this->_host[$service]);
}elseif (array_key_exists($service, $this->_member)){
$l=new LilikGroup($this->_member[$service]);
return $l->del_user($this);
}else{
throw new Exception("Service not found");
}
}
function status($service){
if (array_key_exists($service, $this->_flag)){
if ($this->get_attr($this->_flag[$service])=='TRUE'){
return True;
}
return False;
}elseif (array_key_exists($service, $this->_host)){
if (in_array($this->_host[$service], $this->get_attr("host"))){
return True;
}
return False;
}elseif (array_key_exists($service, $this->_member)){
$l=new LilikGroup($this->_member[$service]);
return $l->is_user($this);
}else{
throw new Exception("Service not found");
}
}
function get_attributes(){
$attributes=array();
foreach ($this->adapters as $adapter)
$attributes+= $adapter->get_attributes();
return $attributes;
}
function get_services(){
$services=array();
foreach (array($this->_flag, $this->_host, $this->_member) as $k)
foreach ($k as $x => $value)
$services[]= $x;
return $services;
}
function get_enabled_services(){
$enabled_services=array();
foreach ($this->get_services() as $service){
if ($this->status($service)){
$enabled_services[]=$service;
}
}
return $enabled_services;
}
function sanitize(){
$tmp=explode(' ', $this->get_attr('cn'), 2);
if (count($tmp) > 1){
$name=$tmp[0];
$surname=$tmp[1];
}else{
$name=$this->get_attr('cn');
$surname='';
}
return $this->create($name, $surname, $this->get_attr('userPassword'));
}
function create($name, $surname, $password){
$result=True;
foreach ($this->adapters as $adapter){
if (!$adapter->exist($this->la, $this->id)){
if (!$adapter->create($this->la, $this->id, $name, $surname, $password)){
$result=False;
}
}
}
return $result;
}
}

+ 132
- 0
user.php View File

@ -0,0 +1,132 @@
<?
session_start();
$response=array();
if (isset($_POST['username'])) {
$_SESSION['username']=$_POST['username'];
$_SESSION['password']=$_POST['password'];
}
if (!isset($_SESSION['username'])) {
$response['error']='Credenziali non valide';
echo json_encode($response);
exit;
}
if (isset($_GET['logout'])){
session_destroy();
$response['info']='Logout effettuato';
$response['loggedin']=False;
echo json_encode($response);
exit;
}
include 'config.php';
include 'lilikuser.php';
$u=new LilikUser($_SESSION['username']);
#bind ldap or exit
$loggedin=$u->check_password($_SESSION['password']);
$response['loggedin']=$loggedin;
if (!$loggedin){
$response['error']='Credenziali non valide';
echo json_encode($response);
exit;
}
$admin=$u->is_admin();
$response['admin']=$admin;
$user=$_SESSION['username'];
if (isset($_GET['user']) and $_GET['user']!=$_SESSION['username']){
if ($admin){
$user=$_GET['user'];
}else{
$response['error']='Permessi non sufficienti per visualizzare l\'utente';
echo json_encode($response);
exit;
}
}
if (isset($_POST['new_user'])){
if($admin){
$u3=new LilikUser($user);
$u3->create($_POST['new_name'],$_POST['new_surname'],$_POST['new_passwd']);
$response['success']='Utente creato <a href="/users/'.$user.'/">vai alla pagina</a>';
echo json_encode($response);
exit;
}else{
$response['error']='Permessi non sufficienti per creare l\'utente';
}
}
$u2=new LilikUser($user);
if (!$u2->exist()){
$response['error']='Utente inesistente';
$response['exist']=false;
echo json_encode($response);
exit;
}
$response['avaible_services']=$u2->get_services();
if (isset($_POST['new_password'])) {
if(!$admin and !$u2->check_password($_POST['old_password'])){
$response['error']='Password errata';
}else{
if ($_POST['new_password']==$_POST['new_password2'] and $_POST['new_password']!=''){
$u2->set_attr('userPassword', $_POST['new_password']);
$response['edit']=True;
if ($user==$_SESSION['username']){
$_SESSION['password']=$_POST['new_password'];
}
}else{
$response['error']='La password non coincide';
}
}
}
if (isset($_POST['services'])) {
if($admin){
$response['edit']=True;
$actual=$u2->get_enabled_services();
$to_disable=array_diff($actual, $_POST['services']);
$to_enable=array_diff($_POST['services'], $actual);
foreach (["enable"=>$to_enable, "disable"=>$to_disable] as $function=>$services){
foreach ($services as $service){
try {
$u2->$function($service);
} catch (Exception $e) {
if ($e->getMessage()=="Service not found"){
$response['error']="Servizio sconosciuto: $service";
}else{
throw $e;
}
}
}
}
}else{
$response['error']='Permessi non sufficienti';
}
}
if (isset($_POST['cn'])) {
if($admin){
$response['edit']=True;
if ($u2->get_attr('cn')!=$_POST['cn']){
$u2->set_attr('cn', $_POST['cn']);
}
}else{
$response['error']='Permessi non sufficienti';
}
}
if ($response['edit']==True and !isset($response['error'])){
$response['success']='Salvataggio effettuato';
}
$response['services']=$u2->get_enabled_services();
$response['username']=$user;
$response['cn']=$u2->get_attr('cn');
echo json_encode($response);
?>

Loading…
Cancel
Save