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.

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

Reply via email to