Beispiel #1
0
bool y::ldap::account::isStaff() const {
  if(_role().get() == ROLE::TEACHER ) return true;
  if(_role().get() == ROLE::ADMIN   ) return true;
  if(_role().get() == ROLE::DIRECTOR) return true;
  if(_role().get() == ROLE::SUPPORT ) return true;
  return false;
}
Beispiel #2
0
bool y::ldap::account::load(const data& d) {
  _uidNumber.readFromLdap(d);
  if(_uidNumber().get() == 0) {
    return false;
  }
  
  for(int i = 0; i < d.elms("objectClass"); i++) {
    if(d.getValue("objectClass", i) == "schoolPerson") {
      _hasSchoolPersonClass = true;
      break;
    } 
  }
  
  _uid           .readFromLdap(d);
  _dn            .readFromLdap(d);
  _cn            .readFromLdap(d);
  _sn            .readFromLdap(d);
  _fullName      .readFromLdap(d);
  _homeDir       .readFromLdap(d);
  _wisaID        .readFromLdap(d);
  _wisaName      .readFromLdap(d);
  _mail          .readFromLdap(d);
  _mailAlias     .readFromLdap(d);
  _birthDay      .readFromLdap(d);
  _password      .readFromLdap(d);
  _role          .readFromLdap(d);
  _groupID       .readFromLdap(d);
  _schoolClass   .readFromLdap(d);
  _classChange   .readFromLdap(d);
  _birthPlace    .readFromLdap(d);
  _gender        .readFromLdap(d);
  _adminGroup    .readFromLdap(d);
  _registerID    .readFromLdap(d);
  _nationality   .readFromLdap(d);
  _stemID        .readFromLdap(d);
  _schoolID      .readFromLdap(d);
  _houseNumber   .readFromLdap(d);
  _houseNumberAdd.readFromLdap(d);
  _city          .readFromLdap(d);
  _postalCode    .readFromLdap(d);
  _street        .readFromLdap(d);
  _country       .readFromLdap(d);
  
  if(_role().get() == ROLE::NONE) {
    y::utils::Log().add("a user exists without a valid schoolrole: ");
    y::utils::Log().add(_dn().get());
  }
  if(d.getValue("krbName" ).size()) _hasKrbName  = true;

  TODO(this can be removed later)
  if(_fullName().get() == "System User") {
    string fn = _cn().get();
    fn += " ";
    fn += _sn().get();
    _fullName(FULL_NAME(fn), false);
  }

  _new = false;
  return !_new;
}
Beispiel #3
0
void init_city_roles()
{
  for (int i = 0; i < CITY_ROLE_MAX; i++) {
    City_role_data[i] = new City_role_datum;
  }
  int cur_id = 0;

  _role(CITY_ROLE_NULL);
    _name("none");
    _food_percentage(100);

  _role(CITY_ROLE_FARMING);
    _name("farming");
    _skill(SKILL_FARMING, 3);
    _food_percentage(125);

  _role(CITY_ROLE_HUNTING);
    _name("hunting");
    _skill(SKILL_HUNTING, 2); // We're forgiving!
    _food_percentage(120);

  _role(CITY_ROLE_LIVESTOCK);
    _name("livestock");
    _skill(SKILL_LIVESTOCK, 3);
    _food_percentage(120);

  _role(CITY_ROLE_MINING);
    _name("mining");
    _skill(SKILL_MINING, 3);
    _resource_export(RES_STONE);
    _mineral_export(MINERAL_TIN);
    _mineral_export(MINERAL_COPPER);
    _mineral_export(MINERAL_IRON);
    _mineral_export(MINERAL_COAL);

  _role(CITY_ROLE_LOGGING);
    _name("logging");
    _skill(SKILL_FORESTRY, 2);
    _resource_export(RES_WOOD);
}
Beispiel #4
0
bool y::ldap::account::isStudent() const {
  if(_role().get() == ROLE::STUDENT) return true;
  return false;
}
Beispiel #5
0
y::ldap::account & y::ldap::account::role(const ROLE& value) {
  _role(value);
  return *this;
}
Beispiel #6
0
const ROLE & y::ldap::account::role() const {
  return _role();
}
Beispiel #7
0
bool y::ldap::account::save() {
  
  // remove user if needed
  if(flaggedForRemoval() && !dn().get().empty()) {
    if(isStudent()) {
      y::Smartschool().unregisterStudent(*this);
    } else {
      y::Smartschool().deleteUser(*this);
    }    
    y::samba::delUser(*this);
    
    if(isStudent())
    
    return true;
  }
  
  // accounts without DN are not valid
  if(dn().get().empty()) {
    flagForRemoval();
    return false; 
  }
  
  
  // else apply changes
  dataset values(server);
  
  // on first save, some new entries have to be added
  if(!_hasKrbName) {
    // add kerberos objectClass
    data & d = values.New(ADD);
    d.add("type", "objectClass");
    d.add("values", "kerberosSecurityObject");
    
    // add kerberos name (for short mail)
    string krbName(_uid().get());
    krbName += "@";
    krbName += utils::Config().getDomain();
    data & d1 = values.New(ADD);
    d1.add("type", "krbName");
    d1.add("values", krbName);
    _hasKrbName = true;
  }
  
  if(!_hasSchoolPersonClass) {
    data & d = values.New(ADD);
    d.add("type", "objectClass");
    d.add("values", "schoolPerson");
    _hasSchoolPersonClass = true;
  }
  
  _cn.saveToLdap(values);
  _sn.saveToLdap(values);
  _fullName.saveToLdap(values);
  _homeDir.saveToLdap(values);
  _wisaID.saveToLdap(values);
  _wisaName.saveToLdap(values);
  _mail.saveToLdap(values);
  _mailAlias.saveToLdap(values);
  _birthDay.saveToLdap(values);
  _role.saveToLdap(values);
  _groupID.saveToLdap(values);
  _schoolClass.saveToLdap(values);
  _classChange.saveToLdap(values);
  _birthPlace.saveToLdap(values);
  _gender.saveToLdap(values);
  _adminGroup.saveToLdap(values);
  _registerID.saveToLdap(values);
  _nationality.saveToLdap(values);
  _stemID.saveToLdap(values);
  _schoolID.saveToLdap(values);
  _houseNumber.saveToLdap(values);
  _houseNumberAdd.saveToLdap(values);
  _city.saveToLdap(values);
  _postalCode.saveToLdap(values);
  _street.saveToLdap(values);
  _country.saveToLdap(values);
  
  if(_password.changed()) {
    _password.saveToLdap(values);
    
#ifndef DEBUG
    samba::changePassword(_uid().get(), _passwordClearText);
#endif
      
  }
  
  if(values.elms()) {
    bool roleChanged = _role.changed();
    bool classChanged = _schoolClass.changed();
    
    server->modify(_dn(), values);
    
    if(isStaff() || isStudent()) {
      y::Smartschool().saveUser(*this);
      string message("Updating smartschool for user ");
      message += _fullName().get();
      y::utils::Log().add(message);

      // add user to group
      if(isStudent() && classChanged) {
        // this is a student
        y::Smartschool().moveUserToClass(*this, _schoolClass().get());
      } else  if(roleChanged && _role().get() == ROLE::DIRECTOR) {
        y::Smartschool().addUserToGroup(*this, "Directie", false);
      } else if (roleChanged && _role().get() == ROLE::SUPPORT) {
        y::Smartschool().addUserToGroup(*this, "Secretariaat", false);
      } else if (roleChanged && isStaff()) {
        y::Smartschool().addUserToGroup(*this, "Leerkrachten", true);
      }   
    }   
    return true;
  }
  
  if(!_ssPassword.empty()) {
    y::Smartschool().savePassword(*this);
    return true;
  }
  
  return false;
}