Mise en oeuvre des applinks dans Oracle Content Experience

Présentation

Une applink permet de créer, dans le contexte d’une application existante (ex: portail services), un accès à un folder ou bien un fichier de Oracle Content & Experience Cloud (CEC). L’UI de CEC est alors embarquée sous forme d’iframe, mais l’URL d’accès ne peut pas être dérobée et utilisée en dehors de la fenêtre parent. Remarque: il existe un temps d’attente perceptible par l’utilisateur de l’ordre de 7 à 8 sec lors de la création d’un applink.

Un applink sera utile pour générer le visualisateur/Downloader de fichier à partir de l’interface existante d’une application.

Mise en oeuvre:

Le code ci-dessous permet de valider le bon fonctionnement. Pour des raisons de confidentialité, on utilise un token (Bearer) obtenu avec OAuth. Dans le cadre d’une échange de serveur à serveur, il faudra utiliser une Basic authentication à la place, car il ne peut pas y avoir d’interaction avec l’utilisateur, et donc pas de demande d’authentification.

(Le Client Credential Flow ne semble pas etre proposé dans CEC.)

Les appels REST se feront à partir d’un compte technique.

Pour faire fonctionner ce script, s’authentifier sur CEC avec un compte technique, puis lancer l’URL :

https://<tenant>/documents/web?IdcService=GET_OAUTH_TOKEN

et récupérer le token Value et le remplacer ci-dessous.

(Si c’est une Basic Authentication, mettre « Basic <uid:pwd en base 64> » à la place)

<html>
    <!-- Test Applinks for Oracle Content & Experience Cloud
    Patrick Monaco
    GPM Factory
    -->
<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>

var dAppLinkUrl;
var dAppLinkAccessToken;               
var dAppLinkRefreshToken;               
var dAppLinkRoleName;  
function createAppLink(id, role, assignedUser){  
var token=`Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXg1dCI6IlEzX0hJbUtZd0Z5RXBqcFlDejhSYWNwWHNhQSIsImtpZCI6ImZyY2F0aGV0ZXJ0cmlhbC5jZXJ0In0.eyJzdWIiOiJwbW8iLCJvcmFjbGUub2F1dGgudXNlcl9vcmlnaW5faWRfdHlwZSI6IkxEQVBfVUlEIiwib3JhY2xlLm9hdXRoLnVzZXJfb3JpZ2luX2lkIjoicG1vIiwiaXNzIjoiZnJjYXRoZXRlcnRyaWFsIiwib3JhY2xlLm9hdXRoLnN2Y19wX24iOiJmcmNhdGhldGVydHJpYWxTZXJ2aWNlUHJvZmlsZSIsImlhdCI6MTUxMTI3NjU1Nywib3JhY2xlLm9hdXRoLnBybi5pZF90eXBlIjoiTERBUF9VSUQiLCJvcmFjbGUub2F1dGgudGtfY29udGV4dCI6InJlc291cmNlX2FjY2Vzc190ayIsImV4cCI6MTUxMTg4MTM1NiwiYXVkIjpbImh0dHBzOi8vY29udGVudC1mcmNhdGhldGVydHJpYWwuZG9jdW1lbnRzLnVzMi5vcmFjbGVjbG91ZC5jb206NDQzL2RvY3VtZW50cyJdLCJvcmFjbGUub2F1dGguc3ViLmlkX3R5cGUiOiJMREFQX1VJRCIsInBybiI6InBtbyIsImp0aSI6ImE5MmUyOTU2LTY5ZjMtNDI0NS1hOWEwLTIyMzJiM2M4NzQ5NCIsIm9yYWNsZS5vYXV0aC5jbGllbnRfb3JpZ2luX2lkIjoiYjE5N2VkMjUtY2E0OC00MTZlLTlmYTAtYTk1Mjc3MTk2Nzk3Iiwib3JhY2xlLm9hdXRoLnNjb3BlIjoiaHR0cHM6Ly9jb250ZW50LWZyY2F0aGV0ZXJ0cmlhbC5kb2N1bWVudHMudXMyLm9yYWNsZWNsb3VkLmNvbTo0NDMvZG9jdW1lbnRzIiwidXNlci50ZW5hbnQubmFtZSI6ImZyY2F0aGV0ZXJ0cmlhbCIsIm9yYWNsZS5vYXV0aC5pZF9kX2lkIjoiNzg3NzE0MTYzNDcwOTQyMyJ9.AhmTxXszGWYyQDdu9DSBohyu8KY5LHwUGBdEO33EjAWvQcse23lcXWU8q97jgM4C4KUWLalokQ3KHjJvUrgDUaUp0PC0_hAarknr7MmczBdpCC5X-iByUyYU98T_Q87USCAM_e_N7-l--5S5nFUwBOI15PGC16iZjA0wDnXvu9ATyqB_Fmz8wDZP-XAwHSyy1dyy7OFcK_IYBwVFgdhcY2PTXM97XN6b_QXN4ZJ-F37U8vQMupF1kq958OgDSukRPKz4coY7sGMFUHRfwhnZQ6L-ZkLXvMgk2NAHQPweL5dbYKMiAEdpBei15Q3sFCKEJNTRqmKqEw87Acg8YaDH7Q`
    var payload = `{
    "assignedUser": "` + assignedUser + `",
    "userLocale": "French",
    "role": "` + role +`"
    }`;
    $.ajax({
        type: "POST",
        url: "https://<tenant>.documents.us2.oraclecloud.com/documents/api/1.2/applinks/file/" + id,
        data: payload,
        processData: false,
        headers: {
               "Authorization" : token               
                 },
        cache: false,
        DataType: "html",
        success: function(response) {
            dAppLinkUrl = response.appLinkUrl;
            dAppLinkAccessToken = response.accessToken;
            dAppLinkRefreshToken = response.refreshToken;
            dAppLinkRoleName = response.role;
            $('#content_frame').attr("src", dAppLinkUrl);
            console.log(dAppLinkUrl);
            console.log('Role=' + dAppLinkRoleName);
        },
        error: function (xhr, status) { 
          alert('SB001 - Unknown error - Status: ' + status + responseText);
        }   
      });  
}   
</script>   
</head>   
<body>
<script>
    $( document ).ready(function() {
    // folder -- var id = "XXXXXXX21EAA21040E6FBAA684E9015A1C98104";
                var id = "XXXXXXXXXXX6913F16E4FBAA684E9015A1C98104";
    var role = "downloader";
                var assignedUser = "XXXXXXXXXX2C91FBAA684E9015";
                //Create Folder Applink or Create File Applink service
                var appLink  = createAppLink(id, role, assignedUser);
    function OnMessage (evt) {
        //alert('evt= ' + evt.data.message);
        console.log("DOCSRestFilterSample: onMessage function " + evt);
        if (evt.data.message === 'appLinkReady') {
            //alert('appLink ready');
            console.log("OnMessage invoked for appLinkReady event...");
            var embedPreview = "true";
            var iframe= document.getElementById("content_frame");
            var iframewindow= iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
            var msg = {
                message: 'setAppLinkTokens',
                appLinkRefreshToken:dAppLinkRefreshToken,
                appLinkAccessToken:dAppLinkAccessToken,
                appLinkRoleName:dAppLinkRoleName,
                embedPreview:embedPreview
            }               
            console.log("DOCSRestFilterSample: sending message to iframe with access and refresh tokens");
            iframewindow.postMessage(msg, '*');
        }
    };
        window.addEventListener && window.addEventListener('message', OnMessage, false);
});   
</script>
<body>
    <iframe id="content_frame"
            src="" 
            style="width: 100%; height: 620px; overflow: scroll;" >
    </iframe>
</body>
</html>

About the author

GPM Factory

Laisser un commentaire