use of io.milton.http.exceptions.NotAuthorizedException in project lobcder by skoulouzis.
the class WebDataResource method getProperty.
@Override
public Object getProperty(QName qname) {
try {
log.log(Level.FINE, "qname: {0}", qname);
if (qname.equals(Constants.DATA_DIST_PROP_NAME)) {
try (Connection connection = getCatalogue().getConnection()) {
try {
connection.commit();
StringBuilder sb = new StringBuilder();
if (getLogicalData().isFolder()) {
List<? extends WebDataResource> children = (List<? extends WebDataResource>) ((WebDataDirResource) (this)).getChildren();
sb.append("[");
for (WebDataResource r : children) {
if (r instanceof WebDataFileResource) {
sb.append("'").append(r.getName()).append("' : [");
Collection<PDRIDescr> pdris = getCatalogue().getPdriDescrByGroupId(r.getLogicalData().getPdriGroupId(), connection);
for (PDRIDescr p : pdris) {
sb.append("'").append(p.getResourceUrl()).append("',");
}
sb.replace(sb.lastIndexOf(","), sb.length(), "").append("],");
}
}
} else {
Collection<PDRIDescr> pdris = getCatalogue().getPdriDescrByGroupId(getLogicalData().getPdriGroupId(), connection);
sb.append("[");
for (PDRIDescr p : pdris) {
sb.append("'").append(p.getResourceUrl()).append("'");
sb.append(",");
}
}
if (sb.toString().contains(",")) {
sb.replace(sb.lastIndexOf(","), sb.length(), "");
}
sb.append("]");
return sb.toString();
} catch (NotAuthorizedException | SQLException e) {
connection.rollback();
}
}
} else if (qname.equals(Constants.DRI_SUPERVISED_PROP_NAME)) {
return String.valueOf(getLogicalData().getSupervised());
} else if (qname.equals(Constants.DRI_CHECKSUM_PROP_NAME)) {
return String.valueOf(getLogicalData().getChecksum());
} else if (qname.equals(Constants.DRI_LAST_VALIDATION_DATE_PROP_NAME)) {
return String.valueOf(getLogicalData().getLastValidationDate());
} else if (qname.equals(Constants.DRI_STATUS_PROP_NANE)) {
return getLogicalData().getStatus();
} else if (qname.equals(Constants.DAV_CURRENT_USER_PRIVILAGE_SET_PROP_NAME)) {
// List<Priviledge> list = getPriviledges(null);
return "";
} else if (qname.equals(Constants.DAV_ACL_PROP_NAME)) {
// List<Priviledge> list = getPriviledges(null);
return "";
} else if (qname.equals(Constants.DESCRIPTION_PROP_NAME)) {
return getLogicalData().getDescription();
} else if (qname.equals(Constants.DATA_LOC_PREF_NAME)) {
return getLogicalData().getDataLocationPreference();
} else if (qname.equals(Constants.ENCRYPT_PROP_NAME)) {
try (Connection connection = getCatalogue().getConnection()) {
StringBuilder sb = new StringBuilder();
if (getLogicalData().isFolder()) {
List<? extends WebDataResource> children = (List<? extends WebDataResource>) ((WebDataDirResource) (this)).getChildren();
sb.append("[");
for (WebDataResource r : children) {
if (r instanceof WebDataFileResource) {
sb.append("'").append(r.getName()).append("' : [");
Collection<PDRIDescr> pdris = getCatalogue().getPdriDescrByGroupId(r.getLogicalData().getPdriGroupId(), connection);
for (PDRIDescr p : pdris) {
sb.append("[");
sb.append(p.getResourceUrl());
sb.append(p.getEncrypt());
sb.append("],");
}
sb.replace(sb.lastIndexOf(","), sb.length(), "").append("],");
}
}
} else {
Collection<PDRIDescr> pdris = getCatalogue().getPdriDescrByGroupId(getLogicalData().getPdriGroupId(), connection);
sb.append("[");
for (PDRIDescr p : pdris) {
sb.append("[");
sb.append(p.getResourceUrl());
sb.append(",");
sb.append(p.getEncrypt());
sb.append("]");
sb.append(",");
}
}
if (sb.toString().contains(",")) {
sb.replace(sb.lastIndexOf(","), sb.length(), "");
}
sb.append("]");
connection.commit();
return sb.toString();
}
} else if (qname.equals(Constants.AVAIL_STORAGE_SITES_PROP_NAME)) {
try (Connection connection = getCatalogue().getConnection()) {
connection.commit();
Collection<StorageSite> ss = getCatalogue().getStorageSites(connection, Boolean.FALSE);
StringBuilder sb = new StringBuilder();
sb.append("[");
for (StorageSite s : ss) {
sb.append(s.getResourceURI()).append(",");
}
sb.replace(sb.lastIndexOf(","), sb.length(), "");
sb.append("]");
return sb.toString();
}
}
return PropertySource.PropertyMetaData.UNKNOWN;
} catch (Throwable th) {
WebDataResource.log.log(Level.SEVERE, "Exception in getProperty() for resource " + getPath(), th);
return PropertySource.PropertyMetaData.UNKNOWN;
}
}
use of io.milton.http.exceptions.NotAuthorizedException in project lobcder by skoulouzis.
the class WebDataDirResource method copyTo.
@Override
public void copyTo(CollectionResource toCollection, String name) throws NotAuthorizedException, BadRequestException, ConflictException {
WebDataDirResource toWDDR = (WebDataDirResource) toCollection;
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.FINEST, "copyTo({0}, ''{1}'') for {2}", new Object[] { toWDDR.getPath(), name, getPath() });
try (Connection connection = getCatalogue().getConnection()) {
try {
Permissions newParentPerm = getCatalogue().getPermissions(toWDDR.getLogicalData().getUid(), toWDDR.getLogicalData().getOwner(), connection);
if (!getPrincipal().canWrite(newParentPerm)) {
throw new NotAuthorizedException(this);
}
getCatalogue().copyFolder(getLogicalData(), toWDDR.getLogicalData(), name, getPrincipal(), connection);
connection.commit();
connection.close();
} catch (SQLException e) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, e);
if (connection != null && !connection.isClosed()) {
connection.rollback();
connection.close();
}
throw new BadRequestException(this, e.getMessage());
}
} catch (SQLException e1) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, e1);
throw new BadRequestException(this, e1.getMessage());
}
}
use of io.milton.http.exceptions.NotAuthorizedException in project lobcder by skoulouzis.
the class WebDataDirResource method createNew.
@Override
public Resource createNew(String newName, InputStream inputStream, Long length, String contentType) throws IOException, ConflictException, NotAuthorizedException, BadRequestException, InternalError {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.FINEST, "createNew. for {0}\n\t newName:\t{1}\n\t length:\t{2}\n\t contentType:\t{3}", new Object[] { getPath(), newName, length, contentType });
LogicalData fileLogicalData;
// List<PDRIDescr> pdriDescrList;
WebDataFileResource resource;
PDRI pdri;
double start = System.currentTimeMillis();
try (Connection connection = getCatalogue().getConnection()) {
try {
// Long uid = getCatalogue().getLogicalDataUidByParentRefAndName(getLogicalData().getUid(), newName, connection);
Path newPath = Path.path(getPath(), newName);
fileLogicalData = getCatalogue().getLogicalDataByPath(newPath, connection);
if (contentType == null || contentType.equals("application/octet-stream")) {
contentType = mimeTypeMap.get(FilenameUtils.getExtension(newName));
}
if (fileLogicalData != null) {
// Resource exists, update
// throw new ConflictException(this, newName);
Permissions p = getCatalogue().getPermissions(fileLogicalData.getUid(), fileLogicalData.getOwner(), connection);
if (!getPrincipal().canWrite(p)) {
throw new NotAuthorizedException(this);
}
fileLogicalData.setLength(length);
fileLogicalData.setModifiedDate(System.currentTimeMillis());
fileLogicalData.setLastAccessDate(fileLogicalData.getModifiedDate());
if (contentType == null) {
contentType = mimeTypeMap.get(FilenameUtils.getExtension(newName));
}
fileLogicalData.addContentType(contentType);
resource = new WebDataFileResource(fileLogicalData, Path.path(getPath(), newName), getCatalogue(), authList);
// LockToken tocken = resource.getCurrentLock();
// System.err.println("tokenId: "+tocken.tokenId+" lockedByUser: "+tocken.info.lockedByUser+" timeout: "+tocken.timeout.toString()+" getOtherSeconds: "+tocken.timeout.getOtherSeconds()+" getSeconds: "+tocken.timeout.getSeconds());
// if (tocken != null) {
// if (tocken.getFrom().after(new Date(System.currentTimeMillis()))) {
// throw new ConflictException(resource, "The resource is locked");
// }
// }
// Create new
pdri = createPDRI(fileLogicalData.getLength(), newName, connection);
pdri.setLength(length);
pdri.putData(inputStream);
fileLogicalData = getCatalogue().updateLogicalDataAndPdri(fileLogicalData, pdri, connection);
// fileLogicalData = inheritProperties(fileLogicalData, connection);
connection.commit();
connection.close();
// String md5 = pdri.getStringChecksum();
// if (md5 != null) {
// fileLogicalData.setChecksum(md5);
// }
// return new WebDataFileResource(fileLogicalData, Path.path(getPath(), newName), getCatalogue(), authList);
} else {
// Resource does not exists, create a new one
// new need write prmissions for current collection
fileLogicalData = new LogicalData();
fileLogicalData.setName(newName);
fileLogicalData.setParentRef(getLogicalData().getUid());
fileLogicalData.setType(Constants.LOGICAL_FILE);
fileLogicalData.setOwner(getPrincipal().getUserId());
fileLogicalData.setLength(length);
fileLogicalData.setCreateDate(System.currentTimeMillis());
fileLogicalData.setModifiedDate(System.currentTimeMillis());
fileLogicalData.setLastAccessDate(System.currentTimeMillis());
fileLogicalData.setTtlSec(getLogicalData().getTtlSec());
fileLogicalData.addContentType(contentType);
pdri = createPDRI(length, newName, connection);
pdri.setLength(length);
pdri.putData(inputStream);
// String md5 = pdri.getStringChecksum();
// if (md5 != null) {
// fileLogicalData.setChecksum(md5);
// }
fileLogicalData = getCatalogue().associateLogicalDataAndPdri(fileLogicalData, pdri, connection);
getCatalogue().setPermissions(fileLogicalData.getUid(), new Permissions(getPrincipal(), getPermissions()), connection);
// fileLogicalData = inheritProperties(fileLogicalData, connection);
getCatalogue().setPreferencesOn(fileLogicalData.getUid(), getLogicalData().getUid(), connection);
List<String> pref = getLogicalData().getDataLocationPreferences();
fileLogicalData.setDataLocationPreferences(pref);
connection.commit();
connection.close();
resource = new WebDataFileResource(fileLogicalData, Path.path(getPath(), newName), getCatalogue(), authList);
// return new WebDataFileResource(fileLogicalData, Path.path(getPath(), newName), getCatalogue(), authList);
}
} catch (NoSuchAlgorithmException ex) {
if (connection != null && !connection.isClosed()) {
connection.rollback();
connection.close();
}
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, ex);
throw new InternalError(ex.getMessage());
} catch (SQLException e) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, e);
if (connection != null && !connection.isClosed()) {
connection.rollback();
connection.close();
}
throw new BadRequestException(this, e.getMessage());
}
} catch (SQLException | IOException e1) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, e1);
throw new BadRequestException(this, e1.getMessage());
// throw new InternalError(e1.getMessage());
}
double elapsed = System.currentTimeMillis() - start;
double speed = ((resource.getLogicalData().getLength() * 8.0) * 1000.0) / (elapsed * 1000.0);
String msg = null;
try {
Stats stats = new Stats();
stats.setSource(fromAddress);
stats.setDestination(pdri.getHost());
stats.setSpeed(speed);
stats.setSize(resource.getLogicalData().getLength());
if (!pdri.isCahce()) {
getCatalogue().setSpeed(stats);
}
msg = "Source: " + fromAddress + " Destination: " + new URI(pdri.getURI()).getScheme() + "://" + pdri.getHost() + " Rx_Speed: " + speed + " Kbites/sec Rx_Size: " + (resource.getLogicalData().getLength()) + " bytes Elapsed_Time: " + elapsed + " ms";
} catch (URISyntaxException | SQLException ex) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, ex);
}
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.INFO, msg);
return resource;
}
use of io.milton.http.exceptions.NotAuthorizedException in project lobcder by skoulouzis.
the class WebDataDirResource method moveTo.
@Override
public void moveTo(CollectionResource toCollection, String name) throws ConflictException, NotAuthorizedException, BadRequestException {
WebDataDirResource toWDDR = (WebDataDirResource) toCollection;
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.FINEST, "moveTo({0}, ''{1}'') for {2}", new Object[] { toWDDR.getPath(), name, getPath() });
try (Connection connection = getCatalogue().getConnection()) {
try {
Permissions destPerm = getCatalogue().getPermissions(toWDDR.getLogicalData().getUid(), toWDDR.getLogicalData().getOwner(), connection);
LogicalData parentLD = getCatalogue().getLogicalDataByUid(getLogicalData().getParentRef());
Permissions parentPerm = getCatalogue().getPermissions(parentLD.getUid(), parentLD.getOwner());
if (!(getPrincipal().canWrite(destPerm) && getPrincipal().canWrite(parentPerm))) {
throw new NotAuthorizedException(this);
}
getCatalogue().moveEntry(getLogicalData(), toWDDR.getLogicalData(), name, connection);
connection.commit();
connection.close();
} catch (SQLException e) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, e);
if (connection != null && !connection.isClosed()) {
connection.rollback();
connection.close();
}
throw new BadRequestException(this, e.getMessage());
}
} catch (SQLException e1) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, e1);
throw new BadRequestException(this, e1.getMessage());
}
}
use of io.milton.http.exceptions.NotAuthorizedException in project lobcder by skoulouzis.
the class WebDataDirResource method sendContent.
@Override
public void sendContent(OutputStream out, Range range, Map<String, String> params, String contentType) throws IOException, NotAuthorizedException, BadRequestException {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.FINEST, "sendContent({0}) for {1}", new Object[] { contentType, getPath() });
try (Connection connection = getCatalogue().getConnection()) {
try (PrintStream ps = new PrintStream(out)) {
HtmlCanvas html = new HtmlCanvas();
html.table(border("1")).tr().th().content("Name").th().content("Size").th().content("Modification Date").th().content("Creation Date").th().content("Owner").th().content("Content Type").th().content("Type").th().content("Is Supervised").th().content("Uid");
String ref;
for (LogicalData ld : getCatalogue().getChildrenByParentRef(getLogicalData().getUid(), connection)) {
if (ld.isFolder()) {
ref = "../dav" + getPath() + "/" + ld.getName();
// if (ld.getUid() != 1) {
// } else {
// }
} else {
ref = "../dav" + getPath() + "/" + ld.getName();
}
html._tr().tr().td().a(href(ref)).img(src("").alt(ld.getName()))._a()._td().td().content(String.valueOf(ld.getLength())).td().content(new Date(ld.getModifiedDate()).toString()).td().content(new Date(ld.getCreateDate()).toString()).td().content(ld.getOwner()).td().content(ld.getContentTypesAsString()).td().content(ld.getType()).td().content(ld.getSupervised().toString()).td().content(ld.getUid().toString());
}
html._tr()._table();
ps.println(html.toHtml());
getCatalogue().addViewForRes(getLogicalData().getUid(), connection);
connection.commit();
connection.close();
} catch (Exception e) {
if (connection != null && !connection.isClosed()) {
connection.rollback();
connection.close();
}
throw e;
}
} catch (Exception e) {
Logger.getLogger(WebDataDirResource.class.getName()).log(Level.SEVERE, null, e);
throw new BadRequestException(this);
}
}
Aggregations