Hi Jun,

I`m pinging you since I don`t know if you were following the little 
discussion on 
https://github.com/junhan/xwiki-eclipse/commit/2e5601eacba85c48b8ae6e6edf70b18fb3715f0d#commitcomment-440786
 
based on Fabio's suggestions.

Out of all the aspects, I think this is the one you should focus on now 
and finish the refactoring so you can proceed with the REST specifics.

Cheers,
Eduard

On 06/20/2011 08:10 PM, Fabio Mancinelli wrote:
> Hi Jun,
>
> I did a code review in your branch.
> I've written a lot of notes in the commits (you should have received
> several mail for that :))
>
> Please take a look.
>
> Thanks,
> Fabio
>
> On Sun, Jun 19, 2011 at 4:57 PM, Jun Han<[email protected]>  wrote:
>> Hi Vincent,
>>
>> Thanks a lot for your suggestion.
>>
>> IMHO, xmlrpc is included for the purpose of back-ward compatibility.
>> As REST API was first introduced in version 1.8 from xwiki jira,
>> xmlrpc might be useful If the xwiki server only supports xmlrpc (e.g.,
>> v1.4 or v1.5).
>>
>> I agree that technical details should not be exposed to end user.
>>
>> The backend implementation may be determined via analyzing user input of
>> server endpoint. For example, if the serverurl contains "confluence"
>> (http://localhost:8080/xwiki/xmlrpc/confluence), then xmlrpc is used. If
>> it contains "rest" (e.g., http://localhost:8080/xwiki/rest), then rest
>> is used.
>>
>> However, the current implementation will populate the specific server
>> url field according to the backend type (xmlrpc or rest).
>> There may be some better way to do this.
>>
>> Best regards
>>
>> Jun Han
>>
>> On 06/19/2011 03:40 AM, Vincent Massol wrote:
>>> Hi there,
>>>
>>> I haven't followed this thread but just noticing this: why do we want to 
>>> expose to users something purely technical (ie the backend implementation)?
>>> Also why do we want to have to maintain several backends?
>>>
>>> IMO we should only use one and use the REST API only.
>>>
>>> If it's only about migration from the current XMLRPC to REST, it should be 
>>> a "hidden" config param not exposed to users and that we use internally 
>>> only IMO.
>>>
>>> The goal should always be to make it as easy as possible for end users, 
>>> i.e. they shouldn't have to think when using XEclipse.
>>>
>>> Thanks
>>> -Vincent
>>>
>>> On Jun 19, 2011, at 6:52 AM, Jun Han wrote:
>>>
>>>> Hi Fabio,
>>>>
>>>> I have already finished re-factoring the whole xmlrpc backend.
>>>>
>>>> A new combo list is added to the "new connection" wizard to provide two
>>>> choices (xmlrpc and rest), as shown in
>>>> http://dl.dropbox.com/u/3466762/xwiki/newConnectionWizard.png.
>>>>
>>>> When user selects "xmlrpc", the xmlrpc implementation is used. The
>>>> navigation panel can show the xwiki resources, as shown in
>>>> http://dl.dropbox.com/u/3466762/xwiki/xmlrpcBackend.png.
>>>>
>>>> I will continue working on the rest backend following the previous
>>>> discussion.
>>>>
>>>> Best regards
>>>>
>>>> Jun Han
>>>>
>>>> On 06/17/2011 09:24 AM, Fabio Mancinelli wrote:
>>>>> Hi Jun,
>>>>>
>>>>> could you post a status about your work?
>>>>> Your commits stream
>>>>> (https://github.com/junhan/xwiki-eclipse/commits/master) is not very
>>>>> informative (are you holding commits locally? If so you should push
>>>>> more frequently!)
>>>>>
>>>>> Midterm is approaching so we need to make things advance a little bit 
>>>>> faster.
>>>>>
>>>>> Thanks,
>>>>> Fabio
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Jun 13, 2011 at 9:00 AM, Jun Han<[email protected]>     wrote:
>>>>>> Dear all,
>>>>>>
>>>>>> After I looked into the current implementation of XEclipse and tried
>>>>>> several attempts, one plan, whose goal is to provide an abstract
>>>>>> communication layer between XEclipse and server, might be feasible.
>>>>>> A rough system diagram showing the relationships of plugins of XWiki
>>>>>> Eclipse is available at:
>>>>>> http://dl.dropbox.com/u/3466762/xwiki/architecture.png
>>>>>>
>>>>>> In order to remove dependency of particular back-end implementation
>>>>>> (xmlrpc or rest),
>>>>>> an abstract layer, which includes two plugins (model and storage) will
>>>>>> be created.
>>>>>> 1. model plugin contains the current package of xwiki.eclipse.core.model
>>>>>> 2. storage plugin contains xwiki.eclipse.core.storage including two
>>>>>> abstract classes, AbstractLocalDataStorage and AbstractRemoteDataStorage.
>>>>>>
>>>>>> In this way, all the core implementation and UI components (dialogs,
>>>>>> properties dialog, adapters) in ui plugin will now depend on the model
>>>>>> and storage plugins rather than the xmlrpc implementation.
>>>>>>
>>>>>> Instead of only providing the required jar files, xmlrpc and rest
>>>>>> plugins will also do the following:
>>>>>> 1. extend the AbstractLocalDataStorage and AbstractRemoteDataStorage in
>>>>>> storage plugin
>>>>>> 2. extend the model classes in model plugin
>>>>>>
>>>>>> In this way, all the abstract classes in model and storage plugins will
>>>>>> be initialized in the run time and perform the specified functions.
>>>>>>
>>>>>> If my understanding is correct, I will begin re-factoring work.
>>>>>>
>>>>>> Best regards
>>>>>>
>>>>>> Jun Han
>>>>>>
>>>>>> On 6/11/2011 10:32 AM, Eduard Moraru wrote:
>>>>>>> Hi Jun,
>>>>>>>
>>>>>>> Instead of returning Object, you should return
>>>>>>> org.xwiki.eclipse.core.model.Page or Object, etc.
>>>>>>>
>>>>>>> So the storage abstraction needs to include and abstract model as well 
>>>>>>> in
>>>>>>> order to be usable. This means that the implementation also comes with a
>>>>>>> model implementation (xmlrpc.model.PageSummary for xmlrpc back-end,
>>>>>>> rest.jaxb.model.Page for rest back-end, etc.... all of them implementing
>>>>>>> org.xwiki.eclipse.core.model.Page)
>>>>>>>
>>>>>>> Cheers,
>>>>>>> Eduard
>>>>>>>
>>>>>>> On Fri, Jun 10, 2011 at 7:52 PM, Jun Han<[email protected]>       
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Eduard,
>>>>>>>>
>>>>>>>> Thanks a lot for prompt instruction.
>>>>>>>>
>>>>>>>> I forgot to sync the screenshot to the server. Now it is the correct 
>>>>>>>> one.
>>>>>>>>
>>>>>>>> Regarding the pluggable solution for both xml-rpc and rest, I will try
>>>>>>>> to devise a common storage API for both of them.
>>>>>>>>
>>>>>>>> For example,
>>>>>>>> public Object getPage(String pageId)
>>>>>>>> public List<Object>       getPages(String spaceKey)
>>>>>>>>
>>>>>>>> They will return
>>>>>>>> 1. xmlrpc.model.PageSummary if connecting via xmlrpc or
>>>>>>>> 2. rest.jaxb.model.Page if connecting via rest.
>>>>>>>>
>>>>>>>> If this is the way to go, I will look more into how to implement this.
>>>>>>>> Adapter pattern may be used.
>>>>>>>>
>>>>>>>> Best regards
>>>>>>>>
>>>>>>>> Jun Han
>>>>>>>>
>>>>>>>> On 06/10/2011 12:08 PM, Eduard Moraru wrote:
>>>>>>>>> Hi Jun,
>>>>>>>>>
>>>>>>>>> On 06/10/2011 05:26 PM, Jun Han wrote:
>>>>>>>>>> Hi, Eduard and Fabio,
>>>>>>>>>>
>>>>>>>>>> I finished part of the navigation panel, which shows the connection,
>>>>>>>>>> wiki, space.
>>>>>>>>>> Please see the screenshot at
>>>>>>>>>> http://dl.dropbox.com/u/3466762/xwiki/Screenshot-navigationPanel.png
>>>>>>>>> I think you pasted the wrong screenshot. We`ve already seen this one 
>>>>>>>>> and
>>>>>>>>> I think it's from an early stage of development.
>>>>>>>>>> Adding pages under space is straightforward too, however, it requires
>>>>>>>>>> re-factor a lot of source code, which spreads in the plugin of
>>>>>>>>>> xwiki.eclipse.ui and xwiki.eclipse.core.
>>>>>>>>>>
>>>>>>>>>> I will continue work on displaying more XWiki resources after I 
>>>>>>>>>> finish
>>>>>>>>>> re-factoring the properties editor, action provider (context menu), 
>>>>>>>>>> and
>>>>>>>>>> other dialog windows related to connection, wiki, space.
>>>>>>>>> It should not take that much of a refactoring on the UI part, since 
>>>>>>>>> the
>>>>>>>>> heavy lifting is done in the core.
>>>>>>>>>
>>>>>>>>> What I actually wanted to tell you is that you should take the
>>>>>>>>> refactoring in a modular direction and consider your work as a
>>>>>>>>> contribution and alternative for the existing system and not only as a
>>>>>>>>> replacement. I you can`t do it as a contribution, consider adding a
>>>>>>>>> mechanism that allows you to do so (see our first discussions on
>>>>>>>>> integrating the rest back-end). Keep the abstraction layer 
>>>>>>>>> (interfaces,
>>>>>>>>> model, etc) as the main think the ui and even core components
>>>>>>>>> communicate with and keep the implementation of that abstraction layer
>>>>>>>>> pluggable (xml-rpc, rest, etc). The UI must also be aware of this and
>>>>>>>>> act accordingly.
>>>>>>>>>
>>>>>>>>> We don`t want to do the same replacement work if, for whatever reason,
>>>>>>>>> we want to switch to a different back-end in the future. So keep that 
>>>>>>>>> in
>>>>>>>>> mind at all time during GSoC.
>>>>>>>>>
>>>>>>>>> Besides that, keep up the good work ;)
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Eduard
>>>>>>>>>> Best regards
>>>>>>>>>> Jun Han
>>>>>>>>>>
>>>>>>>>>> On 06/09/2011 07:26 PM, Eduard Moraru wrote:
>>>>>>>>>>> Hi Jun,
>>>>>>>>>>>
>>>>>>>>>>> On 06/09/2011 11:14 AM, Fabio Mancinelli wrote:
>>>>>>>>>>>> Hi Jun,
>>>>>>>>>>>>
>>>>>>>>>>>> I am not sure that syntaxes should appear as a child of 
>>>>>>>>>>>> connection. I
>>>>>>>>>>>> would show this information in the property panel of the 
>>>>>>>>>>>> connection.
>>>>>>>>>>> I think that you should make the "wikis" implicit as well and leave
>>>>>>>> only
>>>>>>>>>>> the Connection Name as top root, just like in my previous proposal:
>>>>>>>>>>>
>>>>>>>>>>> Connection01
>>>>>>>>>>> - wiki1
>>>>>>>>>>> -- spaceA
>>>>>>>>>>> --- pageX
>>>>>>>>>>> - wiki2
>>>>>>>>>>> - etc.
>>>>>>>>>>>
>>>>>>>>>>> As Fabio pointed out, stuff like supported syntaxes and xwiki 
>>>>>>>>>>> version
>>>>>>>>>>> should be displayed in the properties page of a connection.
>>>>>>>>>>>
>>>>>>>>>>> Also, you need to take care when the user enters the user name and
>>>>>>>>>>> password and consider the wiki for which it applies. User Admin on 
>>>>>>>>>>> the
>>>>>>>>>>> main wiki (xwiki:XWiki.Admin) is not the same as user Admin on 
>>>>>>>>>>> subwiki1
>>>>>>>>>>> (subwiki1:XWiki.Admin).
>>>>>>>>>>> I believe that, if you don`t enter the absolute user name
>>>>>>>>>>> (xwiki:XWiki.Admin) and you enter only the relative name (Admin), it
>>>>>>>>>>> will be resolved to the wiki of the resource you are trying to 
>>>>>>>>>>> access.
>>>>>>>>>>> You should, at least internally, always use absolute user names.
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Eduard
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Fabio
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Jun 8, 2011 at 10:26 PM, Jun Han<[email protected]>
>>>>>>>> wrote:
>>>>>>>>>>>>> Hi Eduard and Fabio,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks a lot for your suggestions.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I managed to create a top-level tree expansion when user requests 
>>>>>>>>>>>>> the
>>>>>>>>>>>>> entry point of REST API: localhost:8080/xwiki/rest.
>>>>>>>>>>>>>
>>>>>>>>>>>>> A screenshot is available at:
>>>>>>>>>>>>> http://dl.dropbox.com/u/3466762/xwiki/Screenshot-navigationPanel.png
>>>>>>>>>>>>>
>>>>>>>>>>>>> Now the labels display the whole<href>           attribute, I 
>>>>>>>>>>>>> plan to
>>>>>>>> "syntaxes"
>>>>>>>>>>>>> and "wikis" later on.
>>>>>>>>>>>>> When user clicks the "wikis", the navigation tree will continue to
>>>>>>>>>>>>> expand to show all the sub-wiki names.
>>>>>>>>>>>>>
>>>>>>>>>>>>> It took me a while to figure out the configuration of tree content
>>>>>>>>>>>>> provider, tree viewer and label provider, which is a little 
>>>>>>>>>>>>> different
>>>>>>>>>>>>> with what I did in Eclipse SWT development. As this has been 
>>>>>>>>>>>>> sorted
>>>>>>>> out,
>>>>>>>>>>>>> I would pick up the pace.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best regards
>>>>>>>>>>>>> Jun Han
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 06/07/2011 10:37 AM, Eduard Moraru wrote:
>>>>>>>>>>>>>> Hi Jun,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 06/07/2011 02:05 PM, Fabio Mancinelli wrote:
>>>>>>>>>>>>>>> Hi Jun,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> the REST api also takes into account Wikis, so you should take 
>>>>>>>>>>>>>>> into
>>>>>>>>>>>>>>> account this into the plugin.
>>>>>>>>>>>>>> Also, I think that we need to display the other resources (like 
>>>>>>>>>>>>>> we
>>>>>>>> do
>>>>>>>>>>>>>> now), but maybe we should improve that too.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I`d suggest that we group objects by class name, something like:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> xwiki.org       (wiki/farm/connection name, given by the user)
>>>>>>>>>>>>>> -- xwiki          (main/sub wiki name)
>>>>>>>>>>>>>> ---- Main
>>>>>>>>>>>>>> ------ WebHome
>>>>>>>>>>>>>> -------- XWiki.XWikiComments
>>>>>>>>>>>>>> ---------- 0
>>>>>>>>>>>>>> ---------- 1
>>>>>>>>>>>>>> ---------- 2
>>>>>>>>>>>>>> -------- XWiki.MyClass
>>>>>>>>>>>>>> ---------- 0
>>>>>>>>>>>>>> ---------- 1
>>>>>>>>>>>>>> etc.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 0, 1, 2 above are object numbers, but, in the future, they might
>>>>>>>> change
>>>>>>>>>>>>>> to some other IDs.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The advantage of such an ordering is that, highly used pages 
>>>>>>>>>>>>>> (that
>>>>>>>> have
>>>>>>>>>>>>>> lots of comments, or lots of objects of specific classes) will 
>>>>>>>>>>>>>> allow
>>>>>>>>>>>>>> easier management of the objects.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> If a list of numbers looks too blank, you could have them print 
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> value of the first property it their class, just like XWiki`s 
>>>>>>>>>>>>>> object
>>>>>>>>>>>>>> editor does and you`d have something like:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -------- XWiki.XWikiComments
>>>>>>>>>>>>>> ---------- 0 : Administrator         ('author' property value)
>>>>>>>>>>>>>> ---------- 1 : Guest
>>>>>>>>>>>>>> ---------- 2 : Administrator
>>>>>>>>>>>>>> -------- XWiki.MyClass
>>>>>>>>>>>>>> ---------- 0 : etc.
>>>>>>>>>>>>>> ---------- 1 : etc.
>>>>>>>>>>>>>> etc.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I don`t know what's the status of Attachments (I don remember if 
>>>>>>>>>>>>>> we
>>>>>>>>>>>>>> display them or not), but we should have them as an 'implicit' 
>>>>>>>>>>>>>> first
>>>>>>>>>>>>>> class like:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ------ WebHome
>>>>>>>>>>>>>> -------- Attachments
>>>>>>>>>>>>>> ---------- dog.png
>>>>>>>>>>>>>> ---------- spreadsheet.xls
>>>>>>>>>>>>>> -------- XWiki.XWikiComments
>>>>>>>>>>>>>> ---------- 0 : Administrator         ('author' property value)
>>>>>>>>>>>>>> ---------- 1 : Guest
>>>>>>>>>>>>>> ---------- 2 : Administrator
>>>>>>>>>>>>>> -------- XWiki.MyClass
>>>>>>>>>>>>>> ---------- 0 : etc.
>>>>>>>>>>>>>> ---------- 1 : etc.
>>>>>>>>>>>>>> etc.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Anyway, the main idea is to expose as much as REST API allows. 
>>>>>>>>>>>>>> Check
>>>>>>>>>>>>>> again the API specs.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> You can get creative with the details on how to display/handle 
>>>>>>>>>>>>>> the
>>>>>>>> new
>>>>>>>>>>>>>> stuff. :)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>> Eduard
>>>>>>>>>>>>>>> -Fabio
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Tue, Jun 7, 2011 at 7:35 AM, Jun Han<[email protected]>
>>>>>>>>     wrote:
>>>>>>>>>>>>>>>> Hi Fabio,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I have finished replacing xmlrpc implementation of login
>>>>>>>> functionality
>>>>>>>>>>>>>>>> by sending http GET request to entry point
>>>>>>>>>>>>>>>> (http://localhost:8080/xwiki/rest/) along with 
>>>>>>>>>>>>>>>> username/password.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> A status code of 200 will be regarded as successful while 401
>>>>>>>> means
>>>>>>>>>>>>>>>> login fails.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> The source code have been updated in org.xwiki.eclipse.ui and
>>>>>>>>>>>>>>>> org.xwiki.eclipse.core plugins.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I will begin working on xwiki navigatoin panel and replace 
>>>>>>>>>>>>>>>> xmlrpc
>>>>>>>> code
>>>>>>>>>>>>>>>> accordingly.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> One question is what resources are to be included in navigation
>>>>>>>> panel,
>>>>>>>>>>>>>>>> besides xwiki ->              space ->              pages? and 
>>>>>>>>>>>>>>>> how to display
>>>>>>>> them?
>>>>>>>>>>>>>>>> Best regards
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Jun Han
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 06/05/2011 05:50 PM, Fabio Mancinelli wrote:
>>>>>>>>>>>>>>>>> Hi Jun,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> login/logout can be implemented in order to store on the 
>>>>>>>>>>>>>>>>> client
>>>>>>>> side
>>>>>>>>>>>>>>>>> user credentials that are sent with HTTP requests.
>>>>>>>>>>>>>>>>> Currently there is no way in the REST-api to get a "session
>>>>>>>> token"
>>>>>>>>>>>>>>>>> (like the cookie sent after a login is made using the web 
>>>>>>>>>>>>>>>>> form)
>>>>>>>> so
>>>>>>>>>>>>>>>>> that subsequent requests are performed on the behalf of a
>>>>>>>> previously
>>>>>>>>>>>>>>>>> authenticated user.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> So what is usually done is to send basic-auth credentials with
>>>>>>>> each request.
>>>>>>>>>>>>>>>>> You can start with this. Next you might try to retrieve the
>>>>>>>> cookie by
>>>>>>>>>>>>>>>>> faking a standard login and using that cookie in subsequent
>>>>>>>> requests.
>>>>>>>>>>>>>>>>> The ideal setting would be to implement server side some
>>>>>>>> OAuth-like
>>>>>>>>>>>>>>>>> mechanism, but this is out of scope wrt your project.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -Fabio
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Sat, Jun 4, 2011 at 6:27 PM, Jun Han<[email protected]>
>>>>>>>>         wrote:
>>>>>>>>>>>>>>>>>> Dear all,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I am on the way of replacing the xmlrpc implementation of
>>>>>>>>>>>>>>>>>>                 RemoteXWikiDataStorage implements 
>>>>>>>>>>>>>>>>>> IDataStorage {}.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> One question is about how to implement login and logout
>>>>>>>> functionality
>>>>>>>>>>>>>>>>>> via REST API.
>>>>>>>>>>>>>>>>>>            From REST API document, users can be 
>>>>>>>>>>>>>>>>>> authenticated via
>>>>>>>> something like:
>>>>>>>>>>>>>>>>>> 1. XWiki session
>>>>>>>>>>>>>>>>>> 2. HTTP Basic Auth.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> HTTP basic auth can be implemented via adding HTTP header to 
>>>>>>>>>>>>>>>>>> the
>>>>>>>> HTTP
>>>>>>>>>>>>>>>>>> request, then XEclipse can display Xwiki Resources by parsing
>>>>>>>> the response.
>>>>>>>>>>>>>>>>>> Therefore, do we need to implement login and logout methods?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Best regards
>>>>>>>>>>>>>>>>>> Jun Han
>>> _______________________________________________
>>> devs mailing list
>>> [email protected]
>>> http://lists.xwiki.org/mailman/listinfo/devs
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to