@Override public Import getImport(final UUID applicationId, final UUID importId) { Preconditions.checkNotNull(applicationId, "applicationId must be specified"); Preconditions.checkNotNull(importId, "importId must be specified"); try { final EntityManager rootEm = emf.getEntityManager(emf.getManagementAppId()); final Entity appInfo = getApplicationInfoEntity(rootEm, applicationId); final Import importEntity = rootEm.get(importId, Import.class); // check if it's on the path if (!rootEm.isConnectionMember(appInfo, APP_IMPORT_CONNECTION, importEntity)) { return null; } return importEntity; } catch (Exception e) { throw new RuntimeException("Unable to get import entity", e); } }
@Override public FileImport getFileImport(final UUID applicationId, final UUID importId, final UUID fileImportId) { try { final EntityManager rootEm = emf.getEntityManager(emf.getManagementAppId()); final Import importEntity = getImport(applicationId, importId); if (importEntity == null) { throw new EntityNotFoundException("Import not found with id " + importId); } final FileImport fileImport = rootEm.get(importId, FileImport.class); // check if it's on the path if (!rootEm.isConnectionMember(importEntity, APP_IMPORT_CONNECTION, fileImport)) { return null; } return fileImport; } catch (Exception e) { throw new RuntimeException("Unable to load file import", e); } }
@Override public FailedImportEntity getFailedImportEntity(final UUID applicationId, final UUID importId, final UUID fileImportId, final UUID failedImportId) { try { final EntityManager rootEm = emf.getEntityManager(emf.getManagementAppId()); final FileImport importEntity = getFileImport(applicationId, importId, fileImportId); if (importEntity == null) { throw new EntityNotFoundException("Import not found with id " + importId); } final FailedImportEntity fileImport = rootEm.get(importId, FailedImportEntity.class); // check if it's on the path if (!rootEm.isConnectionMember(importEntity, FileImportTracker.ERRORS_CONNECTION_NAME, fileImport)) { return null; } return fileImport; } catch (Exception e) { throw new RuntimeException("Unable to load file import", e); } }
@Override public ServiceResults getItemByName( ServiceContext context, String name ) throws Exception { ServiceResults results = getItemsByQuery( context, context.getQuery() ); if ( results == null || results.size() == 0 ) { throw new ServiceResourceNotFoundException( context ); } if ( results.size() == 1 && !em.isConnectionMember( context.getOwner(), context.getCollectionName(), results.getEntity() ) ) { throw new ServiceResourceNotFoundException( context ); } return results; }
@Override public ServiceResults getItemById( ServiceContext context, UUID id ) throws Exception { checkPermissionsForEntity( context, id ); EntityRef entity = null; if ( !context.moreParameters() ) { entity = em.get( id ); entity = importEntity( context, ( Entity ) entity ); } else { entity = em.get( id ); } if ( entity == null ) { throw new ServiceResourceNotFoundException( context ); } checkPermissionsForEntity( context, entity ); // the context of the entity they're trying to load isn't owned by the owner // in the path, don't return it if ( !em.isConnectionMember( context.getOwner(), context.getCollectionName(), entity ) ) { logger.info( "Someone tried to GET entity {} they don't own. Entity id {} with owner {}", getEntityType(), id, context.getOwner() ); throw new ServiceResourceNotFoundException( context ); } // TODO check that entity is in fact connected List<ServiceRequest> nextRequests = context.getNextServiceRequests( entity ); return new ServiceResults( this, context, Type.CONNECTION, Results.fromRef( entity ), null, nextRequests ); }
assertTrue( em.isConnectionMember( firstUserEntity, "likes", fourpeaks ) ); assertFalse( em.isConnectionMember( firstUserEntity, "likes", arrogantbutcher ) ); assertTrue( em.isConnectionMember( secondUserEntity, "likes", arrogantbutcher ) ); assertFalse( em.isConnectionMember( secondUserEntity, "likes", fourpeaks ) );