Niels: Comments inline -- Jody Garnett
On Aug 2, 2023 at 12:20:43 PM, Niels Charlier <ni...@scitus.be> wrote: > Hi Jody, > > I do support checking everything is handled correctly. > Thanks Niels, sorry I am a bit frustrated these days so am probably not explaining clearly. I just don't seem the point in breaking huge amounts of code for nothing. > And that is what will happen if we start throwing exceptions in the > resource store if the path starts with a "/". Which is actually normal, > because the resource store has a root. > ResourceStore no longer uses `/` as a root. The work done earlier this year removed the use leading / from the codebase (including the REST API Controller). > Please: define "absolute path". Is this OS dependent? Should the behaviour > of the resource store be OS dependent? What /exactly/ > I put the definitions into the document I shared and the javadocs (not sure why I cannot find the javadocs online?). When I say "path" I mean the strings used by the class Paths.isAbsolute(String) - https://github.com/geoserver/geoserver/blob/main/src/platform/src/main/java/org/geoserver/platform/resource/Paths.java#L550 - This has nothing to do with the ResourceStore API. This is covered in the developers guide here: https://docs.geoserver.org/latest/en/developer/programming-guide/config/resource.html#paths Paths are broken down into a sequence of names, as listed by Paths.names(path): - Path.names("data/tasmania/roads.shp") is represented as a list of data, tasmania, roads.shp. - On linux Path.names("/src/gis/cadaster/district.geopkg") starts with a marker to indicate an absolute path, resulting in /, src, gis, cadaster, district.geopkg. - On windows Path.names("D:/gis/cadaster/district.geopkg") starts with a marker to indicate an absolute path, resulting in D:/, gis, cadaster, district.geopkg. are you suggesting should be allowed or not allowed to access a resource > from the resource store? > I am suggesting paths that return true for this method be not allowed to access resources from the resource store. > Yes, "paths" are used across the application. But "path" is a vague term, > 'xpaths' are paths too, they have no relationship with file paths. Resource > paths are no different, they live in their own world and are not part of > the file system. The notion of a path being 'absolute' or 'relative' has no > meaning when you are talking about paths in general, this is file system > terminology. > Earlier in this email thread I shared the developer guide documentation which was written to define what Paths mean for GeoServer. > When someone gets a resource directly from the resource store, they are > using the resource store as a black box, and the "path" is always relative > to the _root_ of the resource store. > Correct, relative paths are with respect to the resource store location. Actually when I did he QA I found that there was at one point a search path that could be scanned to allow "data directory" to be spread across several folders (terrifying). > Resource.fromURL is a different story, these are not hard-coded URL's, > they are user provided, and then we allow both the file system as the > resource store to be accessed, where file: is for the file system and > resource: is for the resource store. > I have not seen users use "resource:", to my knowledge that was only used internally in the logic between in geoserver and geotools ( applied by a style visitor to help geotools resolve icons in the data directory.) See the examples Resource.fromURL(base, url) <https://docs.geoserver.org/latest/en/developer/programming-guide/config/resource.html#resources-fromurl> : - Resources.fromURL( null, "/src/gis/cadaster/district.geopgk") - absolute file path (linux) - Resources.fromURL( baseDirectory, "D:\\gis\\cadaster\\district.geopkg") - absolute file path (windows) - Resources.fromURL( baseDirectory, "file:///D:/gis/cadaster/district.geopkg") - absolute file url (windows) - Resources.fromURL( baseDirectory, "ftp://veftp.gsfc.nasa.gov/bluemarble/ ") - null (external reference) See the examples Paths.convert(base, filename) <https://docs.geoserver.org/latest/en/developer/programming-guide/config/resource.html#paths-convert> - Paths.convert(base,file) - uses URI relativize method to determine relative path (between file and base) - Paths.convert(base,folder, fileLocation) - can resolve relative location, limited to content within the base directory - Paths.convert(base, filename) See examples Files.fromURL( base, url) <https://docs.geoserver.org/latest/en/developer/programming-guide/config/resource.html#files-url> - Files.fromURL( null, "resource:styles/logo.svg") - internal url format restricted to data directory content - Files.fromURL( null, "/src/gis/cadaster/district.geopgk") - absolute file path (linux) - Files.fromURL( baseDirectory, "D:\\gis\\cadaster\\district.geopkg") - absolute file path (windows) - Files.fromURL( baseDirectory, "file:///D:/gis/cadaster/district.geopkg") - absolute file url (windows) - Files.fromURL( baseDirectory, "ftp://veftp.gsfc.nasa.gov/bluemarble/") - null (external reference ignored as we cannot determine a file) - Files.fromURL( baseDirectory, "sde://user:pass@server:port") - null (custom strings are ignored as we cannot determine a file) Folks use Paths (in the sense defined above) here also; the is the motivation for fixing absolute paths on windows (as the definition had changed in Java 11) and where the inconsistency of use was found. > I just haven't seen any valid argument why the original design is flawed. > I do not believe the origional design was flawed, it was not consistently applied in the codebase. Where a path is used > Kind Regards > > Niels > Does it help that path and absolute path is defined strictly above? Thanks, Jody > On 02/08/2023 16:40, Jody Garnett wrote: > > Niels: > > We may be on the same page, you indicate ResoueceStore should never use > absolute paths for the file system. > > That is the decision I wish to make, and then we should go do the work to > enforce it. How much work? I am not sure, hence the work party. > > There is something subtle here though. You are focused on the > ResourceStore API, and I am asking you to consider the application as a > whole. > > We do have paths in the application including absolute paths. The QA > activity to check that these are handled correctly is the work. > > Paths are not only for ResourceStore. > > Jody > > > On Tue, Aug 1, 2023 at 11:55 PM Niels Charlier <ni...@scitus.be> wrote: > >> Hello Jody, >> >> Unfortunately I am not really on board with your plan. I really don't >> think we need to make a new branch and do a lot of work. This seems like a >> lot of unnecessary work. I think the original design is fine, and does not >> require breaking the code base. We just need to go back to how things were >> and perhaps fix a few cases where people have gone wrong since then. >> >> >> - >> >> Gabe and Niels are having trouble with the API changes made earlier >> this year >> - >> >> The definition of path was inconsistent for windows absolute paths >> >> I disagree. The definition of 'path' for the resource store is not in any >> way related to the OS, because the resource store lives in a separate world >> from the file system. The resource store and the file system have no joint >> concept of 'path'. >> >> - >> >> Early resource store work was not strict about use of paths, and when >> to use Resource and when to use File >> >> I disagree. It was always very clear about this. There should obviously >> never be hard coded absolute paths for the file system. In general the code >> should basically always use resources. Only where users can use URLs they >> have access to both the file system and the resource store, this is always >> how it was intended to work, as can be read from the javadoc. >> >> - >> >> The email conversation is going in circles because something has to >> break >> >> >> - >> >> We have to accept that something that break >> >> I disagree. I think nearly all of the code base is fine with how it was >> designed to work. >> >> Regards >> >> Niels >> On 01/08/2023 19:31, Jody Garnett wrote: >> >> Niel, Gabe: >> >> Our email thread on this topic has explored the topic by now, I think >> action rather than more communication is needed next. >> >> Can we setup a 1/2 day breakout work-party to get this activity underway >> (prior to the Bolsena code sprint and the next release cycle). Even a >> couple hours to get the topic started on a branch would be great. >> >> I am proposing two times below, and am willing to wake up early to see >> this topic move along: >> >> >> 1. August 8th >> >> <https://www.timeanddate.com/worldclock/meetingdetails.html?year=2023&month=8&day=8&hour=13&min=0&sec=0&p1=256&p2=45&p3=48> >> 15 >> CEST / 11 BRT / 6 PDT >> 2. August 15th >> >> <https://www.timeanddate.com/worldclock/meetingdetails.html?year=2023&month=8&day=15&hour=13&min=0&sec=0&p1=256&p2=45&p3=48>: >> 15 CEST / 11 BRT / 6 PDT >> >> >> Is this a good idea :) >> -- >> Jody Garnett >> >> -- > -- > Jody Garnett > >
_______________________________________________ Geoserver-devel mailing list Geoserver-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geoserver-devel