 Thank you so much for coming to my presentation. The presentation is going to be online integration success stories. So, how do you want to actually experience a success story? So, here are some simple steps. First of all, this style called the Quadra Online Development Edition on a dedicated server. You set up the SSL for your server so that it is all safe. Everything when people are actually accessing that, install the integration between your document storage and the online. Or of course, like if you do not have an integration for the online, you can create it yourself. You implement first the rest endpoints in the document storage and then you modify your web app so actually that you can see the online inside the web app. And then you enjoy the success. Sometimes it is not that totally easy because you might need some special needs in your application that are not 100% covered by the online. So, in that case, you would like to do something additional in the online so that it is very explosive for you. So, have a look at what we have done for some of these people. So, Alfresco. Alfresco connector was announced just yesterday by Filipe, Emma and his conference, so that it is possible to use the online for the editing in Alfresco. And they actually had some additional needs. So, their initial need was that they have serial nodes of the online that they need to monitor. And they need some central place like where they are collecting the logs and see the events like files open, files closed, stuff like that too. And it is also supposed to kill documents and stuff like that. So, for that, we have implemented support for this monitoring. So, the copyright online in the configuration file, you can specify to which server we should be sending the logs that are, sorry, not logs, but the commands that normally are going to the admin console. And so, there is one central place that can actually like collect these admin consoles calls and aggregate that from several nodes and do something with them, what is necessary. So, it was for them. So, egroupware. egroupware, my thanks to them for creating the connector. And they had some additional needs as well. So, for them, the printing in Firefox was inconvenient. Like in Chrome, it was working so that like, well, printing in general in the... that browser has to be done so that it is first exported to PDF and then the user actually downloads it and brings it from the PDF. So, that's how it has to be written from the web browser. But in Chrome, there's some additional support that you can see the printing dialogue and the preview of the PDF because it is possible to do Chrome that actually, like, this PDF is intended for printing. In Firefox, we have previously used only the normal download thing which was not convenient because the users actually didn't know what to do with the files. So, like, we have extended that so that it is more convenient and, yeah, egroupware was happy. And also, they had some additional needs in the local files. I think that they have even provided a patch which was awesome. And, yeah, so the files were updated. Everybody happy. Cool. So, again, these guys created the connector themselves but they had some special needs about the UI. So, as you can see in the screenshot, they had some additional buttons that are actually, like, outside of the screen, sorry, outside of the iframe where the collaboration lives and in there, like, they needed, they needed this functionality that it is not, like, provided, like, inside the iframe but from outside. It is because, like, one of the functions that they have is actually, like, that one of the view is kind of a master view and these others are, like, more dependent on that. So, like, the master view is some kind of possibility to actually close the other views which is a different need. So, yeah, we have added the stuff for them so that they could do that easily. And, yeah, everybody happy again. Next cloud. Next cloud connector was originally developed by Quawara but now, next cloud is adding lots of features in there as well which is awesome. And, like, you can see where it lives but there are many features in the online that they are, like, necessary for the next cloud integration. So, for example, one thing was a specification of Quawara so that, like, you can see or you can define from the next cloud how the user should be presented in the UI and so in things like comments in the document you can see the picture of the user and that is the same as in the next cloud and also, like, you can see the picture also in the list of the users. Now, like, recently, next cloud went even further so that, like, this list of users is actually taken out of the iframe of the online and it's presented directly in the toolbar in the next cloud and so for that we had to go in the integration even further so we had to provide a way, like, how to get the list of the users how to actually communicate the changes in the amount of users and stuff like that in the next cloud bar where the post messages. Then there was also templates so that, like, you can choose, like, when you are creating a document you can choose one of the templates and, like, which is, again, hosted directly in the next cloud so, like, it has to be, like, extended in this mobile-like protocol how it is passed to the iframe and then how is it used internally. And, collectively, that was hosting capabilities because next cloud has to be even with older online instances so, like, for this it was invented and you think how to actually tell the integration that something, some feature, for example, this is a network source, it's available all so, like, they can read it as the first thing in the JSON they see, like, it is supported or not and accordingly they present the UI to actually choose the templates. On cloud, again, originally the integration was implemented by Quabra now they are featured from old cloud as well and for them, the biggest, like, big need was actually watermarking so, what we have implemented so far is that, like, the tiles that are, like, that all together, like, compose the document these tiles, each of them can actually have a watermark like small, sometimes, that says, okay, so this document is private or, I don't know, whatever you need to do that the problem is that it is not per view so, like, one, the user who opens the document first like the watermark is applied according to that but the next people who actually are connecting to this document see still the same watermark as the first person so now we are working on this, on being able to split that so, for example, like, each of the view can have, like, the name of the user of that specific view so there is, like, just one document many people see the same document but each of them has their own watermark so that you will be able to track, for example let's leave the information if you are interested Pideo is another integration again, Pideo guys did the integration themselves and for them to be able to use that like, they were generating the token in a way that we didn't actually expect previously so previously, like, we were somehow restricting the characters that can be used in the access token but for them, like, we need to expand so that, like, integration is easy for them so that they do not have to, like, recreate the way how they are actually creating the access token so we have fixed that or improved and they can continue with the integration Ruf has their own connector implemented by some distribution and again, there are some things that needed to be improved so in that case, it was safe as and handling of the full screen of the presentations because of some security settings or the browser and communication with that and stuff like that so again, after we implemented all the slides you can see the screenshot so that was, like, when you left your integration and do the stuff but what actually you have to do to create an own integration so to be able to create an integration you should understand a bit like what is the general structure of the integration so basically the integration has to be composed from two things so the things that are in green that are the things that the user sees and blue is actually, like, this one so this is actually, like, your web app that you are presenting to the user and if you want to add this iFrame with the online editor so that's, like, what the user sees but to be able to do that like, you, your, like, our online has to talk to the online server so that, like, it provides the this is the thing that actually provides the editing like where the LibreOffice instance lives and that's the background job but also has to provide the host there which takes care of loading and saving the data from your backend so that is the backend part kind of and this is the background getting some very, like, easy integration basically needs just three small things so you need to have a way how to actually download the file like from your, from your, from your backend uploading back so that's an address endpoint and there has to be something that is called check file info that actually provides the information about the file itself so that is the thing that, that defines the the file name, file size and then, like, if you, if you want to go further this is where you can, can provide the what to monitor, you can provide there some additional, additional options like how to, which effect like how the effect, even the UI online is integrated in your web app because you can, for example, like hide the save button very easily or forbid save or save a, or save as function and things like this it is all, all provided in this in this check file info by, by your integration then you have to have some kind of way of providing a security token so, so that is because, like, when you have your web app you already have some kind of authentication for the user so that the online has to, has to use the same thing in some way so that, like, we do not have to ask the user again because it would be, like, extremely convenient when the user, like, in your web app clicks on a, on a file and when the file is being opened the user will be again asked for the, for the password so this is to actually overtake that so your, your integration somehow provides, provides a security token that is then routed through the, through the online that, that part and the back end and then it is used for the communication between between the get file and put file and check file, file info and, like, the online backend for this, for this access of the files embedding the, the iframe itself it is reasonably straightforward what is a bit unexpected when you, when you are doing the, the integration is that, that you have to, you have to use host requests, not get requests when you are, when you are actually embedding the iframe it is because, like, if it was a get request that access token would be visible and at that time, like, it would be, like, not, not really safe to, to pass it this way so, so, like, this initial, initial request has to be done by a host to, to put, to round-trick the token safely but then, like, further, further communication but then it goes, like, most developed, the best of it and there are some get requests as well but then these, these aren't going to go by anymore so this list, the recommended steps just a bit of a summary and, like, what you have to do you first add the rest endpoints to your backhand then you implement the check-file for endpoint for the, for the file name and stuff like that now you can, like, create some small to the web page that has a, that has a submit button and the URL for, for, for creating the, for creating the actual content and then, like, when you press submit you should see that the, that the collateral line has been, like, triggered and it tries to actually get the, get the stuff from the, from your endpoint and when you get working you integrate it in your web app the way, how, how you need it so, like, you, you create the, the iframe most probably somehow dynamically in JavaScript, that's the most usual way how to do it and then, of course, the next step and at this stage you will, you will see it, like, directing your web app you improve the, the rest endpoints so that they actually load the real files not only this fake hello world as the first thing then, of course, you have to add support for this for this access token access token handling so that the user doesn't have to authenticate and actually, like, people cannot, like, just load whatever, whatever files you have there a bit of authentication the recommended thing for this is actually that the access token is more or less a random number and the information, like, which user and which documents this belongs to is a knowledge that you have only in your backend like, there would be a possibility that like, you somehow cache it into some strong cache and use that for the access token but I think, like, from my point of view it is better not to expose it at all and have it just, just in your server because that way, like, if the access is open it's just a random number nobody will be able to guess it just and, yeah really, really close your data and then implement food files so actually, like, the updates appear in the, in the repository so, in your backend afterwards if you want to then, like, tweak the UI further you can you can have some some, some, some improvements or or changes in the UI without even patching the online code and it is possible to add buttons or any buttons about messages it is, it is described so, like, over the client there are, like, many messages added that allow you to, to, like, modify the loop of the online when it's integrated in your app and, yeah there's a post-message API which is, which is, like, both directionals so, for example for, for stuff like this inserting button you would be the, you call the post-message with with message, with ID insert button but there are some interactions that are, like, more advanced for example for Save As you have to, you have to, like you first get a message that your integration should show a Save As dialog for the user to specify the name then the user, when they specify the name the integration has to call back via, like, another post-message that the user has finally provided the name so in the online, like, we get this name and finally provide the Save As standard this just lists the the possibilities, like, that are in the check file info to actually, like, modify the UI I don't think I will be reading through that but I will let you learn to take a picture but I will also do the presentation as well and, yeah so, if you have some special needs partner with us because we will have to help you to develop, like, whatever you need in addition to the stuff that is already provided there are some additional things that for which I didn't have a specific partner write down, either because I cannot share the name or, you know yeah, because I should not share the name and, yeah so one was extensions in the boot file so in the boot file when it is performed again so, again if the partner needed some additional information about, like, what triggered this action so was it out of safe or was it, like, triggered by the safe button and also they needed information about if the document was actually at the time of saving if it was modified by the user or not so now they have some additional header HTTP header in their request they can make methodically in their integration and another thing which was quite a big thing was using another authentication mechanism so it was not convenient for this particular partner to actually use the SSToken because they had some trouble generating or adapting their code to actually generate one so instead, like, it is possible to pass some special header that they are using their token that they need to process some different way so this was possible to add this and we also added some related booties handling and of course, like, there are many small things that we have done mostly as backfixing or, you know, some small features another big thing that we have done for the partner so they had very specific needs regarding the PDF handling so like that this was, like, how the PDF looked like when they opened the PDF it is because the graph is normally, like, when you when you ask it to actually load the PDF it breaks it down into draw shapes and opens it in a draw which was inconvenient for this partner because they needed, like, a very good fidelity of the PDFs so what we have done was that we have integrated PDFM which is the library that is used by Nitro for actually, like, showing the PDFs it's very advanced, like, rendering of the PDFs and so we have changed a lot in the core code, actually, to use the PDFs as pictures and only after you you want to, like, modify the shapes, then you are able to break it into the shapes and use them to modify the way you need and I've already talked about inserting a new document from Empire, it was needed for the next cloud but because, like, it's possible to finish up from then that you have some information about that so you provide the template source URL in the check file info which when you then open or try to create it and then you issue the GET file to actually get the get the, to actually, like, open the file but, like, online, in that case there was the template source specified so it first, like, starts the document from scratch and using that specific template and then it is saved into the ID that is there and to save the the auto-save then works just normally because, like, it's already created this document and it's fine. Mostly capabilities I've thought about that earlier so I'll talk more about that and that is all. So, what my summary is use an existing integration if you can again, if you cannot you are most welcome to trade at all and if there's anything you are missing we will be most happy to hear what it is we will improvise it and implement it Thank you for listening.