> On 11 Apr 2016, at 19:21, Thomas Mortagne <[email protected]> wrote: > > On Mon, Apr 11, 2016 at 6:38 PM, Vincent Massol <[email protected]> wrote: >> ok thanks for the help Thomas, I understand now and it seems like a good >> idea to support namespaces right now. >> > >> One question though: do we have some tools to generate a namespace? In the >> getURL() method of the ScriptService, I’ll need to convert the current wiki >> id into a namespace and I’d rather not hardcode it if possible. > > The is no platform level helper for this no. Been lazy on this. I > guess some platform side internal NamespaceUtils (extending > org.xwiki.component.namespace.NamespaceUtils) with > toWikiNamespace(String wikiId) would do for now.
FTR, I really don’t like utils classes. IMO this is a sign that we need a NameSpace object and some serializer component impl. BTW just found that Marius had already added a method in the ScriptService for webjars: https://github.com/xwiki/xwiki-platform/blob/4f2f6fa823d3d222851f7001237b0bd5cee2d242/xwiki-platform-core/xwiki-platform-webjars/xwiki-platform-webjars-api/src/main/java/org/xwiki/webjars/script/WebJarsScriptService.java#L264-L264 Thanks -Vincent > Thanks >> -Vincent >> >>> On 11 Apr 2016, at 18:00, Thomas Mortagne <[email protected]> wrote: >>> >>> On Mon, Apr 11, 2016 at 5:32 PM, Vincent Massol <[email protected]> wrote: >>>> >>>>> On 11 Apr 2016, at 15:47, Thomas Mortagne <[email protected]> >>>>> wrote: >>>>> >>>>> On Mon, Apr 11, 2016 at 3:11 PM, Vincent Massol <[email protected]> >>>>> wrote: >>>>>> >>>>>>> On 11 Apr 2016, at 15:07, Vincent Massol <[email protected]> wrote: >>>>>>> >>>>>>>> >>>>>>>> On 08 Apr 2016, at 10:42, Thomas Mortagne <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>> On Fri, Apr 8, 2016 at 10:10 AM, Vincent Massol <[email protected]> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> On 08 Apr 2016, at 10:00, Thomas Mortagne >>>>>>>>>> <[email protected]> wrote: >>>>>>>>>> >>>>>>>>>> I'm hesitating, the thing is that what webjars really want to know in >>>>>>>>>> practice is the namespace since that what it will provide to >>>>>>>>>> ClassLoaderManager so maybe the best is to indicate the namespace >>>>>>>>>> instead of the wiki in the URL. It means that webjar service can >>>>>>>>>> support both wiki and users right now and any future namespaces >>>>>>>>>> (document, space, etc). >>>>>>>>> >>>>>>>>> Don’t you think that we need the wiki in order to validate >>>>>>>>> permissions: >>>>>>>>> >>>>>>>>> "// 2) so that we can set the current user in the Context and at the >>>>>>>>> same time verify that the current user has >>>>>>>>> // View Rights on this wiki" >>>>>>>>> >>>>>>>>> At >>>>>>>>> https://github.com/xwiki/xwiki-platform/blob/4f2f6fa823d3d222851f7001237b0bd5cee2d242/xwiki-platform-core/xwiki-platform-webjars/xwiki-platform-webjars-api/src/main/java/org/xwiki/webjars/internal/WebJarsResourceReferenceHandler.java#L120-L120 >>>>>>>>> >>>>>>>> >>>>>>>>> Of course we could generalize and say that we pass a serialized >>>>>>>>> entity reference (or resource reference) instead of the wikiId. Note >>>>>>>>> that we would also need to pass the entity type (or resource >>>>>>>>> reference type), so it would need to be something like >>>>>>>>> “/wiki:wikiId/…”. >>>>>>>> >>>>>>>> "wiki:wikiId" is a the namespace for wiki with id "wikiId". >>>>>>>> >>>>>>>>> >>>>>>>>> Maybe this is too much for now. It’s more work and I’m not sure about >>>>>>>>> the use cases... >>>>>>>> >>>>>>>> It's not really that simple IMO. You will have to change the URL >>>>>>>> format and find an alternative that can work along with the old format >>>>>>>> to not break it. The thing is you could have an extension in any >>>>>>>> namespace, the standard UI just give you wikis choice but it's not the >>>>>>>> case for classloadersmanager/extensionmanager API. As for the user >>>>>>>> case, I don't think installing an extension in a space would be so >>>>>>>> weird compare to installing an extension in a wiki. It does not really >>>>>>>> make much difference for Extension Manager. >>>>>>> >>>>>>> However we still need to have the wikiId somewhere in the URL because >>>>>>> we'll need to set the current wiki (at least to validate permissions). >>>>>>> >>>>>>> So what you’re saying (I think) is that we need 2 more info in the URL: >>>>>>> wikiId + namespace, right? >>>>> >>>>> No I'm not saying that. You don't have wikis on one side and >>>>> namespaces on another side being completely different things. Wikis >>>>> have namespaces to represent them, you install an extension on a >>>>> namespace for example (and then XAR extension handler understand from >>>>> "wiki:toto" namespace that it will have to import pages on wiki >>>>> "toto”). >>>> >>>> I’m not really familiar with namespaces. Is there a java class to >>>> represent them? >>>> >>>>> How to deal with permission depend on the kind of namespace. You just >>>>> need security handlers to which you ask for READ right on namespace >>>>> "wiki:toto" and will behind the scene translate it to a READ right on >>>>> entity WIKI with id "toto" and return you the result (later we'll >>>>> probably have a more generic entity handler dealing with "wiki:", >>>>> "space:", "document:", etc.), the one associated to user will check >>>>> that current user is the target user (and probably also allow admin of >>>>> the target user wiki and farm to access it too), etc. >>>> >>>> Do we have that? >>> >>> No there is no namespace oriented authorization API right now because >>> we did not had the need yet but it should not be too complex to >>> implement. >>> >>>> We’ll need a Namespace object anyway for that to work out (as otherwise a >>>> String is too generic for a component type), do we have such an object? >>> >>> There is no Namespace object right now. >>> >>>> >>>> So it means that we’d need component implementation that accepts >>>> Namespaces as input (instead of Entity Reference) for everything we need >>>> (permissions, etc) since I guess we shouldn’t consider that a namespace >>>> points to an entity reference. >>> >>> It's more generic than entity reference yes. Also it's meant to >>> describe a scope/context more than an entity to manipulate. >>> >>>> >>>> Let’s hope we’ll have the use case for namespaces one day because right >>>> now, they look very much like Entity References or Link Resource >>>> References (doc:…, space:…, wiki:…, user:…), we’re starting to have a lot >>>> of various types of references in XWiki ;) >>> >>> Not sure what you mean. Namespaces are not a new thing. Extensions, >>> classloaders and components are based on namespaces. Since webjars are >>> extensions installed in some namespace (or core extensions) it seems >>> more consistent to have the webjars entry point be based on namespaces >>> too. >>> >>> We have only namespaces at xwiki-commons level. >>> >>>> >>>> Also, right now it means I cannot set the wiki id in the context and I >>>> hope this won’t cause any problem in any API I call in >>>> WebJarsResourceReferenceHandler. Right now there’s no valid way of >>>> extracting a wiki id from a namespace (because a namespace can be anything >>>> and doesn’t always contain a wiki id). Of course, I could check if the >>>> namespace starts with “wiki:” but that’s not very nice, the >>>> WebJarsResourceReferenceHandler code shouldn’t know the format of a >>>> namespace. >>> >>> WebJarsResourceReferenceHandler job is to extract a resource from a >>> classloader, if there is an issue caused by whatever wiki is located >>> in the context (I guess the context will end up on whatever wiki >>> correspond to the domain) I would say it's a bug to fix but it's >>> probably the kind of thing that will be noticed quickly. >>> >>>> >>>>> >>>>>> BTW, AFAICS , the ContextNamespaceURLClassLoader class only deals with a >>>>>> wiki namespace ATM. Are you saying that we should modify this to handle >>>>>> other use cases? Or that WebJarsResourceReferenceHandler should not use >>>>>> the current thread CL? >>>>> >>>>> No, I'm saying that you forget about ContextNamespaceURLClassLoader >>>>> completely in the webjars use case. Instead of >>>>> WebJarsResourceReferenceHandler it will use >>>>> ClassLoaderManager#getURLClassLoader with the namespace found in the >>>>> URL. In other words in WebJarsResourceReferenceHandler you replace the >>>>> current >>>>> >>>>> Thread.currentThread().getContextClassLoader() >>>>> >>>>> with >>>>> >>>>> this.classlLoaderManager.getURLClassLoader(namespace) >>>>> >>>>> ContextNamespaceURLClassLoader job is not to "deals with a wiki >>>>> namespace", it deals with context. What it currently support in the >>>>> context is pretty much implementation details. In the future we will >>>>> most probably add in it support for spaces, documents, etc. and it >>>>> won't change any API or what this component is about. >>>>> >>>>> So the URL: >>>>> >>>>> /<context>/webjars/wiki:mywiki/application-ckeditor-webjar/1.4/ckeditor.js >>>>> >>>>> you start searching for resource >>>>> "application-ckeditor-webjar/1.4/ckeditor.js" in wiki "mywiki" and >>>>> then fallback on farm classloader and then container classloader >>>>> because that's its parents. >>>> >>>> Why do I need to fallback manually, isn’t that the role of the >>>> getResource() method of the CL returned by >>>> this.classlLoaderManager.getURLClassLoader(namespace)? If those are its >>>> parent, then the return CL should have them as parents, no? >>> >>> The "you" is a leftover, what I described is what append from client >>> point of you. Of course the classloader is fallbacking on its parents >>> automatically. Again you just replace the thread classloader with a >>> call to ClasslLoaderManager. >>> >>>> >>>> Thanks >>>> -Vincent >>>> >>>>> Thanks >>>>>> -Vincent >>>>>> >>>>>>> So something like: >>>>>>> >>>>>>> /<context>/webjars/mywiki/wiki:mywiki/application-ckeditor-webjar/1.4/ckeditor.js >>>>>>> >>>>>>> Generic format: >>>>>>> >>>>>>> /<context>/webjars/<wikiId>/<namespace where to find >>>>>>> resource>/<path/to/resource> >>>>>>> >>>>>>> Unless the namespace is absolute but I don’t know what’s the format >>>>>>> right now. Does a space namespace also specified the wiki? >>>>>>> >>>>>>> Thanks >>>>>>> -Vincent >>>>>>> >>>>>>>>> Thanks >>>>>>>>> -Vincent >>>>>>>>> >>>>>>>>> >>>>>>>>>> On Fri, Apr 8, 2016 at 9:06 AM, Vincent Massol <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>>> Hi devs, >>>>>>>>>>> >>>>>>>>>>> In order to fix http://jira.xwiki.org/browse/XWIKI-13276, I’m >>>>>>>>>>> proposing: >>>>>>>>>>> >>>>>>>>>>> * Use Case 1: No wiki specified: >>>>>>>>>>> >>>>>>>>>>> $services.webjars.url('org.xwiki.contrib:application-ckeditor-webjar', >>>>>>>>>>> 'ckeditor.js’) >>>>>>>>>>> >>>>>>>>>>> would generate: >>>>>>>>>>> >>>>>>>>>>> /<context>/webjars/<currentWikiId>/application-ckeditor-webjar/1.4/ckeditor.js >>>>>>>>>>> >>>>>>>>>>> * Use Case 2: Wiki specified: >>>>>>>>>>> >>>>>>>>>>> $services.webjars.url('org.xwiki.contrib:application-ckeditor-webjar', >>>>>>>>>>> 'ckeditor.js', {'wiki': 'mywiki’) >>>>>>>>>>> >>>>>>>>>>> would generate >>>>>>>>>>> >>>>>>>>>>> /<context>/webjars/mywiki/application-ckeditor-webjar/1.4/ckeditor.js >>>>>>>>>>> >>>>>>>>>>> Generic format: >>>>>>>>>>> >>>>>>>>>>> /<context>/webjars/<wikiId>/path/to/resource >>>>>>>>>>> >>>>>>>>>>> WDYT? >>>>>>>>>>> >>>>>>>>>>> I prefer this over having to deal with domain vs path-based; I also >>>>>>>>>>> find it more clear. >>>>>>>>>>> >>>>>>>>>>> Thanks >>>>>>>>>>> -Vincent _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

