Search

Clear filter
Announcement
Anastasia Dyubaylo · Jan 23, 2023

InterSystems Developer Community Annual Survey 2022

Hey Developers, Thank you so much for staying with InterSystems Developer Community for yet another year! Day in and day out our team is trying to make it better and more useful for each and every one of our 12K+ members! We'd like to know how useful the Developer Community is for you at this point. Please take a few moments to let us know what you think and what could be improved: 👉🏼 InterSystems Developer Community Annual Survey 2022 👈🏼 Note: The survey will take less than 5 minutes to complete. And your feedback is also welcome in the comments section of this post. We're looking forward to learning your opinions! 😉 Hey guys, If you haven't taken our survey yet, now is the time! We look forward to your feedback about our Community: 👉 https://www.surveymonkey.com/r/6238FBP Enjoy!
Announcement
Anastasia Dyubaylo · Feb 6, 2023

Time to vote in InterSystems Developer Tools Contest

Hi Community, It's voting time! Cast your votes for the best applications in our InterSystems Developer Tools Contest: 🔥 VOTE FOR THE BEST APPS 🔥 How to vote? Details below. Experts nomination: InterSystems experienced jury will choose the best apps to nominate the prizes in the Experts Nomination. Please welcome our experts: ⭐️ @Alexander.Koblov, Support Specialist⭐️ @Guillaume.Rongier7183, Sales Engineer⭐️ @Eduard.Lebedyuk, Senior Cloud Engineer⭐️ @Steve.Pisani, Senior Solution Architect⭐️ @Timothy.Leavitt, Development Manager⭐️ @Evgeny.Shvarov, Developer Ecosystem Manager⭐️ @Dean.Andrews2971, Head of Developer Relations⭐️ @Alexander.Woodhead, Technical Specialist⭐️ @Andreas.Dieckow , Principal Product Manager⭐️ @Aya.Heshmat, Product Specialist⭐️ @Benjamin.DeBoe, Product Manager⭐️ @Robert.Kuszewski, Product Manager⭐️ @Carmen.Logue , Product Manager⭐️ @Jeffrey.Fried, Director of Product Management⭐️ @Luca.Ravazzolo, Product Manager⭐️ @Raj.Singh5479, Product Manager⭐️ @Patrick.Jamieson3621, Product Manager⭐️ @Stefan.Wittmann, Product Manager⭐️ @Steven.LeBlanc, Product Specialist⭐️ @Thomas.Dyar, Product Specialist Community nomination: For each user, a higher score is selected from two categories below: Conditions Place 1st 2nd 3rd If you have an article posted on DC and an app uploaded to Open Exchange (OEX) 9 6 3 If you have at least 1 article posted on DC or 1 app uploaded to OEX 6 4 2 If you make any valid contribution to DC (posted a comment/question, etc.) 3 2 1 Level Place 1st 2nd 3rd VIP Global Masters level or ISC Product Managers 15 10 5 Ambassador GM level 12 8 4 Expert GM level or DC Moderators 9 6 3 Specialist GM level 6 4 2 Advocate GM level or ISC Employees 3 2 1 Blind vote! The number of votes for each app will be hidden from everyone. Once a day we will publish the leaderboard in the comments to this post. The order of projects on the contest page will be as follows: the earlier an application was submitted to the competition, the higher it will be on the list. P.S. Don't forget to subscribe to this post (click on the bell icon) to be notified of new comments. To take part in the voting, you need: Sign in to Open Exchange – DC credentials will work. Make any valid contribution to the Developer Community – answer or ask questions, write an article, contribute applications on Open Exchange – and you'll be able to vote. Check this post on the options to make helpful contributions to the Developer Community. If you changed your mind, cancel the choice and give your vote to another application! Support the application you like! Note: contest participants are allowed to fix the bugs and make improvements to their applications during the voting week, so don't miss and subscribe to application releases! quite interesting.OEX was unreachable just now for some timeand now my previous voting is gone.no problem, I still remember.It's a warning to other early voters. Since the beginning of the voting we have the results: Expert Nomination, Top 5 OpenAPI-Suite by @Lorenzo.Scalese irissqlcli by @Dmitry.Maslennikov iris-tripleslash by @Henry.HamonPereira Intersystems IRIS platform queue trend monitoring component by @yubo.mao message_key_query by @wang.zhe ➡️ Voting is here. Community Nomination, Top 5 Intersystems IRIS platform queue trend monitoring component by @yubo.mao iris-tripleslash by @Henry.HamonPereira message_key_query by @wang.zhe DX Jetpack for VS Code by @John.Murray OpenAPI-Suite by @Lorenzo.Scalese ➡️ Voting is here. So, the voting continues. Please support the application you like! Wow thanks Robert,Thank you for bringing to our attention the issue with the votes during the downtime of the OEx website. As soon as we got down alerts we started working to resolve the problem and get OEx back up and running. But the good news here is that OEx has been gaining popularity, and we understood that this has put additional strain on our server resources. Rest assured that we have taken this into consideration while fixing the issue. At the moment we have next results: Expert Nomination, Top 5 irissqlcli by @Dmitry Maslennikov OpenAPI-Suite by @Lorenzo Scalese iris-tripleslash by @Henry Pereira iris-geo-map by @Muhammad.Waseem IRIS Data Migration Manager by @Oleh.Dontsov ➡️ Voting is here. Community Nomination, Top 5 iris-tripleslash by @Henry Pereira Intersystems IRIS platform queue trend monitoring component by @Yubo Mao irissqlcli by @Dmitry Maslennikov OpenAPI-Suite by @Lorenzo Scalese message_key_query by @王喆 ➡️ Voting is here. Don't forget to vote for your favorite app! Please check out today's voting results: Expert Nomination, Top 5 irissqlcli by @Dmitry Maslennikov OpenAPI-Suite by @Lorenzo Scalese iris-geo-map by @Muhammad Waseem iris-tripleslash by @Henry Pereira iris-log-viewer by @Oliver.Wilms ➡️ Voting is here. Community Nomination, Top 5 iris-tripleslash by @Henry Pereira Intersystems IRIS platform queue trend monitoring component by @Yubo Mao irissqlcli by @Dmitry Maslennikov OpenAPI-Suite by @Lorenzo Scalese message_key_query by @王喆 ➡️ Voting is here. Developers! Last call!Only one day left to the end of voting! Cast your votes for applications you like!
Announcement
Anastasia Dyubaylo · Feb 13, 2023

Winners of the InterSystems Developer Tools Contest 2023

It's time to announce the winners of the InterSystems Developer Tools Contest! But first, we'd like to say Thank you to all our amazing participants who submitted 21 applications 🔥 We are thrilled to know that you think this subject is important! Now, without further ado, the winners are... Experts Nomination 🥇 1st place and $5,000 go to the irissqlcli app by @Dmitry.Maslennikov 🥈 2nd place and $3,000 go to the DX Jetpack for VS Code app by @John.Murray 🥉 3rd place and $1,500 go to the OpenAPI-Suite app by @Lorenzo.Scalese 🏅 4th place and $750 go to the iris-geo-map app by @Muhammad.Waseem 🏅 5th place and $500 go to the iris-tripleslash app by @José.Pereira, @Henrique.GonçalvesDias, @Henry.HamonPereira More winners: 🏅 $100 go to the iris-log-viewer app by @Oliver.Wilms 🏅 $100 go to the iris-persistent-class-audit app by @Stefan.Cronje1399 🏅 $100 go to the iris-connections app by @Yuri.Gomes 🏅 $100 go to the cos-url-shortener app by @Daniel.Aguilar 🏅 $100 go to the iris-deploy-tools app by @Francisco.López1549 Community Nomination 🥇 1st place and $1,000 go to the iris-tripleslash app by @José.Pereira, @Henrique.GonçalvesDias, @Henry.HamonPereira 🥈 2nd place and $750 go to the Intersystems IRIS platform queue trend monitoring component app by @yubo.mao 🥉 3rd place and $500 go to the irissqlcli app by @Dmitry.Maslennikov Our sincerest congratulations to all the participants and winners! Join the fun next time 😎 Congrats to all winners WOW!!!! this is the first time that I participate in a Intersystems contest and it won't be the last... thanks for all voted and congrats to the winners Congratulations to all the winners Congrats everyone. There were so many worthy projects this time around that voting was really tricky. Thank you all for your contributions and Congrats to the Winners!! Congratulations to all! It was a fantastic contest!This is the first time I have seen so many applications. Congratulations to all winners!! Congrats to all the winners! Congratulations everyone! Well done everyone! Congratulations to all the participants! This was an amazing contest! Congratulations to all Video highlighting the winners
Question
Tom Cross · Jan 30, 2023

Has everyone moved over to InterSystems Reports?

I have a question for people currently in the community who support TrakCare implementations. Are you all currently working through the migration from Crystal/Zen over to Logi Reports? What are you plans for the Zen reports you can't migration off for example the HTML letter template? I have spoken with a few people regarding this topic but starting to get concerned if there is a call in the near future to decommission ZEN/ We're still using a combination of Crystal Reports and ZEN reports, but also looking into Intersystems reports. I don't have much to say yet, other than that I'm also interested in this topic.
Announcement
Anastasia Dyubaylo · Jul 15, 2023

[Video] What Is InterSystems IRIS for Supply Chain

Hey Developers, Enjoy watching the new video on InterSystems Developers YouTube: ⏯ What Is InterSystems IRIS for Supply Chain See how InterSystems IRIS for Supply Chain improves supply chain operations with real-time, actionable data. InterSystems IRIS for Supply Chain includes an extensible data model, integration engine, and API framework that allow you to create real-time full-stack applications for order processing, issue processing, demand forecasting, and more. Enjoy and stay tuned! 👍
Article
David Hockenbroch · Jun 2, 2023

InterSystems Reports Migration - Generate Report to Stream

We are looking at what we need to do to migrate from our current usage of Zen reports to InterSystems Reports. One of the hurdles for us is figuring out ways to interact with InterSystems reports programmatically from ObjectScript routines. There is a Java API for it, but it is possible to generate a report from InterSystems reports to a stream object in ObjectScript without diving into Java by using a %Net.HttpRequest. Here is a code example, followed by an explanation: #include %cspInclude GetStream(catalog="",report="",type="2",paramnames,paramvalues,str) public{ try{ set namelist = $LFS(paramnames) set valuelist = $LFS(paramvalues) if $LL(valuelist) '= $LL(namelist){ $$$ThrowStatus($$$ERROR(5001,"Mismatched parameter name and value list sizes.")) } if report = ""{ $$$ThrowStatus($$$ERROR(5001,"No report name provided")) } if catalog = ""{ $$$ThrowStatus($$$ERROR(5001,"No catalog name provided")) } set myreq = ##class(%Net.HttpRequest).%New() set myreq.Server = "127.0.0.1" set myreq.Port = "8888" set myreq.Location = "jinfonet/tryView.jsp" set myreq.Username = "MyUserName" set myreq.Password = "MyPassword" do myreq.SetParam("jrs.report",$$$URLENCODE(report)) do myreq.SetParam("jrs.catalog",$$$URLENCODE(catalog)) do myreq.SetParam("jrs.result_type",type) for i=1:1:$LL(namelist){ do myreq.SetParam($$$URLENCODE("jrs.param$"_$LG(namelist,i)),$$$URLENCODE($LG(valuelist,1))) } set sc = myreq.Get() if $$$ISERR(sc) {$$$ThrowStatus(sc)} set response = myreq.HttpResponse.Data if $ISOBJECT(response){ set sc = response.Rewind() if $$$ISERR(sc) {$$$ThrowStatus(sc)} while 'response.AtEnd{ set sc = str.Write(response.Read()) if $$$ISERR(sc) {$$$ThrowStatus(sc)} } } else{ set sc = str.Write(response) if $$$ISERR(sc) {$$$ThrowStatus(sc)} } } catch ex{ do ex.Log() return ex.AsStatus() } return $$$OK } This routine takes the following arguments: catalog - The catalog name in InterSystems reports, including directory (i.e. /MyCatalog/Catalog.cat) report - The report name in InterSystems reports, including directory (i.e. /MyCatalog/MyReport.cls) type - The file type to create. I have set 2 as the default because that's the type for PDF, which is what we typically use. 1 is HTML, 2 is PDF, 3 is TEXT, 4 is Excel, 5 is PostScript, 6 is RTF, and 7 is XML. paramnames - If the report has parameters, this is a comma-separated list of report parameters paramvalues - The values to use for those parameters, in the same order as the names. str - A %Stream.Object (or any class that inherits from it) which should be passed by reference. This is the stream that will eventually hold the report. I have some initial checking at the top for a few things that will cause a problem. The type has to be 1-7, so I throw an error if it's not. (Side Note: I apologize for my overuse of the throw/catch error checking; it's a construct I'm used to from other languages!) The lists of parameter names and values should be the same size. There must be a catalog and a report provided. The server and port for the request must be the domain/IP and port of your InterSystems report server. This assumes it's running on the same server as your IRIS instance at its default port. If not, adjust accordingly. The location is /jinfonet/tryView.jsp. This is a web page on the report server that uses accepts a GET request. It's also a handy one to redirect a browser to if you want to link to a report. If the user is not authenticated, it redirects to a login prompt. If the report has parameters and they are not provided, it will then prompt for parameters. I'm going to set some parameters on the request to handle all of that so we can get straight to the report. That's why we're setting the Username and Password properties on the HttpRequest object; they must be a valid username and password for your InterSystems Reports server. The tryView.jsp can accept quite a few parameters. They are fully documented by Logi here, but for purposes of this example, I'm keeping it pretty basic. We set a parameter called jrs.report that contains the URL encoded report name, jrs.catalog which contains the url encoded catalog name, and jrs.result_type which uses our type argument to tell the JSP what kind of file to generate. After that, I loop through the parameter name and value lists to send the parameters to the report. The name of the HttpRequest parameter is jrs.param$ followed by the report parameter name, and is set to whatever value needs passed to this parameter. So my report has a parameter called "OrderNumber" the HTTP request parameter must be named jrs.param$OrderNumber and be set to whatever order number the report parameter should be set to. At that point, we're ready to send the request off using the Get() method. Once the response comes back, the report's stream is now in the request object's HttpResponse.Data, which depending on length, can sometimes be a string and sometimes be a stream, so I've got some steps to check that, then write that data to the %Stream.Object that was passed by reference. And there you have it; an InterSystems Report generated to a stream.
Announcement
Evgeny Shvarov · Oct 3, 2019

InterSystems Developers Community Release, October 2019

Hi Developers! This a release post what we did and what are the new features on the Developers community. Editor enhancements: tables for markdown, source-WYSIWYG switcher, emoji ; The email system is improved - better images, analytics, and tags; Bookmarks for comments and answers; A lot of minor enhancements. See the details below! Editor enhancementsFor those who are contributing in markdown mode, we now implemented the support of tables with markdown. Another enhancement is that if you switch to source from WYSIWYG mode you'll see the source in multi-lines, and not in one-line which was impossible to edit. Now, this all works fine! And! We added emoji support! ) Feel free to add it to introduce all your emotions ) Email system enhancements We improved tracking of what email notifications we send on what triggers and we'll try to send you only what you want to receive. In order to improve this, we added the feature to send notifications for tag subscribers if the tag has been introduced to the article or question. Also, we fixed the bug when some emails were not shown in Gmail. Bookmarks for comments We added the feature. Now if you find the comment/answer you really don't want to forget you can click on the "star" in the comment and find it then in your Bookmarks section of member profile. As always we fixed a few bugs, hopefully, added less new and planned a new version for October 2019! And we are waiting for your bug reports and enhancement requests ! Stay tuned!
Announcement
Evgeny Shvarov · Oct 9, 2019

InterSystems Open Exchange Release, September 2019

Hi Developers! I'm pleased to announce the September release notes of the InterSystems Open Exchange! Here is what the new release introduces: Better performance; Better UX; Discuss and Issues tabs on the application page. See the details below. Better Open Exchange Performance We improved the REST API and introduced a caching mechanism for Github descriptions thus the performance of Open Exchange has been greatly improved. If you think we need to improve it more please submit an issue! UX improvements We introduced several UX improvements e.g. you can right-click on an app tile and open the app page in a new tab. Also with this release, you can open apps with a particular tab - tab selector is added in URL. E.g. check the URL with releases history of Serenji. Discuss tab If you add the link to community article related to the app this will activate the Discuss button and with the current release, it also will introduce the Discuss tab on the app page which contains the iframe with this community article. So you are able to read and comment on the article in the Discuss tab without opening the community page. See the example. Issues tab If you submit the app with the link to Github repositories this will introduce an Issues tab that lists open issues for the application and lets you submit a new issue if you click a NEW ISSUE button. E.g. check the issues for VSCode ObjectScirpt or add a new one ) Check the full list of tasks solved in August-September. Here is the plan for the next version, add your bug fixes and enhancements, submit your solutions and tools to Open Exchange, and stay tuned!
Question
Rui Figueiredo · Nov 1, 2019

InterSystems IRIS for Health Community Edition on Azure

Hi, Has anyone tried the InterSystems IRIS for Health Community Edition on Azure https://azuremarketplace.microsoft.com/en-us/marketplace/apps/intersystems.intersystems-iris-health-communityIt seems the image is the InterSystems IRIS for Health image instead of the Community Edition. Thanks, Rui I am confused. The link above is for the IRIS for Health Community Edition. I would expect you get the IRIS for Health image. Please elaborate Hi Andreas, From the link, you got an IRIS for Health image, the issue is that the image has BYOL license instead of a Comunity Edition Licence. Rui Thank you for the clarification Hi Rui - Yes this is true, but it's temporary. We had some issues with the Community Edition and the marketplace listing was set up this was as an interim measure. This will be replaced by the IRIS for Health Community Edition shortly. Meantime it gives you the same rights and you can develop with it fine, but it will expire (at which point you should just go to the marketplace and get a new one). -jeff
Announcement
Evgeny Shvarov · Nov 3, 2019

InterSystems Developers Community Release, November 2019

Hi Developers! Here is the release of what's was enhanced and fixed in the DC engine in October 2019. New look-and-feel and features for the Developers Events; "Smart" social sharing in Twitter; 5 min delay before sending emails, nested tags for group tags, better articles linkage, and other small enhancements and bug fixes. See the details below. New Developers Events We improved the Developers Events section, so now developers' events mandatory contain registration link, the place and you can add the event into your calendar including date, time, place, and the content. Check how it works! Twitter Smart Sharing Every post on DC contains social buttons panel - just in case you want to share the post in the preferred social network in conveniently opens your network account and adds the link of the post. With this release, we improved this feature, especially for Twitter sharings. Now if you share the post on twitter with this button it also introduces all the hashtags related to DC tags in the post. E.g. if you share the post on new IRIS and IRIS for Health release, you get the following for Twitter: Minor enhancements With this release, we introduced a 5 min delay before sending the announcements. This is to let you make final tweaks to your post after pressing the button "Publish". Often we see something which needs to be fixed just after we press "Publish". At least I do that ) We improved the tag tree: now it has nested tags to group posts to make the structure of taxonomy more close to the content semantics. Also, the linkage mechanism was improved: now if you include the "Next chapter" link in one post this automatically includes the "Prev post" link to another post which makes the linkage mechanism a lot easier. And as always, we fixed a ton of bugs, added a few more and have great plans for the future! Submit your ideas, share your InterSystems experience and stay tuned!
Article
Eduard Lebedyuk · Feb 11, 2020

Asymmetric RSA encryption with JS and InterSystems IRIS

Asymmetric cryptography is a cryptographic system that uses pairs of keys: public keys which may be disseminated widely, and private keys which are known only to the owner. The generation of such keys depends on cryptographic algorithms based on mathematical problems to produce one-way functions. Effective security only requires keeping the private key private; the public key can be openly distributed without compromising security. In such a system, any person can encrypt a message using the receiver's public key, but that encrypted message can only be decrypted with the receiver's private key. Robust authentication is also possible. A sender can combine a message with a private key to create a short digital signature on the message. Anyone with the sender's corresponding public key can combine the same message and the supposed digital signature associated with it to verify whether the signature was valid, i.e. made by the owner of the corresponding private key. (C) Wikipedia. In this article, I would demonstrate how asymmetric encryption can be used with InterSystems IRIS and JavaScript. We will build the app with a delegated authentication, that would encode credentials on a JS client and verify them inside InterSystems IRIS. This is more of a showcase for delegated authentication and asymmetric encryption than a recommended approach - OAuth authorization is much more robust and recommended for production use. First of all, let's store our keys: Class REST.Keys { Parameter PUBLICKEY = "-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76 xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4 gwQco1KRMDSmXSMkDwIDAQAB -----END PUBLIC KEY-----"; Parameter PRIVATEKEY = "-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd 8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5 rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876 -----END RSA PRIVATE KEY-----"; } Use Managed Key Infrastructure to store keys in production systems. Now let's go for REST brokers, we need two: Public, to serve our public key Private for authorization Abstract broker: Class REST.Abstract Extends %CSP.REST { Parameter UseSession As BOOLEAN = 1; Parameter HandleCorsRequest = 1; Parameter CHARSET = "UTF8"; } Public broker (published as /auth/public REST app with unauthorized access): Class REST.Public Extends REST.Abstract { XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <Routes> <Route Url="/key" Method="GET" Call="GetKey"/> </Routes> } ClassMethod GetKey() { #dim sc As %Status = $$$OK write ##class(REST.Keys).#PUBLICKEY quit sc } } And private broker (published as /auth/private REST app with Password and Delegated access): Class REST.Private Extends REST.Abstract { XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <Routes> <Route Url="/random" Method="GET" Call="GetRandom"/> </Routes> } ClassMethod GetRandom() { #dim sc As %Status = $$$OK write $random(100) quit sc } } That's it. /random is a protected call. And here is our ZUAUTHENTICATE routine, it accepts authorization in an XAUTH header, where value is RSA encrypted <user>$c(10)<pass>$c(10)<timestamp>. ZAUTHENTICATE(ServiceName,Namespace,Username,Password,Credentials,Properties) PUBLIC { #include %occStatus quit $$$OK } GetCredentials(ServiceName,Namespace,Username,Password,Credentials) Public { #include %occErrors #include %occStatus #dim separator As %Char = $c(10) #dim %request As %CSP.Request set ciphertext = %request.GetCgiEnv("HTTP_XAUTH") quit:ciphertext="" $$$ERROR($$$GeneralError, "No XAuth header") set text = $SYSTEM.Encryption.RSADecrypt($system.Encryption.Base64Decode(ciphertext), ##class(REST.Keys).#PRIVATEKEY,"",2) quit:text="" $$$ERROR($$$GeneralError, "Unable to decrypt") quit:$l(text, separator)'=3 $$$ERROR($$$GeneralError, "Wrong plaintext structure") set time = $p(text, separator, 3) set limit = 10 set diff = $system.SQL.DATEDIFF("s", $tr(time,"TZ", " "), $SYSTEM.Util.LocalWithZTIMEZONEtoUTC($H)) quit:diff>limit $$$ERROR($$$GeneralError, "Old request:" _ diff) set Username = $p(text, separator, 1) set Password = $p(text, separator, 2) quit $$$OK } Note that the REST package must be mapped to %SYS namespace. Now for a client. We're using the JSEncrypt library for RSA encryption and sending two requests - first to get the key and second (authorized request) to get a random value from our private broker. <!doctype html> <html> <head> <title>InterSystems IRIS - JavaScript RSA Encryption</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js"></script> <script type="text/javascript"> function getKey() { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) document.getElementById('pubkey').value = xmlHttp.responseText; } var url = '/auth/public/key'; xmlHttp.open("GET", url, true); xmlHttp.send(null); }; function doAuth() { // Encrypt with the public key... var encrypt = new JSEncrypt(); encrypt.setPublicKey(document.getElementById('pubkey').value); var encrypted = encrypt.encrypt(document.getElementById('user').value + "\n" + document.getElementById('pass').value + "\n" + new Date().toISOString()); var xmlHttp = new XMLHttpRequest(); var url = '/auth/private/random'; xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) document.getElementById('randomVal').innerHTML = xmlHttp.responseText; } xmlHttp.open("GET", url, true); xmlHttp.setRequestHeader("XAuth", encrypted) xmlHttp.send(null); } </script> </head> <body> <label for="pubkey">Public Key</label><br/> <textarea id="pubkey" rows="15" cols="65"></textarea><input type="button" value="Get Key" onclick="getKey();" /><br/> User:<br> <input id="user" type="text" name="user" value="_SYSTEM"><br> Pass:<br> <input id="pass" type="password" name="pass" value="SYS"><br><br> <input type="button" value="Auth" onclick="doAuth();" /> <br/><br/> <label>Random: </label><label id="randomVal"></label><br/> </body> </html> With this, we successfully encrypted our plaintext on a client and decrypted it with InterSystems IRIS. Get the code here. typo: zuauthenticat -> zauthenticate I think this " OAuth authorization is much more robust and recommended for production use. " should be emphasized a bit more :) This might lead to people getting the idea that rolling their own encryption related code is an acceptable idea :/
Announcement
Derek Robinson · Jan 21, 2020

New Podcast from InterSystems Learning Services!

InterSystems Learning Services is excited to announce the upcoming launch of Data Points! This podcast will feature conversations with experts about new and exciting features of InterSystems products, as well as cutting-edge topics in the tech industry today. You can subscribe to the podcast right now, ahead of the first episode in February! Subscribe on: Apple Podcasts Spotify Stitcher Google Play Great. I am looking forward to it.
Announcement
Evgeny Shvarov · Feb 1, 2020

InterSystems Developers Community Release, February 2020

Hi Developers! In January we introduced into Developers Community: New postings type - Discussions; No more answers - only comments-replies; bug fixes and small improvements. See the details below. Discussions We had requests for this type of posts - when it is not an article, it's not a question which needs a discreet answer, but a discussion where you want to know people's opinions. It can be combined with polls. So, we introduced it and people already contribute discussions. Answers Conversion to Comments A lot of people were confused with Answers: when you reply to the question, is it an answer or comment? If the comment is really an answer topic starter couldn't accept it. Search in answers or in comments? We solved it - all answers are now comments, but you can accept comments as an answer to the question. And no more doubts about replying to a question. See the discussion. Bug fixes We fixed a few bugs when you didn't get email notifications on some comments. We also fixed a few smaller bugs and improved the performance. Here is the full kanban of solved issues in January 2020. Here is the planned kanban for February 2020. Submit your ideas, bug fixes, contribute to Developers Community and stay tuned!
Question
Sergey Kamenev · Apr 30, 2019

Questions regarding InterSystems IRIS docker container

I follow the instruction on docker site.I have next troubles:After changing password fom "SYS" to my pass I see on screen non removable "USER>". Standart commands "exit" and "quit" are not worked. Next actions is possible only in new terminal window.I need some extra tool in container. Where I try install (by example "apt-get install mc") I get "E: Package 'mc' has no installation candidate". I don't understand why standart ubuntu package manager do not work in Iris container. 1. My steps: docker exec -it my-iris iris session IRIS Log in with these predefined credentials: Node: 8a6940088a16, Instance: IRIS Username: _SYSTEM Password: SYS For security, these credentials (and the other predefined accounts) are immediately expired the first time you use them, and you are required to change the password.After changing password I see non-removable and non-breakable "USER>"2. I found decision of this problem.After this "apt-get update" it's possible install other packages. 1. To exit the IRIS session use the command halt 2. And yes, for most container activity, it is best to do an apt-get update && apt-get install inside your containers, which will make sure it has the latest packages/repositories available. @Douglas.Foster if you're going to get the HALT info added to the Docker Hub page, maybe also clean up the debris I've highlighted below: What do you expect instead of "USER>", it is a session prompt, where you should put your commands. At this point, for me, it looks expectable. we'll add the USER> prompt and a link to the Terminal doc to these instructions, and get rid of the extraneous word. 1. What you did, to get it. Please add all your steps, so we can find what you did wrong.2. IRIS container changed nothing what comes from base Ubuntu image. If you can install mc there it should be possible on IRIS as well. But I don't see any reasons, why mc should be available inside the container. And why you need it there? Sergey,The prompt you see with USER> is an IRIS terminal prompt. To get a bash session you will need to run something like docker exec -it my-iris bash Package mc has no installation candidate because apt-get update hasn't been run since we built the image. Run apt-get update && apt-get install mc and you'll be fine. :)
Announcement
Anastasia Dyubaylo · Jun 19, 2019

New Video: InterSystems IRIS - Power of the Platform

Hi Community! Please welcome a new video on InterSystems Developers YouTube Channel: InterSystems IRIS - Power of the Platform Interoperability, a fast database, analytics, and rapid development have always been hallmarks of InterSystems technology, now all brought together in InterSystems IRIS Data Platform. This video highlights the stories of several customers from Russia and Latin America who are building solutions based on a combination of features provided by InterSystems IRIS. Takeaway: You can reap benefits from using InterSystems IRIS, even if you don't use its new features.Presenter: @joe.gallant, Senior Sales Engineer, InterSystems And... Additional materials to the video you can find in this InterSystems Online Learning Course. Don't forget to subscribe to our InterSystems Developers YouTube Channel. Enjoy and stay tuned!