On Fri, Apr 15, 2016 at 6:25 AM, fitz <[email protected]> wrote:
> Hello Thomas,
>
> Thank you very much and I really appreciate your help and guidance. And
> thank you for helping me improve.
>
> I will firstly use the existing REST APIs to develop this project, And
> maybe in the future I can make some specific APIs to improve performance if
> time permits.
>
> Yes, the search APIs can help me get need-update contacts after the
> last-sync-time and solve the one by one comparing problem. And I will be
> familiar with the use of search APIs as soon as possible so that I can use
> it in the synchronization code.  Thank you for solving my confusion.
>
> And for authentication and security, considering your precious advice, I
> will try to use the first idea, and just return the session so that other
> xwiki android apps can use the httpclient with this session id to
> authenticate with the server.  And I will firstly implement this method and
> test the effectiveness of this scheme as soon as possible.

All that sounds good.

>
> For the xwiki-contrib, I will ask to join the group, develop this android
> project and maybe make a contribution.

Looks like you are already member of XWiki Contrib actually.

>
> Yours sincerely
> Fitz Lee
>
>
> 2016-04-14 17:33 GMT+08:00 Thomas Mortagne [via XWiki] <
> [email protected]>:
>
>> On Thu, Apr 14, 2016 at 7:22 AM, Fitz Lee <[hidden email]
>> <http:///user/SendEmail.jtp?type=node&node=7598982&i=0>> wrote:
>>
>> > Hi Thomas,
>> >
>> >
>> > Thank you so much for your reply and recognition.
>> >
>> >
>> > 2016-04-12 17:18 GMT+08:00 Thomas Mortagne <[hidden email]
>> <http:///user/SendEmail.jtp?type=node&node=7598982&i=1>>:
>> >
>> >> Hi Fitz,
>> >>
>> >> Great to see so much motivation from you :)
>> >>
>> >> Just don't forget that GSOC coding period is not started yet and that
>> >> we still have no idea how many slots Google will give us and who we
>> >> will select this year (this will be 22nd April).
>> >>
>> >>
>> > Yeah, I know the coding period of GSoC, and now I'm just striving and
>> > looking forward to get this project. If I really do not pass the GSoC
>> > application, it doesn't matter and I have learned a lot. As I have said,
>> I
>> > will be very happy if there is anything I can help.
>> >
>> >
>> >> Yes contact synchronization in
>> >> https://github.com/xwiki-contrib/android-authenticator is not the
>> >> beginning or an experiment I never had time to finish so it's more
>> >> pseudo code that never worked yet.
>> >
>> >
>> > Considering the XWikiRESTfulAPIs in
>> > http://platform.xwiki.org/xwiki/bin/view/Features/XWikiRESTfulAPI, the
>> apis
>> > have been well designed so that maybe I can't modify those apis. I
>> should
>> > just make use of the existing api resources to design the
>> synchronization
>> > of contacts and the process of sign-in and sign-up.
>> >
>> > Since there isn't the api like "/sync" in sampleSyncAdapter
>> > google-engine-server, which can help us to get update contacts when
>> sending
>> > the phone's dirty contacts and the last time of synchronization to
>> server,
>> > we cann't use the synchronization mechanism in SampleSyncAdapter. I
>> think
>> > maybe we can use the following method to synchronize contacts.
>> >
>> > * server to client (update local contacts from server when needed):
>> > In the function, SynAdapter.onPerformSync(), the process is
>> > "XWikiConnector.getAllUsers>> compare with the local contacts and find
>> the
>> > contacts which should be updated >> ContactManager.updateContacts".
>> > Available apis:
>> > GetAllUserList: curl
>> > http://localhost:8080/xwiki/rest/wikis/query?q=object:XWiki.XWikiUsers
>> > GetUserInfo: curl
>> >
>> http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/XWiki/pages/FitzLee/objects/XWiki.XWikiUsers/0
>> >
>> > * client to server (edit, add, delete contacts and meanwhile synchronize
>> > from client to server):
>> > When editing, adding or deleting contacts in android activities, we
>> should
>> > first request the xwiki server. Update contacts if allowed, or discard
>> the
>> > modification if not be authorized or have no permission.
>> > Available apis:
>> > EditUser: curl -u FitzLee:fitz2xwiki -X PUT -H "Content-type:
>> > application/x-www-form-urlencoded" -H "Accept: application/xml" -d
>> > "className=XWiki.XWikiUsers" -d "property#company=iie"
>> >
>> http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/XWiki/pages/FitzLee/objects/XWiki.XWikiUsers/0
>> >
>>
>> Yes the goal for now is to have an application working on any existing
>> wiki (lets say not older than 7.4.x since that's the current LTS but
>> the lowest the better).
>>
>> You can if you have time implement new REST APIs (it's always usefull
>> anyway) that would improve performances for example but the
>> application should not assume that these new API would exist in the
>> target instance that could be too old for it. So in the GSOC timeframe
>> it would be safer to just do with what already exist which indeed
>> might give more work to the application than a specific API designed
>> specifically for synchronization but it should be doable.
>>
>> > I see two main possibility for this:
>> >> * the first thing you should do I think is download the jetty/hsqld
>> >> all in one distribution on
>> >> http://www.xwiki.org/xwiki/bin/view/Main/Download and use that as test
>> >> server (you have admin right in it and can create as many test users
>> >> or groups as you want)
>> >> * as soon as you want to test volume and compatibility with existing
>> >> instance of XWiki you can register on http://www.xwiki.org which
>> >> contains 1519 users right now
>> >>
>> >
>> > I have downloaded the enterprise xwiki jetty server 8.0 and tried to
>> create
>> > some applications and understand the features of the server. Using the
>> > administrator Admin:admin, I have create some users and groups. And I
>> use
>> > the python script curl to learn how to get user-list, group-list and how
>> to
>> > modify them with the restfull apis. In addition, I find a demo which is
>> > useful for me to be familiar with the apis, like
>> > xwiki-contrib/android-client(
>> https://github.com/xwiki-contrib/android-client).
>> > And I will write my own android restful interactive method, mainly used
>> for
>> > the authentication and the management of users and groups.
>> >
>> > But for testing the volume and compatibility of the synchronization in
>> > SynAdapter.onPerformSync(), how do we compare the contact differences
>> > between server and client and find the update contacts which need to be
>> > updated?  It's a big problem if there are 1519 users and maybe I should
>> > compare one by one to find which contact should be updated because
>> > there'are no relevant apis to get the need-to-update contacts from
>> server
>> > after the last time of synchronization.
>>
>> You don't have a sync API but you have a search API in which you can
>> request all the documents containing a user object and that were
>> modified after some date for example. You can use either sql or solr.
>>
>> >
>> >> (1) sign in
>> >> > it is easy,just like my analysis of android SampleSyncAdapter,
>> including
>> >> the
>> >> > server connection with XWikiconnector and the account added by
>> >> > AccountManager
>> >>
>> >> Don't reduce too quickly the level of difficulty on this side, one
>> >> thing you will have to work around is that standard XWiki instance
>> >> have no token based authentication so you will have to hack an as safe
>> >> as possible BASIC auth based implementation of Android authenticator
>> >> (which mean users of the authenticator can't just ask for the token
>> >> and connect to XWiki server).
>> >
>> >
>> > Thank you for your reminder.  From the restfull apis, I have seen the
>> two
>> > methods of authentication,  including HTTP BASIC Auth and XWiki session
>> > auth.  But Question is how users of the authenticator to connect to
>> XWiki
>> > server without username and password as I can't modify the
>> authentication
>> > method in the server and can only use the BASIC Auth?  use BASE64 to
>> > encrypt the password? or ask for the session and communicate with
>> server?
>> > and BASE64 can just enhance the security in some extent. and maybe we
>> can
>> > use the https to ensure the authenticator security. I am so confused.
>> Could
>> > you give me some tips about authentication and security?
>>
>> I did not had time to experiment on this but here as some ideas of
>> things to try:
>>
>> 1) return whatever identify the session (I had forgotten about session
>> access, thanks for the reminder :)). Then the application put that
>> session id in whatever http client tool it want to use. That's
>> probably the safest and what look the most like a the classical token
>> based access.
>>
>> 2) provide a preconfigured instance of Android HTTP Client in which:
>> 2.a) a sessions have already been started with the server and the HTTP
>> Client keep it alive (that's the safest I can think of right now)
>> 2.b) the BASIC auth header cannot be read from outside (for example
>> extends it in a custom class and forbid any public access to the
>> Authorization header) that can be used to request the XWiki server
>>
>> 3) the worst case scenario is to return the BASIC auth header (it
>> looks like "Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l"). It's
>> encoded but it's easy to decode. The application would just set it in
>> whatever http tool it's using. An application can use an authenticator
>> only if the user allows it and the alternative is that each
>> application deal with login/password on its side so it's still better
>> than nothing :)
>>
>> Whatever solution is chosen the best would be to provide some small
>> helper library that deal with XWiki authenticator and for example
>> generate a pre-configured http client instance for the application
>> with what the authenticator return. That way it's easier to change the
>> way the authenticator works without breaking application (at least
>> application that use the recommended library).
>>
>> >
>> >
>> >> > (3) synchronization of contacts
>> >> > (4) edit the contact
>> >> > (5) access by other apps
>> >> > Question: Are there more other requirements in this app, like adding
>> >> > friends(general person) and creating new xwiki
>> account(administrator)?
>> >> > maybe it will cause more demands and be more complex.
>> >> >
>> >>
>> >> There is no real "friends" system in standard XWiki and anyway the
>> >> main use case for this application being intranets you usually want to
>> >> simply synchronize all users of the wiki since those are your
>> >> coworkers. An improvement would be to allow the user to select a list
>> >> of XWiki groups to synchronize if you don't want the whole wiki in a
>> >> big company or public wiki like xwiki.org for example.
>> >
>> >
>> > So there are two choices:
>> > 1.  Synchronize all contacts who are my coworkers
>> > 2.  Synchronize the contacts in the XWiki group which authenticator-user
>> > wants to select.
>>
>> And possibly other idea you may have while knowing XWiki better :)
>>
>> But on my side 1 and 2 would already be great.
>>
>> >
>> >> 4. support version and ui
>> >> > (1) ui design
>> >> > * material design >=4.4 with the support library support-v7
>> >> > (2) support version
>> >> > * The ui design can support the lowest 2.3 version and the android
>> >> > sampleSynAdapter can also support 2.3 version. So I think our
>> >> authenticator
>> >> > app can support the lowest 2.3 version if needed.
>> >> > Question: Maybe there are somethings I have not noticed, so this
>> >> conclusion
>> >> > is wrong, please give me some advice? Is that OK?
>> >>
>> >> Supporting the lowest possible version is always nicer for users but
>> >> according to http://developer.android.com/about/dashboards/index.html
>> >> no need to go beyond 4.1.
>> >>
>> >> 4.4 seems to still be a bit too recent and might left behind too many
>> >> users.
>> >>
>> >>
>> > Yes, so 4.1 may be the best choice. For the design of UI, the support
>> > library support-v7 can solve the problem. And I will use the perfect
>> > material design style if the android sdk version >= 4.4.
>> >
>> >>
>> >> > 5. account permission
>> >> > In AccountGeneral.java there are two permissions , like
>> >> > AUTHTOKEN_TYPE_READ_ONLY, AUTHTOKEN_TYPE_FULL_ACCESS.  Could you tell
>> me
>> >> > what the permissions main?  other xwiki instance access  limits ?
>> >> Account
>> >> > manager? And where should I use them?
>> >>
>> >> You have many right on XWiki (and any extension can add more) plus it
>> >> depend what part of the wiki you are accessing.
>> >>
>> >> But since you don't have any concept of token associated to an
>> >> application in standard XWiki the application will have whatever right
>> >> the user have so I guess you can return AUTHTOKEN_TYPE_FULL_ACCESS all
>> >> the time in the Android authenticator (then the application will have
>> >> to deal with 403 errors).
>> >
>> >
>> > OK, I will return AUTHTOKEN_TYPE_FULL_ACCESS and deal with the
>> unauthorized
>> > or other response error.
>> >
>> >
>> >>
>> >> --
>> >> Thomas Mortagne
>> >> _______________________________________________
>> >> devs mailing list
>> >> [hidden email] <http:///user/SendEmail.jtp?type=node&node=7598982&i=2>
>> >> http://lists.xwiki.org/mailman/listinfo/devs
>> >>
>> >
>> >  At last, should I use the xwiki JIRA to create a custom issue and give
>> you
>> > a pull requst when I have some new idea or make progress?
>>
>> Anyone who is a member of the XWiki Contrib organization (basically
>> anyone who ask to be) have write access on
>> https://github.com/xwiki-contrib/android-authenticator so no need for
>> pull request. It's not like it was in a very stable state right now
>> anyway :)
>>
>> >
>> > Best Regards,
>> > Fitz Lee | UCAS Master
>> > _______________________________________________
>> > devs mailing list
>> > [hidden email] <http:///user/SendEmail.jtp?type=node&node=7598982&i=3>
>> > http://lists.xwiki.org/mailman/listinfo/devs
>>
>>
>>
>> --
>> Thomas Mortagne
>> _______________________________________________
>> devs mailing list
>> [hidden email] <http:///user/SendEmail.jtp?type=node&node=7598982&i=4>
>> http://lists.xwiki.org/mailman/listinfo/devs
>>
>>
>> ------------------------------
>> If you reply to this email, your message will be added to the discussion
>> below:
>>
>> http://xwiki.475771.n2.nabble.com/Questions-Gsoc2016-XWiki-Android-authenticator-tp7598932p7598982.html
>> To unsubscribe from Questions, Gsoc2016, XWiki Android-authenticator, click
>> here
>> <http://xwiki.475771.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=7598932&code=bGVlZml0c0BnbWFpbC5jb218NzU5ODkzMnwtMjQ4MTUwNw==>
>> .
>> NAML
>> <http://xwiki.475771.n2.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>
>
>
>
>
> --
> View this message in context: 
> http://xwiki.475771.n2.nabble.com/Questions-Gsoc2016-XWiki-Android-authenticator-tp7598932p7599003.html
> Sent from the XWiki- Dev mailing list archive at Nabble.com.
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs



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

Reply via email to