Search in sources :

Example 1 with NotAuthorizedException

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;
    }
}
Also used : SQLException(java.sql.SQLException) Connection(java.sql.Connection) NotAuthorizedException(io.milton.http.exceptions.NotAuthorizedException) HrefList(io.milton.http.values.HrefList)

Example 2 with NotAuthorizedException

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());
    }
}
Also used : SQLException(java.sql.SQLException) Connection(java.sql.Connection) Permissions(nl.uva.cs.lobcder.auth.Permissions) BadRequestException(io.milton.http.exceptions.BadRequestException) NotAuthorizedException(io.milton.http.exceptions.NotAuthorizedException)

Example 3 with NotAuthorizedException

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;
}
Also used : Path(io.milton.common.Path) SQLException(java.sql.SQLException) Connection(java.sql.Connection) NotAuthorizedException(io.milton.http.exceptions.NotAuthorizedException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) PDRI(nl.uva.cs.lobcder.resources.PDRI) LogicalData(nl.uva.cs.lobcder.resources.LogicalData) Permissions(nl.uva.cs.lobcder.auth.Permissions) Stats(nl.uva.cs.lobcder.rest.wrappers.Stats) BadRequestException(io.milton.http.exceptions.BadRequestException)

Example 4 with NotAuthorizedException

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());
    }
}
Also used : LogicalData(nl.uva.cs.lobcder.resources.LogicalData) SQLException(java.sql.SQLException) Connection(java.sql.Connection) Permissions(nl.uva.cs.lobcder.auth.Permissions) BadRequestException(io.milton.http.exceptions.BadRequestException) NotAuthorizedException(io.milton.http.exceptions.NotAuthorizedException)

Example 5 with NotAuthorizedException

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);
    }
}
Also used : LogicalData(nl.uva.cs.lobcder.resources.LogicalData) Connection(java.sql.Connection) HtmlCanvas(org.rendersnake.HtmlCanvas) BadRequestException(io.milton.http.exceptions.BadRequestException) ConflictException(io.milton.http.exceptions.ConflictException) URISyntaxException(java.net.URISyntaxException) SQLException(java.sql.SQLException) BadRequestException(io.milton.http.exceptions.BadRequestException) PreConditionFailedException(io.milton.http.exceptions.PreConditionFailedException) NotAuthorizedException(io.milton.http.exceptions.NotAuthorizedException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException)

Aggregations

NotAuthorizedException (io.milton.http.exceptions.NotAuthorizedException)40 BadRequestException (io.milton.http.exceptions.BadRequestException)29 IOException (java.io.IOException)12 Resource (io.milton.resource.Resource)10 URISyntaxException (java.net.URISyntaxException)9 Connection (java.sql.Connection)9 SQLException (java.sql.SQLException)9 ConflictException (io.milton.http.exceptions.ConflictException)7 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)7 PreConditionFailedException (io.milton.http.exceptions.PreConditionFailedException)6 UnsupportedEncodingException (java.io.UnsupportedEncodingException)6 Permissions (nl.uva.cs.lobcder.auth.Permissions)6 NotFoundException (io.milton.http.exceptions.NotFoundException)5 CollectionResource (io.milton.resource.CollectionResource)5 ReplaceableResource (io.milton.resource.ReplaceableResource)5 QName (javax.xml.namespace.QName)5 Path (io.milton.common.Path)4 LockedException (io.milton.http.exceptions.LockedException)4 ValueAndType (io.milton.http.values.ValueAndType)4 LogicalData (nl.uva.cs.lobcder.resources.LogicalData)4