Search in sources :

Example 1 with User

use of cz.metacentrum.perun.core.api.User in project perun by CESNET.

the class MembersManagerEntry method createSpecificMember.

public Member createSpecificMember(PerunSession sess, Vo vo, Candidate candidate, List<User> specificUserOwners, SpecificUserType specificUserType, List<Group> groups) throws InternalErrorException, WrongAttributeValueException, WrongReferenceAttributeValueException, AlreadyMemberException, VoNotExistsException, PrivilegeException, UserNotExistsException, ExtendMembershipException, GroupNotExistsException, GroupOperationsException {
    Utils.checkPerunSession(sess);
    Utils.notNull(specificUserType, "specificUserType");
    //normal type is not allowed when creating specific member
    if (specificUserType.equals(SpecificUserType.NORMAL))
        throw new InternalErrorException("Type of specific user must be defined.");
    // if any group is not from the vo, throw an exception
    if (groups != null) {
        for (Group group : groups) {
            perunBl.getGroupsManagerBl().checkGroupExists(sess, group);
            if (group.getVoId() != vo.getId())
                throw new InternalErrorException("Group " + group + " is not from the vo " + vo + " where candidate " + candidate + " should be added.");
        }
    }
    // Authorization
    if (!AuthzResolver.isAuthorized(sess, Role.VOADMIN, vo)) {
        throw new PrivilegeException(sess, "createSpecificMember (Specific User) - from candidate");
    }
    Utils.notNull(candidate, "candidate");
    getPerunBl().getVosManagerBl().checkVoExists(sess, vo);
    if (specificUserOwners.isEmpty())
        throw new InternalErrorException("List of specificUserOwners of " + candidate + " can't be empty.");
    for (User u : specificUserOwners) {
        getPerunBl().getUsersManagerBl().checkUserExists(sess, u);
    }
    return getMembersManagerBl().createSpecificMember(sess, vo, candidate, specificUserOwners, specificUserType, groups);
}
Also used : Group(cz.metacentrum.perun.core.api.Group) User(cz.metacentrum.perun.core.api.User) PrivilegeException(cz.metacentrum.perun.core.api.exceptions.PrivilegeException) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException)

Example 2 with User

use of cz.metacentrum.perun.core.api.User in project perun by CESNET.

the class SearcherImpl method getUsers.

public List<User> getUsers(PerunSession sess, Map<Attribute, String> attributesWithSearchingValues) throws InternalErrorException {
    StringBuilder query = new StringBuilder();
    query.append("select distinct " + UsersManagerImpl.userMappingSelectQuery + " from users ");
    List<String> whereClauses = new ArrayList<String>();
    MapSqlParameterSource parameters = new MapSqlParameterSource();
    int counter = 0;
    for (Attribute key : attributesWithSearchingValues.keySet()) {
        counter++;
        String value = attributesWithSearchingValues.get(key);
        query.append("left join user_attr_values val" + counter + " ");
        query.append("on val" + counter + ".user_id=users.id and val" + counter + ".attr_id=" + key.getId() + " ");
        query.append("left join attr_names nam" + counter + " on val" + counter + ".attr_id=nam" + counter + ".id ");
        if (value == null || value.isEmpty()) {
            if (key.getType().equals(LinkedHashMap.class.getName()) || key.getType().equals(BeansUtils.largeStringClassName) || key.getType().equals(BeansUtils.largeArrayListClassName)) {
                whereClauses.add("val" + counter + ".attr_value_text IS NULL ");
            } else {
                whereClauses.add("val" + counter + ".attr_value IS NULL ");
            }
        } else {
            if (key.getType().equals(Integer.class.getName())) {
                key.setValue(Integer.valueOf(value));
                whereClauses.add("val" + counter + ".attr_value=:v" + counter + " ");
                whereClauses.add("nam" + counter + ".type=:n" + counter + " ");
                parameters.addValue("n" + counter, Integer.class.getName().toString());
                parameters.addValue("v" + counter, BeansUtils.attributeValueToString(key));
            } else if (key.getType().equals(String.class.getName())) {
                key.setValue(value);
                whereClauses.add("lower(" + Compatibility.convertToAscii("val" + counter + ".attr_value") + ")=lower(" + Compatibility.convertToAscii(":v" + counter) + ") ");
                whereClauses.add("nam" + counter + ".type=:n" + counter + " ");
                parameters.addValue("n" + counter, String.class.getName().toString());
                parameters.addValue("v" + counter, BeansUtils.attributeValueToString(key));
            } else if (key.getType().equals(BeansUtils.largeStringClassName)) {
                key.setValue(value);
                whereClauses.add("lower(" + Compatibility.convertToAscii("val" + counter + ".attr_value_text") + ") LIKE lower(" + Compatibility.convertToAscii(":v" + counter) + ") ");
                whereClauses.add("nam" + counter + ".type=:n" + counter + " ");
                parameters.addValue("n" + counter, BeansUtils.largeStringClassName);
                parameters.addValue("v" + counter, BeansUtils.attributeValueToString(key));
            } else if (key.getType().equals(Boolean.class.getName())) {
                key.setValue(value);
                whereClauses.add("lower(" + Compatibility.convertToAscii("val" + counter + ".attr_value") + ")=lower(" + Compatibility.convertToAscii(":v" + counter) + ") ");
                whereClauses.add("nam" + counter + ".type=:n" + counter + " ");
                parameters.addValue("n" + counter, Boolean.class.getName().toString());
                parameters.addValue("v" + counter, BeansUtils.attributeValueToString(key));
            } else if (key.getType().equals(ArrayList.class.getName())) {
                List<String> list = new ArrayList<String>();
                list.add(value);
                key.setValue(list);
                whereClauses.add("val" + counter + ".attr_value LIKE :v" + counter + " ");
                whereClauses.add("nam" + counter + ".type=:n" + counter + " ");
                parameters.addValue("n" + counter, ArrayList.class.getName().toString());
                parameters.addValue("v" + counter, '%' + BeansUtils.attributeValueToString(key).substring(0, BeansUtils.attributeValueToString(key).length() - 1) + '%');
            } else if (key.getType().equals(BeansUtils.largeArrayListClassName)) {
                List<String> list = new ArrayList<String>();
                list.add(value);
                key.setValue(list);
                whereClauses.add("val" + counter + ".attr_value_text LIKE :v" + counter + " ");
                whereClauses.add("nam" + counter + ".type=:n" + counter + " ");
                parameters.addValue("n" + counter, BeansUtils.largeArrayListClassName);
                parameters.addValue("v" + counter, '%' + BeansUtils.attributeValueToString(key).substring(0, BeansUtils.attributeValueToString(key).length() - 1) + '%');
            } else if (key.getType().equals(LinkedHashMap.class.getName())) {
                String[] splitMapItem = value.split("=");
                if (splitMapItem.length == 0)
                    throw new InternalErrorException("Value can't be split by char '='.");
                String splitKey = splitMapItem[0];
                StringBuilder splitValue = new StringBuilder();
                if (splitMapItem.length > 1) {
                    for (int i = 1; i < splitMapItem.length; i++) {
                        if (i != 1)
                            splitValue.append('=');
                        splitValue.append(splitMapItem[i]);
                    }
                }
                Map<String, String> map = new LinkedHashMap<String, String>();
                map.put(splitKey, splitValue.length() == 0 ? null : splitValue.toString());
                key.setValue(map);
                whereClauses.add("val" + counter + ".attr_value_text LIKE :v" + counter + " or val" + counter + ".attr_value_text LIKE :vv" + counter + " ");
                whereClauses.add("nam" + counter + ".type=:n" + counter + " ");
                parameters.addValue("n" + counter, LinkedHashMap.class.getName().toString());
                parameters.addValue("v" + counter, BeansUtils.attributeValueToString(key) + '%');
                parameters.addValue("vv" + counter, "%," + BeansUtils.attributeValueToString(key) + '%');
            } else {
                throw new InternalErrorException(key + " is not type of integer, string, boolean, array or hashmap.");
            }
        }
    }
    //Add Where clauses at end of sql query
    boolean first = true;
    for (String whereClause : whereClauses) {
        if (first) {
            query.append("where ");
            query.append(whereClause);
            first = false;
        } else {
            query.append("and ");
            query.append(whereClause);
        }
    }
    try {
        return jdbc.query(query.toString(), parameters, UsersManagerImpl.USER_MAPPER);
    } catch (EmptyResultDataAccessException e) {
        return new ArrayList<User>();
    } catch (RuntimeException e) {
        throw new InternalErrorException(e);
    }
}
Also used : User(cz.metacentrum.perun.core.api.User) Attribute(cz.metacentrum.perun.core.api.Attribute) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) MapSqlParameterSource(org.springframework.jdbc.core.namedparam.MapSqlParameterSource) EmptyResultDataAccessException(org.springframework.dao.EmptyResultDataAccessException)

Example 3 with User

use of cz.metacentrum.perun.core.api.User in project perun by CESNET.

the class SecurityTeamsManagerImpl method getBlacklist.

@Override
public List<User> getBlacklist(PerunSession sess, List<SecurityTeam> securityTeams) throws InternalErrorException {
    try {
        Set<User> blacklisted = new HashSet<>();
        List<User> list;
        for (SecurityTeam st : securityTeams) {
            list = jdbc.query("select " + UsersManagerImpl.userMappingSelectQuery + " from users inner join (" + "select blacklists.user_id from blacklists where security_team_id=?" + ") " + Compatibility.getAsAlias("blacklisted_ids") + " ON users.id=blacklisted_ids.user_id", UsersManagerImpl.USER_MAPPER, st.getId());
            blacklisted.addAll(list);
        }
        return new ArrayList<>(blacklisted);
    } catch (RuntimeException ex) {
        throw new InternalErrorException(ex);
    }
}
Also used : User(cz.metacentrum.perun.core.api.User) ArrayList(java.util.ArrayList) SecurityTeam(cz.metacentrum.perun.core.api.SecurityTeam) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) HashSet(java.util.HashSet)

Example 4 with User

use of cz.metacentrum.perun.core.api.User in project perun by CESNET.

the class VosManagerImpl method getAdmins.

public List<User> getAdmins(PerunSession sess, Vo vo, Role role) throws InternalErrorException {
    try {
        Set<User> setOfAdmins = new HashSet<User>();
        // direct admins
        setOfAdmins.addAll(jdbc.query("select " + UsersManagerImpl.userMappingSelectQuery + " from authz join users on authz.user_id=users.id " + "where authz.vo_id=? and authz.role_id=(select id from roles where name=?)", UsersManagerImpl.USER_MAPPER, vo.getId(), role.getRoleName()));
        // admins through a group
        List<Group> listOfGroupAdmins = getAdminGroups(sess, vo, role);
        for (Group group : listOfGroupAdmins) {
            setOfAdmins.addAll(jdbc.query("select " + UsersManagerImpl.userMappingSelectQuery + " from users join members on users.id=members.user_id " + "join groups_members on groups_members.member_id=members.id where groups_members.group_id=?", UsersManagerImpl.USER_MAPPER, group.getId()));
        }
        return new ArrayList(setOfAdmins);
    } catch (EmptyResultDataAccessException ex) {
        return new ArrayList<User>();
    } catch (RuntimeException ex) {
        throw new InternalErrorException(ex);
    }
}
Also used : Group(cz.metacentrum.perun.core.api.Group) User(cz.metacentrum.perun.core.api.User) ArrayList(java.util.ArrayList) EmptyResultDataAccessException(org.springframework.dao.EmptyResultDataAccessException) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) HashSet(java.util.HashSet)

Example 5 with User

use of cz.metacentrum.perun.core.api.User in project perun by CESNET.

the class urn_perun_member_attribute_def_def_mail method changedAttributeHook.

@Override
public void changedAttributeHook(PerunSessionImpl session, Member member, Attribute attribute) throws InternalErrorException, WrongReferenceAttributeValueException {
    User user = session.getPerunBl().getUsersManagerBl().getUserByMember(session, member);
    if (attribute.getValue() != null) {
        Attribute userPreferredMail = null;
        try {
            userPreferredMail = session.getPerunBl().getAttributesManagerBl().getAttribute(session, user, A_U_preferredMail);
            if (userPreferredMail.getValue() == null) {
                userPreferredMail.setValue(attribute.getValue());
                session.getPerunBl().getAttributesManagerBl().setAttribute(session, user, userPreferredMail);
            }
        } catch (WrongAttributeAssignmentException ex) {
            throw new InternalErrorException(ex);
        } catch (AttributeNotExistsException ex) {
            throw new ConsistencyErrorException(ex);
        } catch (WrongAttributeValueException ex) {
            throw new WrongReferenceAttributeValueException(attribute, userPreferredMail, "Mismatch in checking of member mail and user preferredMail (different checking rules).", ex);
        }
    }
/* This funcionality is not needed now
		//if this mail has been removed, check user preffered mail if the value is still correct, if not set a new one or remove it if no other exists
		User user = session.getPerunBl().getUsersManagerBl().getUserByMember(session, member);
		try {
		Attribute userPreferredMail = session.getPerunBl().getAttributesManagerBl().getAttribute(session, user, A_U_preferredMail);
		//TODO: if userPreferredMail is null when memberMail has been removed, its error in consistency, but exception is not solution, need to log it

		//If member mail has been removed
		if(attribute.getValue() == null) {
		try {
		session.getPerunBl().getAttributesManagerBl().checkAttributeValue(session, user, userPreferredMail);
		} catch (WrongAttributeValueException ex) {
		List<Member> membersOfUser = session.getPerunBl().getMembersManagerBl().getMembersByUser(session, user);
		for(Member m: membersOfUser) {
		Attribute memberMail = session.getPerunBl().getAttributesManagerBl().getAttribute(session, member, A_M_mail);
		if(memberMail.getValue() != null) {
		userPreferredMail.setValue(memberMail.getValue());
		session.getPerunBl().getAttributesManagerBl().setAttribute(session, user, userPreferredMail);
		break;
		}
		}
		userPreferredMail.setValue(null);
		session.getPerunBl().getAttributesManagerBl().setAttribute(session, user, userPreferredMail);

		}
		//if member mail was new set or set to another value
		} else {
		//if userPreferredMail is null, so can save this new value there
		if(userPreferredMail.getValue() == null) {
		userPreferredMail.setValue(attribute.getValue());
		session.getPerunBl().getAttributesManagerBl().setAttribute(session, user, userPreferredMail);

		//if userPreferredMail is not null, need to try if the old value is still correct, if not, save new value there
		} else {
		try {
		session.getPerunBl().getAttributesManagerBl().checkAttributeValue(session, user, userPreferredMail);
		} catch (WrongAttributeValueException ex) {
		//old value of userPreferredMail is not correct now, save the new value from member mail there
		userPreferredMail.setValue(attribute.getValue());
		session.getPerunBl().getAttributesManagerBl().setAttribute(session, user, attribute);
		}
		}
		}
		} catch(WrongAttributeAssignmentException ex) {
		throw new InternalErrorException(ex);
		} catch(AttributeNotExistsException ex) {
		throw new ConsistencyErrorException(ex);
		} catch(WrongAttributeValueException ex) {
		throw new WrongReferenceAttributeValueException("There is mismatch between possible format of member mail and userPreferredMail", ex);
		}*/
}
Also used : ConsistencyErrorException(cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException) User(cz.metacentrum.perun.core.api.User) Attribute(cz.metacentrum.perun.core.api.Attribute) WrongAttributeAssignmentException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException) WrongReferenceAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException) AttributeNotExistsException(cz.metacentrum.perun.core.api.exceptions.AttributeNotExistsException) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) WrongAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException)

Aggregations

User (cz.metacentrum.perun.core.api.User)332 Test (org.junit.Test)192 AbstractPerunIntegrationTest (cz.metacentrum.perun.core.AbstractPerunIntegrationTest)168 Attribute (cz.metacentrum.perun.core.api.Attribute)131 Member (cz.metacentrum.perun.core.api.Member)87 Facility (cz.metacentrum.perun.core.api.Facility)81 RichUser (cz.metacentrum.perun.core.api.RichUser)78 ArrayList (java.util.ArrayList)62 RichAttribute (cz.metacentrum.perun.core.api.RichAttribute)56 Resource (cz.metacentrum.perun.core.api.Resource)55 Group (cz.metacentrum.perun.core.api.Group)46 InternalErrorException (cz.metacentrum.perun.core.api.exceptions.InternalErrorException)38 Vo (cz.metacentrum.perun.core.api.Vo)32 WrongAttributeAssignmentException (cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException)31 BanOnFacility (cz.metacentrum.perun.core.api.BanOnFacility)27 AttributeDefinition (cz.metacentrum.perun.core.api.AttributeDefinition)24 PerunSession (cz.metacentrum.perun.core.api.PerunSession)22 ContactGroup (cz.metacentrum.perun.core.api.ContactGroup)20 ConsistencyErrorException (cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException)18 AttributeNotExistsException (cz.metacentrum.perun.core.api.exceptions.AttributeNotExistsException)17