<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> 
        <base href="https://issues.jboss.org"> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt" bgcolor="#f5f5f5"> 
            <!-- header here --> 
            <tbody>
                <tr> 
                    <td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
                        <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                            <tbody>
                                <tr> 
                                    <td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px" width="32"> <img id="header-avatar-image" class="image_fix" src="https://static.jboss.org/developer/gravatar/84386cc35cecf75d5eed5c9142e5f154?d=mm&amp;s=48" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top"> </td> 
                                    <td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="davidmartin" id="email_davidmartin" href="https://issues.jboss.org/secure/ViewProfile.jspa?name=davidmartin" style="color:#3b73af;; color: #3b73af; text-decoration: none">David Martin</a> <strong>edited a comment</strong> on <a href="https://issues.jboss.org/browse/AGDROID-708" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-b7f2ced9-a2c7-4012-b9f6-ca0d4504cb2b" height="16" width="16" border="0" align="absmiddle" alt="Task"> AGDROID-708</a> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
                        <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate"> 
                            <tbody>
                                <tr> 
                                    <!-- there needs to be content in the cell for it to render in some clients --> 
                                    <td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 15px; background-color: #ffffff; border-left: 1px solid #cccccc; border-top: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly" height="10" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                            <tbody>
                                                <tr> 
                                                    <td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://issues.jboss.org/browse/AGDROID-708" style="color: #3b73af; text-decoration: none">Re: Investigate &amp; evaluate couchbase-lite-android &amp; the sync_gateway as a data storage &amp; sync solution</a> </span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-special-margin comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; border-bottom: none; padding-bottom: 0" bgcolor="#ffffff"> 
                                        <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0; padding-top: 10px"> <span class="diffcontext">Progressing investigation in https://github.com/david-martin/CouchbaseTest.<br>WIll update this comment with more info as I go along.<br>The majority of below is based on what I disovered while using the Android SDK.<br><br>h2. Licensing of components<br><br>* Apache-2.0 - https://github.com/couchbase/couchbase-lite-android<br>* Apache-2.0 - https://github.com/couchbase/couchbase-lite-ios<br>* MIT - https://github.com/couchbase/couchbase-lite-net<br>* Apache-2.0 - https://github.com/couchbase/sync_gateway<br><br>More repos: https://github.com/couchbase<br><br>Info on differences between 'Enterprise' &amp; 'Community' https://www.couchbase.com/products/editions<br><br>h2. Mobile API<br><br>API documentation https://developer.couchbase.com/documentation/mobile/1.5/references/couchbase-lite/couchbase-lite/index.html<br><br>The API looks to be the same across SDK platforms.<br>A `Manager` is used to create/access a `Database` on device.<br>You can create/modify a `Document` in the `Database`.<br>You can get a `View` of a set of `Documents` based on a `Query`.<br>A `Replication` can be setup to push and pull `Database` changes to the Sync Gateway.<br>An `Authenticator` can be configured for auth when doing replication.<br><br>h2. Mobile platforms<br><br>* Android - https://github.com/couchbase/couchbase-lite-android<br>* iOS - https://github.com/couchbase/couchbase-lite-ios<br>* .NET - https://github.com/couchbase/couchbase-lite-net<br><br>h2. Syncing mechanism to a remote database &amp; other mobile apps<br><br>The `Repliation` class is responsible for replicating/syncing data between a local &amp; remote `Database`.<br>https://developer.couchbase.com/documentation/mobile/1.5/references/couchbase-lite/couchbase-lite/replication/replication/index.html<br>Mobile Apps talk to the Sync Gateway, which notifies any interested connected clients of changes to `Documents`.<br>This is done in realtime i.e. Realtime Sync.<br><br>h2. Offline capability<br><br>The Mobile SDKs include/allow access to a lightweight database (sqlite or forestdb).<br>The developer has full access to this database while offline. <br>The database gets 'replicated' to/from the sync gateway by creating a Push &amp; Pull Replication instance.<br><br>h2. Conflicts<br><br>There's documentation on how to programatically list conflicts and ways to resolve them<br>https://developer.couchbase.com/documentation/mobile/current/guides/sync-gateway/resolving-conflicts/index.html<br>https://developer.couchbase.com/documentation/mobile/current/guides/couchbase-lite/native-api/document/index.html#document-conflict-faq<br><br>For the server, it seems possible to have automated timestamp based conflict resolution.<br>https://developer.couchbase.com/documentation/server/current/xdcr/xdcr-timestamp-based-conflict-resolution.html<br><br>h2. Authentication &amp; Authorisation (e.g. OIDC integration)<br><br>The Sync Gateway has the ability to manage users &amp; permissions.<br><br>It is also possible to integrate with an external OIDC provider.<br>https://developer.couchbase.com/documentation/mobile/1.5/guides/authentication/openid/index.html<br><br>Couchbase docs has general info on OIDC and examples with cloud providers.<br>As part of investigation, the sample Android App has Keycloak working for authentication https://github.com/david-martin/CouchbaseTest.<br><br>For dynamic authorisation, there is a 'sync function' that can be defined.<br>https://developer.couchbase.com/documentation/mobile/1.5/guides/sync-gateway/sync-function-api-guide/index.html<br>"The sync function is the core API you interact with on Sync Gateway. For simple applications it might be the only server-side code you need to write. For more complex applications it is still a primary touchpoint for managing data routing and access control."<br><br>I don't fully understand the scope of what can be done with the sync function.<br>There is also</span> <span class="diffaddedchars" style="background-color:#ddfade;"> scope</span> <span class="diffcontext"> for an app server sitting in front of the sync gateway (as a proxy) to provide authentication.<br>More info at https://developer.couchbase.com/documentation/mobile/1.5/guides/authentication/custom-authentication/index.html.<br>Again, I'm not sure how much is possible this way. For example, is it possible to define 'middleware' in your own server that could check keycloak roles of the user to see if they are authorised to access/modify certain data.<br><br>(Possibly needs a spike to see whats possible around custom authorisation)<br><br>h2. Compatibility with Kubernetes/OpenShift<br><br>Docker images compatible with OpenShift were created as a result of a partnership with Couchbase. This was demoed in Red Hat Summit 2017. Kubernetes templates are also available from this demo.<br><br>* https://www.youtube.com/watch?v=fxox6DD96HQ<br>* https://github.com/couchbase-partners/redhat-openshift<br>* https://github.com/couchbase-partners/couchbase-kubernetes-openshift<br><br>I haven't tried this out.<br>However, it might be a good way to proceed i.e. try create an APB that uses these images &amp; templates, and allows couchbase-lite-android to hook up to it.<br><br>This could be extended, if successful, to try use the mobile cli &amp; mobile-config.json along with the Aerogear Android Core SDK to hook up automatically to what the APB provisions.<br><br>It could be extended further to add authentication to the App leveraging Keycloak. This would involve updating the sync gateway's sync-config.json file to add keycloak client/secret details when keycloak and couchbase are bound.</span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                                        <table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                                            <tbody>
                                                                <tr> 
                                                                    <td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0; vertical-align: middle"> <a href="https://issues.jboss.org/browse/AGDROID-708#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-a4ff8cf7-b061-4e07-b0b8-3215120aa4ee" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle"> </a> </td> 
                                                                    <td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://issues.jboss.org/browse/AGDROID-708#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> </td> 
                                                                </tr> 
                                                            </tbody>
                                                        </table> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <!-- there needs to be content in the cell for it to render in some clients --> 
                                <tr> 
                                    <td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #ffffff; border-top: 0; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly" height="5" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
                        <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                            <tbody>
                                <tr> 
                                    <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> This message was sent by Atlassian JIRA <span id="footer-build-information">(v7.5.0#75005-<span title="fd8c849d4e278dd8bbaccc61e707a716ad697024" data-commit-id="fd8c849d4e278dd8bbaccc61e707a716ad697024}">sha1:fd8c849</span>)</span> </td> 
                                    <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                        <table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-4f4e6a3a-6f9a-4faf-b782-d03964c97760" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix"> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
            </tbody>
        </table>   
    </body>
</html>