package io.lumify.palantir.mr.mappers; import io.lumify.core.config.Configuration; import io.lumify.core.model.properties.LumifyProperties; import io.lumify.core.model.user.UserLumifyProperties; import io.lumify.core.model.user.UserPasswordUtil; import io.lumify.core.model.user.UserRepository; import io.lumify.palantir.model.PtUser; import io.lumify.securegraph.model.user.SecureGraphUserRepository; import io.lumify.web.clientapi.model.Privilege; import io.lumify.web.clientapi.model.UserStatus; import org.apache.hadoop.io.LongWritable; import org.securegraph.VertexBuilder; import org.securegraph.Visibility; import java.io.IOException; import java.util.Collection; import java.util.Date; public class PtUserMapper extends PalantirMapperBase<LongWritable, PtUser> { private String privileges; @Override protected void setup(Context context) throws IOException, InterruptedException { super.setup(context); Collection<Privilege> defaultPrivileges = Privilege.stringToPrivileges(context.getConfiguration().get(Configuration.DEFAULT_PRIVILEGES, "")); privileges = Privilege.toString(defaultPrivileges); } @Override protected void safeMap(LongWritable key, PtUser ptUser, Context context) throws Exception { context.setStatus(key.toString()); String userPrivileges = privileges; if (ptUser.isDeleted()) { userPrivileges = ""; } Visibility visibility = SecureGraphUserRepository.VISIBILITY.getVisibility(); byte[] salt = UserPasswordUtil.getSalt(); byte[] passwordHash = UserPasswordUtil.hashPassword(UserRepository.createRandomPassword(), salt); VertexBuilder m = prepareVertex(getUserVertexId(ptUser), visibility); LumifyProperties.CONCEPT_TYPE.setProperty(m, SecureGraphUserRepository.USER_CONCEPT_IRI, visibility); UserLumifyProperties.USERNAME.setProperty(m, ptUser.getLogin(), visibility); UserLumifyProperties.DISPLAY_NAME.setProperty(m, getDisplayName(ptUser), visibility); UserLumifyProperties.CREATE_DATE.setProperty(m, new Date(ptUser.getTimeCreated()), visibility); UserLumifyProperties.PASSWORD_SALT.setProperty(m, salt, visibility); UserLumifyProperties.PASSWORD_HASH.setProperty(m, passwordHash, visibility); UserLumifyProperties.STATUS.setProperty(m, UserStatus.OFFLINE.toString(), visibility); UserLumifyProperties.AUTHORIZATIONS.setProperty(m, "", visibility); UserLumifyProperties.PRIVILEGES.setProperty(m, userPrivileges, visibility); if (ptUser.getEmail() != null) { UserLumifyProperties.EMAIL_ADDRESS.setProperty(m, ptUser.getEmail(), visibility); } m.save(getAuthorizations()); } public static String getUserVertexId(PtUser ptUser) { return getUserVertexId(ptUser.getId()); } public static String getUserVertexId(long userId) { return ID_PREFIX + "USER_" + userId; } private String getDisplayName(PtUser ptUser) { return ptUser.getFirstName() + " " + ptUser.getLastName(); } }