Clear filter
Announcement
Danusa Calixto · Apr 14, 2023
Hey Developers,
We'd like to invite you to join our next 🏆 InterSystems Tech Article Contest in Portuguese 🏆
Duration: May 12 - Jun 12, 2023
We can't wait for your articles! Good luck 🍀
Announcement
Olga Zavrazhnova · Nov 6, 2022
Hi Developers!
InterSystems continues the Developer Meetup event series. The next one will happen on November 17th from 5:30 pm-8 pm ET in Boston, MA, USA.At this meetup, you will learn more about Kubernetes, Mirantis Lens tool, and how to run Lens with InterSystems IRIS IKO (InterSystems Kubernetes Operator).
Food and drink will be provided.
> Register here <
Agenda:👉 "InterSystems Overview and Developer Resources" by @Dean.Andrews2971, Head of Developer Relations, InterSystems👉 "Mirantis Overview and Developer Resources" by Tommy Decker, Account Executive, Mirantis👉 "Scaling Stateful Workloads in Kubernetes" by @Robert.Kuszewski, Product Manager - Developer Experience, InterSystems👉 "Demo of Lens with InterSystems IRIS IKO (InterSystems Kubernetes Operator)" by Toby Goodlock, Solution Architect, Mirantis
⏱ Date and Time: November 17th from 5:30pm-8pm ET📍 Location: Democracy Brewing, Boston
Announcement
Evgeny Shvarov · Jan 26, 2023
Here're the technology bonuses for the InterSystems Developer Tools Contest 2023 that will give you extra points in the voting:
Embedded Python usage
Docker container usage
ZPM Package Deployment
Online Demo
Code Quality pass
Article on Developer Community
The second article on Developer Community
Video on YouTube
First Time Contribution
Community Idea Implementation
See the details below.
Embedded Python - 3 points
Use Embedded Python in your application and collect 3 extra points. You'll need at least InterSystems IRIS 2021.2 for it.
Docker container usage - 2 points
The application gets a 'Docker container' bonus if it uses InterSystems IRIS running in a docker container. Here is the simplest template to start from.
ZPM Package deployment - 2 points
You can collect the bonus if you build and publish the ZPM(ObjectScript Package Manager) package for your Full-Stack application so it could be deployed with:
zpm "install your-multi-model-solution"
command on IRIS with ZPM client installed.
ZPM client. Documentation.
Online Demo of your project - 2 pointsCollect 3 more bonus points if you provision your project to the cloud as an online demo. You can do it on your own or you can use this template - here is an Example. Here is the video on how to use it.
Code quality pass with zero bugs - 1 point
Include the code quality Github action for code static control and make it show 0 bugs for ObjectScript.
Article on Developer Community - 2 points
Post an article on Developer Community that describes the features of your project. Collect 2 points for each article. Translations to different languages work too.
The Second article on Developer Community - 1 point
You can collect one more bonus point for the second article or the translation regarding the application. The 3rd and more will not bring more points but the attention will all be yours.
Video on YouTube - 3 points
Make the Youtube video that demonstrates your product in action and collect 3 bonus points per each. Examples.
First Time Contribution - 3 points
Collect 3 bonus points if you participate in InterSystems Open Exchange contests for the first time!
Community Idea Implementation - 3 points
You can get 3 extra bonus points if the dev tool implements one of the ideas listed as Community Opportunity on the InterSystems Idea portal.
The list of bonuses is subject to change. Stay tuned!
Good luck with the competition! Bonus for the Community Idea implementation is introduced Rules changing to get additional points halfway through the contest period?
Hi Stefan! Usually not. We know, that rules changing doesn’t help.
But sometimes, very rarely, we add bonuses on-the-go. Like this time we believe that this bonus will help to pay attention to ideas, published by community members, and implement solutions, that community requested and voted for. And there is still 10 days to submit the app and one week more to polish it. We believe this bonus will not harm anyone. If it does - we can discuss it. Hi Evgeny,
As you can see in the article below, we used one idea from InterSystems Idea.
https://community.intersystems.com/post/iris-tripleslash-lets-rock-together
We only saw this additional (and very welcome) bonus now. Here it's the idea that inspired us, as mentioned in the article: https://ideas.intersystems.com/ideas/DP-I-175
Announcement
Anastasia Dyubaylo · Jan 17, 2023
Hey Community,
We are glad to invite you to the upcoming kick-off webinar on the InterSystems Developer Tools Contest.
In this webinar, we'll talk about how to choose a project and show you how to develop, build and deploy applications on InterSystems IRIS data platform. Also, there will be information about the hot internal projects at the moment (SQL client, VS Code unit tests and Jupyter notebooks), how to look at community opportunities in the Ideas portal, and what InterSystems would like to do with the management portal.
Date & Time: Monday, January 23 – 12 pm EST | 6 PM CET
Speakers: 🗣 @Raj.Singh5479, InterSystems Product Manager 🗣 @Dean.Andrews2971, InterSystems Head of Developer Relations 🗣 @Evgeny.Shvarov, InterSystems Developer Ecosystem Manager
>> Register here <<
Developers!
Don't miss the opportunity to register for the upcoming webinar!
The webinar will start tomorrow at 12 pm EST | 6 PM CET. Hi dear community,
If you lack inspiration for the contest, here are some ideas:
* A tool to improve the load of DDL or SQL statements in IRIS.
* Why, because for now, we have to run an iris terminal then run an objectscritp command to load the DDL or SQL statements.
* I wish a way that we can have a tool that bring the ability to parse a DDL or SQL file from a shell.
* Example : iris load -f /path/to/file.sql
* A tool to automatically export objectscript classes to the local folder
* I know we can do it with Timothy's tool, but I wish a simple hook that just export new classes or modified classes to the local folder. Not the whole source control system.
Announcement
Anastasia Dyubaylo · Feb 14, 2023
Hi Community,
Let's meet together at the online meetup with the winners of the InterSystems Developer Tools Contest – a great opportunity to have a discussion with the InterSystems Experts team as well as our contestants.
Winners' demo included!
Date & Time: Thursday, February 16, 5 PM GMT | 12 PM EST
Join us to learn more about winners' applications and to have a talk with our experts.
➡️ REGISTER TODAY
See you all at our virtual meetup!
Announcement
Anastasia Dyubaylo · Jul 13, 2023
Hi Community!
🎆 We're stoked to share the fantastic news with you! Our ❤️🔥 InterSystems Developer Hub ❤️🔥 is up and running and ready to welcome its users!
There's loads of helpful info there:
InterSystems tutorials
Explanations on how to use different tools
Info about contests
much more
And in general most of what you may need to start working with InterSystems technologies!
Check it out!
As usual, all your input is very welcome in the comments. Tell us what you think ;) very nice hotsite nice landing page! InterSystems Developer Hub - best place for developers!) Cool!
Announcement
Anastasia Dyubaylo · Mar 24, 2023
Hey Developers,
We'd like to invite you to join our next contest dedicated to creating AI/ML solutions that use Cloud SQL to work with data:
🏆 InterSystems IRIS Cloud SQL and IntegratedML Contest 🏆
Duration: April 3 - April 23, 2023
Prize pool: $13,500
The topic
💡 InterSystems IRIS Cloud SQL with IntegratedML Contest 💡
In this contest, we expect to see applications full-stack, frontend, or backend applications that make use of InterSystems IRIS Cloud SQL to work with data and optionally will utilize its IntegratedML option to create AI/ML solutions. Your application could be a library, package, tool, or any SQL or/and AI/ML solution which uses InterSystems IRIS Cloud SQL on a backend.
Basically, we invite you to use InterSystems IRIS in this contest as a 100% SQL engine with an AutoML option via IntegratedML offering.
Here you can deploy InterSystems IRIS Cloud SQL.
Here you can get information on InterSystems IRIS Cloud SQL product along with the IntegratedML feature.
General Requirements:
Accepted applications: new to Open Exchange apps or existing ones, but with a significant improvement. Our experts will review all applications before approving them for the contest.
The application should use InterSystems IRIS Cloud SQL instance as a backend. Deploy it here.
Types of applications that match: - anything. Any business solution, technology example, backend, frontend or full-stack application.
The application should be an Open Source and published on GitHub.
The README file to the application should be in English, contain the installation steps, and contain either the video demo or/and a description of how the application works.
One developer can enter the competition with a maximum of 3 applications.
Prizes
1. Experts Nomination - a specially selected jury will determine the winners:
🥇 1st place - $5,000
🥈 2nd place - $3,000
🥉 3rd place - $1,500
🏅 4th place - $750
🏅 5th place - $500
🌟 6-10th places - $100
2. Community winners - an application that will receive the most votes in total:
🥇 1st place - $1000
🥈 2nd place - $750
🥉 3rd place - $500
If several participants score the same amount of votes, they all are considered winners, and the money prize is shared among the winners.
Important Deadlines:
🛠 Application development and registration phase:
April 3, 2023 (00:00 EST): Contest begins.
April 16, 2023 (23:59 EST): Deadline for submissions.
✅ Voting period:
April 17, 2023 (00:00 EST): Voting begins.
April 23, 2023 (23:59 EST): Voting ends.
Note: Developers can improve their apps throughout the entire registration and voting period.
Who can participate?
Any Developer Community member, except for InterSystems employees. Create an account!
👥 Developers can team up to create a collaborative application. Allowed from 2 to 5 developers in one team.
Do not forget to highlight your team members in the README of your application – DC user profiles.
Helpful resources
✓ Documentation:
InterSystems IRIS Cloud SQL
InterSystems IRIS Cloud IntegratedML
✓ Tools:
irissqlcli - python SQL terminal for InterSystems IRIS
Connect to IRIS Cloud SQL:
irissqlcli -h your-iris-cloud-sql-server -p 1972 -u SQLAdmin -n USER -W
Connect to IRIS Cloud SQL via SSL:
irissqlcli -h your-iris-cloud-sql-server -p 1972 -u SQLAdmin -c certificateSQLaaS.pem -n USER -W
DBeaver - SQL-driven database tool. DBeaver and IRIS.
Using docker container with iris-sql locally for development purposeses:
Start IRIS in docker container locally:
docker run --rm --name iris-sql -d -p 9091:1972 -p 9092:52773 -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo intersystemsdc/iris-community
And connect via irissqlcli:
irissqlcli iris://demo:demo@localhost:9091/USER
You can connect also via other SQL tools.
✓ Example applications:
iris-cloud-sql-demo
✓ Online Learning Material:
Connect to InterSystems IRIS Cloud SQL via Python, C++, Java, .NET.
✓ How to submit your app to the contest:
How to publish an application on Open Exchange
How to submit an application for the contest
Need Help?
Join the contest channel on InterSystems' Discord server or talk with us in the comment to this post.
We can't wait to see your projects! Good luck 👍
By participating in this contest, you agree to the competition terms laid out here. Please read them carefully before proceeding.
NB Dear contestants, please take into consideration that support for the contest cloud sql environment is only available during business hours M-F 9-5 US Eastern Time. We seem to be experiencing a failure of the cloud environment such that deployments are stuck in Pending status for some users.
Yay!
This time you can develop the solution for the contest in ANY language that understands SQL!
Python, java, .NET, js, C++, Rust, Go, ObjectScript - anything!
Looking forward! Looking forward to this one! ;-) Have a look at some of my projects which can help with this contest
irissqlcli - REPL for IRIS SQL
sqlalchemy-iris dialect for SQLAlchemy, can be used with Pandas, Flask or FastAPI
django-iris driver for Django
dbt-iris adapter for dbt
Give it a try and let me know if you have any issues with them, I can help to solve  Hi, Developers!
The cloud portal of InterSystems IRIS Cloud SQL is now available!
Feel free to launch deployments and prepare to the contest!
Example of using SQLAlchemy+Pandas, works with this Cloud SQL as well
from sqlalchemy import create_engine
import pandas as pd
server = '<your-server-hostname>'
port = 1972
namespace = 'USER'
username = 'SQLAdmin'
password = '<YOUR_PASSWORD>'
url = f"iris://{username}:{password}@{server}:{port}/{namespace}"
print(url)
engine = create_engine(url)
df = pd.DataFrame({
'int': [1, 2, 3, 4, 5],
'float': [1.1, 2.2, 3.3, 4.4, 5.5],
'string': ['a', 'b', 'c', 'd', 'e'],
'datetime': pd.date_range('20130101', periods=5),
'bool': [True, False, True, False, True]
})
# create a table in IRIS
df.to_sql('iris_table', engine, if_exists='replace', schema='sqlalchemy')
# read the table back from IRIS
df2 = pd.read_sql_table('iris_table', engine, schema='sqlalchemy')
# print the dataframe
print(df2)
Added a small cheat sheet for IRIS SQL Hey Devs!
The recording of the "[Kick-off Webinar] InterSystems IRIS Cloud SQL and IntegratedML Contest" is on InterSystems Developers YouTube!
I tried to create an account on https://portal.sql-contest.isccloud.io/account/login
Just the welcome mail never arrived.the page proposed to contact admin in this case
Note: If you do not receive an email, it might be that the username or email address entered is not registered for an account. If you are unable to remember the username or email address you used to sign up for an account, please contact your system administrator for assistance.
No further notice. Who is that system admin? Which mail ?Not so impressive ACCOUNT SOLVED: with a new account name. may be a typo in the e-mailTHOUGH OPEN: where is the admin contact Thanks, Robert -- we will look into that and see what the problem is. Granted, it is Easter Sunday so my apologies that our team will likely get to it at some point tomorrow
Note: Our InterSystems IRIS Cloud SQL service is not yet publicly available, and we hope this contest uncovers bugs -- so we encourage all the participants in the contest to let us know when they see anything that doesn't match their expectations, no matter how trivial!
Good luck hacking! Often we need to clean-up IRIS and start from a clear page with empty database. Docker containers could be an ideal option for that.
Start IRIS in docker container locally:
docker run --rm --name iris-sql -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community -a "iris session iris -U%SYS '##class(Security.Users).UnExpireUserPasswords(\"*\")'"
And connect via irissqlcli:
irissqlcli iris://_SYSTEM:SYS@localhost:9091/USER
You can connect also via other SQL tools.
Use the approach only for development purposes.
other SQL tools.
confirmed: I used ODBC + SQLGateway for access and operation from local IRISworks perfectly. There are already many useful suggestions and tools on display here... amazing community! Thank you!
There was a new release of intersystemsdc vanilla images.
Now you can use ENV variables to start IRIS with user, pass and namespace created.
E.g. here is how to start:
docker run --rm --name iris-sql -d -p 9091:1972 -p 9092:52773 -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo intersystemsdc/iris-community
Here is how to connect via irissqlcli:
irissqlcli iris://demo:demo@localhost:9091/USER
Hey, Devs!
There are three articles have been added to the contest!
IntegratedML-IRIS-Cloud-Height-prediction by @珊珊.喻audit-consolidator by @Oliver.Wilms Tokenizator by @Yuri.Gomes
Developers today is the last day for submissions!Don't miss your chance to join! I try to test contributions to the contestbut IRIS Cloud SQL just shows Deployment Pendingfor HOURS !!And no contact or mail to report this breakdownIt is really disappointing!
I see that it's a known situation, they even added a NB in the post:
NB Dear contestants, please take into consideration that support for the contest cloud sql environment is only available during business hours M-F 9-5 US Eastern Time. We seem to be experiencing a failure of the cloud environment such that deployments are stuck in Pending status for some users.
Article
Anastasia Dyubaylo · Apr 14, 2023
Hey Community!
There are occasions when you really need to get in touch with a member of our Community a.k.a. author of a post or developer of a particular project, to discuss something, catch up, or whatever. And exactly for this reason, we have Direct Messages where you can send a message directly to a specific person or even have a group chat!
Accessing Direct Messages is easy. Just click on the Envelope button near your profile picture:
And you will get lots of options:
First of all, you can see all the messages you've received in the Inbox section, all the unread messages in the Unread, and all the bookmarked - you guessed it - in Bookmarks. Also, via this left menu you can set the settings for direct messages using the Settings section:
Getting back to the Inbox section, if you select one or several (or Select all) messages you can Delete, Mark as unread / read, or Add to bookmarks the whole batch. And if you add a message to bookmarks you will be able to quickly find it in the Bookmarks section.
Another way to add a message to bookmarks is to hover your mouse over it and click the star that appears near the date:
Messages that are in bookmarks will have a green star in this line.
There are a few more ways to quickly send a DM to a Community member:
go to the profile of the member you want to contact
you can also quickly start a private discussion from the post page on a specific topic described in the post – the post title will automatically pull up as the subject of the DM
This is it, easy-peasy. Happy messaging!
Article
Yuri Marx · Apr 13, 2023
It is a recommended security practice to login into sensitive Administrator Portals without any input passwords. Thus, it is necessary to identify and authenticate the users correctly. A common technique employed by web portals and mobile applications is to use Google social login. Today, Google Gmail has 2 billion users (source: https://www.usesignhouse.com/blog/gmail-stats). Therefore, it is a perfect shared login service to utilize to login InterSystems IRIS users when they need to manage their instances. This article will detail all the steps to embed Google Login into your InterSystems Management Portal.
Register your InterSystems instance in the Google Console
1. Go to https://console.cloud.google.com and log in with your Google user account.2. On the header click Select a project:
3. Click the button NEW PROJECT:
4. Create a sample project for this article called InterSystemsIRIS and click the button CREATE:
5. Go to the Header again and select the created project InterSystemsIRIS hyperlink in the table:
6. Now the selected project is the working one:
7. In the header look for credentials on the Search field and choose API credentials (third option for this image):
8. On the top of the screen, click the + CREATE CREDENTIALS button and select OAuth 2.0 Client ID option:
9. Now click CONFIGURE CONSENT SCREEN:
10. Choose External (any person who has Gmail is able to use it) and click the CREATE button:
11. In Edit app registration, complete the field values as follow:App Information (use your email for user support email):
App Logo (save any vertical InterSystems Logo on your computer and use it here):
App Domain (set home page with the value http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen)
For Authorized domains, it is not necessary to set anything because this sample will use localhost. Set the developer contact information with your email and click the SAVE AND CONTINUE button:
12. Click ADD OR REMOVE SCOPES and select the following scopes, scroll the dialog, and click the UPDATE button:
13. Your non-sensitive, sensitive, and restricted scopes are listed. Accept all of them and click the SAVE AND CONTINUE button:
14. Include your email into the Test users list (using the +ADD USERS button) and click the SAVE AND CONTINUE button:
15. The wizard shows you the Summary of the filled fields. Scroll the screen and click the BACK TO DASHBOARD button.16. Now, it is time to configure the credentials for this new project. Select the option Credentials:
17. Click the button +CREATE CREDENTIALS and select OAuth client ID (we need to take this step again because now we have OAuth consent screen defined):
18. Select Web application in the Application Type and InterSystems IRIS in the Name field:
19. Configure JavaScript origins and redirects (click +ADD URI to get more fields) as follows and click the SAVE button:
JavaScript URI 1: http://localhost:52773
JavaScript URI 2: http://localhost
Redirect URI 1: http://localhost:52773
Redirect URI 2: http://localhost
Redirect URI 3: http://localhost:52773/csp/sys/dc.login.GoogleLogin.cls
20. Now we have a Client ID and a Client Secret. You should copy them to a text file on your disk or save the data using DOWNLOAD JSON:
Now we will embed Google Login to our local InterSystems IRIS instance.
InterSystems IRIS Delegated Authentication Mechanism to the Management Portal
InterSystems IRIS allows us to use a few authentication options, including Instance Authentication (a default option that uses a user and a password managed by the IRIS instance), LDAP (users managed by an enterprise repository), and Delegated Authentication (for customized authentication mechanism).We will choose Delegated Authentication because this is the option where the login uses OAuth and a custom code to get user credentials and authenticate users without the input passwords. When using OAuth, the OAuth server (Google in our use case) will authenticate and return to the InterSystems IRIS (OAuth client) the user details logged in.In our example, we want to set up Delegated Authentication to the Management Portal (csp/sys application). To make it happen, you need to take the following steps:
Create a class extending %CSP.Login and write the custom HTML, JavaScript, and CSS code for the customized login. In this article sample we will embed a Google button to log in with the Google user.
Create and write Object Script in the macro ZAUTHENTICATE.mac with the custom backend authentication login logic.
Enable Delegated Authentication to the InterSystems IRIS.
Set up Delegated authentication and the custom login page (the class extending %CSP.Login) for the /csp/sys web application (Management Portal web application).
All these steps should be done in the %SYS namespace.
Using a sample application to learn how to embed Google Login into Management Portal
To learn how to embed Google Social Login into an instance of the InterSystems IRIS, we will use the application Google IRIS Login (https://openexchange.intersystems.com/package/Google-IRIS-Login). Follow these steps in order to get it:
1. Clone/git pull the repo into any local directory:
git clone https://github.com/intersystems-community/intersystems-iris-dev-template.git
2. Go to the .env file and input your CLIENT_ID generated in your Google Cloud Console in the first part of this article.3. Open the terminal in this directory and call the command to build InterSystems IRIS in a container
docker-compose build
4. To run the InterSystems IRIS in a container, do the next:
$ docker-compose up -d
5. Access the Management Portal (http://localhost:52773/csp/sys/%2525CSP.Portal.Home.zen) and use your Google user to enter:
Ready! In the upcoming sections, we will see all the steps one needs to configure and develop inside IRIS to embed Google Social Login.
Creating a custom Login Page extended from %CSP.Login
To embed the Google Login into the Management Portal we need to create a new Login page extending from %CSP.Login. This allows us to reuse the default Login Page but requires adding the necessary source code for supporting Google Login. The custom login page will override the following class methods:
OnLoginPage: used to write the HTML and JavaScript code to render the login form with the Google Login button.
DrawHead: employed to add JavaScript code that will persist Google Login credentials returned into cookies for the backend logic use.
GoogleLogin.cls source code
Important actions on this page:1. We got CLIENT_ID and LOGIN_URI from the env file to use as parameters for the Google Login button:
Set envClientId = ##class(%SYSTEM.Util).GetEnviron("CLIENT_ID")
Set envLoginURI = ##class(%SYSTEM.Util).GetEnviron("LOGIN_URI")
2. Before the content, we needed to load the Google JavaScript library
<script src="https://accounts.google.com/gsi/client" async defer></script>
3. Our next step was to write the HTML code to render the Google button using LOGIN_URI and CLIENT_ID environment variables collected from the .env file:
<div id="g_id_onload"
data-client_id="#(envClientId)#"
data-context="signin"
data-ux_mode="popup"
data-callback="handleCredentialResponse"
data-login_uri="#(envLoginURI)#"
data-auto_prompt="false">
</div>
<div class="g_id_signin"
data-type="standard"
data-shape="rectangular"
data-theme="outline"
data-text="signin_with"
data-size="large"
data-onsuccess="onSignIn"
data-logo_alignment="left">
</div>
4. On the DrawHead class method, we wrote JavaScript functions to get the Google user credentials and store them in cookies for the backend use:
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
function newSession() {
eraseCookie('email');
window.location.reload();
}
function eraseCookie(name) {
// This function will attempt to remove a cookie from all paths.
var pathBits = location.pathname.split('/');
var pathCurrent = ' path=';
// do a simple pathless delete first.
document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;';
for (var i = 0; i < pathBits.length; i++) {
pathCurrent += ((pathCurrent.substr(-1) != '/') ? '/' : '') + pathBits[i];
document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;' + pathCurrent + ';';
}
}
function deleteAllCookies() {
const cookies = document.cookie.split(";");
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i];
const eqPos = cookie.indexOf("=");
const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
}
}
// called when page is loaded
function pageLoad()
{
// see if we can give focus to the UserName field:
if (self.document.Login && self.document.Login.IRISUsername) {
self.document.Login.IRISUsername.focus();
self.document.Login.IRISUsername.select();
}
return true;
}
function decodeJwtResponse(token) {
var base64Url = token.split('.')[1];
var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
var jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(jsonPayload);
}
function handleCredentialResponse(response) {
const responsePayload = decodeJwtResponse(response.credential);
console.log("ID: " + responsePayload.sub);
console.log('Full Name: ' + responsePayload.name);
console.log('Given Name: ' + responsePayload.given_name);
console.log('Family Name: ' + responsePayload.family_name);
console.log("Image URL: " + responsePayload.picture);
console.log("Email: " + responsePayload.email);
setCookie('email', responsePayload.email);
setCookie('googleToken', response.credential);
if(responsePayload.email !== null) {
document.getElementsByName('Login')[0].submit();
}
}
5. To see all the content for the Login Page go to src > cls > dc > login > GoogleLogin.cls file.
Creating the backend code to authenticate Google users
To write the backend logic to handle custom login using delegated mechanism, it is necessary to apply a macro with the name ZAUTHENTICATE.mac into %SYS namespace.
ZAUTHENTICATE.mac source code
Important actions in this file:1. Define and store an encrypted password for the new user selected in the Google Login prompt:
Set GooglePassword = $SYSTEM.Util.GetEnviron("GOOGLE_PASSWORD")
Set GlobalPassword = $EXTRACT(##class(dc.login.CypherUtil).DoAESCBCEncrypt(GooglePassword),1,20)
2. Refer to the Management Portal application (csp/sys) for Google Login:
Set App = $SYSTEM.Util.GetEnviron("ISC_App")
Set:App="" App = "/csp/sys"
Set GN = "^%ZAPM.AppsDelegate"
If $EXTRACT(App,*)'="/" {
Set App=App_"/"
}
3. Get the Google user selected and stored in the email cookie:
Set Email = %request.GetCookie("email")
4. Test if the user already exists. If not, create the user as a Superuser (My choice is the %All role, but you can pick another option, for example, the %Developer role). If the user already exists, just log in:
Set EmailUser = $PIECE(Email,"@")
Set qry = "select * from Security.Users where EmailAddress = ?"
Set tStatement = ##class(%SQL.Statement).%New()
Set qStatus = tStatement.%Prepare(qry)
Set rset = tStatement.%Execute(Email)
While rset.%Next() {
Set UserExists = 1
}
If UserExists = 1 {
Set Username = rset.Name
Set Password = GlobalPassword
Quit $SYSTEM.Status.OK()
} Else {
Set $nameSpace = "%SYS"
if '##class(Security.Users).Exists($PIECE(Email,"@")) {
Set status = ##class(Security.Users).Create($PIECE(Email,"@"),"%ALL",GlobalPassword,$PIECE(Email,"@"),"","","",0,1,"",1,0,"","","","")
Set status = ##class(Security.Users).Get($PIECE(Email,"@"),.properties)
Set properties("EmailAddress")=Email
Set status = ##class(Security.Users).Modify($PIECE(Email,"@"), .properties)
If status = 1 {
Set Username = $PIECE(Email,"@")
Set Password = GlobalPassword
Quit $SYSTEM.Status.OK()
}
}
}
5. Compile these files into the “%SYS” namespace.
It is time to set some parameters to ensure the delegated authentication using the custom source code written above.
Adjust the settings to ensure delegated login
1. Go to the Management Portal (http://localhost:52773/csp/sys/%2525CSP.Portal.Home.zen) and log in with _system/sys credentials.2. Proceed to System Administration > Security > System Security > Authentication/Web Session Options:
3. The option “Allow Delegated authentication” must be checked:
4. Now go to System Administration > Security > Users and select the user CSPSystem. The user must have the role DB_IRISSYS or %All role (it is necessary because this user is utilized to run the login page and the authenticate.mac logic with the permissions required to execute it):
5. Move to the System Administration > Security > Applications > Web Applications and select the /csp/sys application.6. In the "Allowed Authentication Methods" field, check the option "Delegated.7. The Login Page field must have dc.login.GoogleLogin.cls as a value (we need it to call our custom login page, instead of the IRIS default page):
8. Now to ensure the correct functioning, attach Shell to your IRIS docker instance:
9. Now restart the page from the prompt writing and execute the command "iris restart iris":
10. Finally, go to the Login page again.
Now you have Google as an option to log in. Enjoy it! wow - what an incredibly in-depth tutorial! thank you @Yuri.Gomes for the time you took putting this together for the Community! Many thanks! @Yuri.Gomes Thank you so much for this great work - tutorial, and application! 👏👏
Looks like you implemented the idea:
💡Please add google oauth authorization to login to the management portal💡
from Ideas Portal ✨
Many thanks!👏 Thanks! Yes, I implemented it. Thank you, @Yuri.Gomes! Can we have the similar implementation for GitHub OAuth too? Github is the most popular site for developers, so authentication via GItHub will be very handy for developers. Yes, I will work on Github too.
Announcement
Anastasia Dyubaylo · Jul 12, 2023
Hey Developers,
Enjoy watching the new video on InterSystems Developers YouTube:
⏯ Projecting Data into InterSystems IRIS with Foreign Tables
See the benefits of projecting data into InterSystems IRIS® data platform using Foreign Tables. This feature allows you to access external data without loading it into your instance, saving on storage space and guaranteeing your data is up to date.
Subscribe to our channel to stay tuned!
Announcement
Anastasia Dyubaylo · Jul 18, 2023
Hi Community,
Watch this video to learn how InterSystems software enables both horizontal and vertical scaling:
⏯ Scaling for User and Data Volume in InterSystems IRIS
Stay tuned and subscribe to InterSystems Developers YouTube!
Announcement
Jessica Simmons · Nov 1, 2022
VetsEZ is looking for an InterSystems Technology Platform - Practice Lead to serve our Federal healthcare customers. As a lead systems integrator, VetsEZ has been delivering large-scale implementations for various federal customers, including the Department of Veterans Affairs (VA), with the world's largest footprint of InterSystems technologies. InterSystems Technology Platform comprises core technologies, including HealthShare, Caché, IRIS, Ensemble, DeepSee, and iKnow. The ideal candidate will possess the required technical knowledge and the leadership skills necessary for leading and growing our practice. We aim to become a certified InterSystems partner and achieve the Unified Care Record (UCR) certification. We value candidates with solid communication skills who can work in a fast-paced, challenging environment.
The candidate must reside within the continental US.
Responsibilities:
• Engage with clients at the senior leadership level to understand unique business drivers, pain points, overall technology landscape, timeline, and priorities; understand what success looks like to the client; and, most importantly, how our services can help fill that need
• Grow strong clientele and partner relationships through regular communication, reliable expectation management, and delivering on promises
• Identify skill sets and timing for resource needs and help to shepherd resources in and out of projects
• Act as a technical lead, and mentor team members while maintaining a hands-on role. Subject-matter expertise in healthcare interoperability and InterSystems Technology Platform
• Understand complex technical and business requirements and translate them into highly scalable, robust integration architectures
• Architect and configure the InterSystems HealthShare / IRIS platform with a focus on Automation and CI/CD
• Utilize Healthcare Interoperability Standards (HL7v2, FHIR, CCDA, IHE, X12) appropriately in solution designs.
• Lead development teams in building solutions and automating processes
• Utilize CI/CD technologies and processes including but not limited to Git, Jenkins, Docker
• Use AWS-based cloud architectures, VM and Containers, and deployment strategies to Architect solutions
• Utilize Enterprise Integration Patterns in solution designs.
Required Skills and Abilities:
• Hands-on Architect with leadership experience to guide and mentor a team
• Flexible and able to adapt to frequently changing standards and priorities
• Customer advocate, working hard to ensure customer success and satisfaction
• Proven experience developing and implementing highly scalable enterprise-level interoperability solutions
• Passion for deploying scalable, robust solutions with an eye toward futureproofing
• Strong interpersonal skills, with a desire to interact with various team members, customers, and end-users.
Qualifications:
• Bachelor's Degree in Computer Science or equivalent area. Master's degree preferred.
• Experience in the VA, specifically with VA VistA and FileMan, is a plus.
• Background in healthcare preferred.
• 5+ years of experience
• Must be able to obtain and maintain public trust clearance
• Team-oriented contributor with excellent interpersonal skills
Additional Qualifications:
Must be able to obtain and maintain Public Trust Clearance
Team-oriented contributor with excellent interpersonal skills
Must have reliable internet service for remote work
Background in the Department of Veterans Affairs and healthcare preferred
Benefits:
Medical/Dental/Vision
401k with Employer Match
Corporate Laptop
PTO + Federal Holidays
Training opportunities
Remote work options
Qualified applicants will receive consideration for employment regardless of race, color, religion, sex, national origin, sexual orientation, gender identity, disability, or protected veteran status.
Sorry, we are unable to offer sponsorship currently.
https://vetsez.breezy.hr/p/edb1586759dc01-intersystems-technology-platform-practice-lead-remote-opportunity?state=published
Announcement
Bob Kuszewski · Nov 22, 2022
Announcing the InterSystems Container Registry web user interface
InterSystems is pleased to announce the release of the InterSystems Container Registry web user interface. This tool is designed to make it easier to discover, access, and use the many Container images hosted on ICR.
The InterSystems Container Registry UI is available at: https://containers.intersystems.com/contents
Community Edition Containers
When you visit the ICR user interface, you’ll have access to InterSystems' publicly available containers, including the IRIS community edition containers. Use the left-hand navigation to select the product family that interests you, then the container, and finally select the specific version.
Enterprise Edition Containers
You can see the private containers, including the IRIS enterprise edition, by clicking on the Login button. Once logged in, the left-hand navigation will include all the containers you have access to.
Enjoy!
That great, can be very useful to just check if a version is still available or the one that just came out. A great resource for our community - thanks! This is nice !! Thank you @Robert.Kuszewski !! SUPER !!!
Article
Anastasia Dyubaylo · Jan 26, 2023
Hello Community,
Some of you have passed the InterSystems Official Certification and would like to get a nifty green tick on your profile avatar
and all your certificates in your DC profile so that others know that you know... you know what we mean
So, to add certification to your DC profile, you need to take 3 easy steps:
1️⃣ Go to your DC profile
2️⃣ Go to the InterSystems Certification section
3️⃣ Click on the Load my certification(s) button
and that's it!
The system will send the request to Credly with your DC email. If your certification is linked to the same email, your certificates will be loaded automatically:
If not, please follow the detailed steps described on the page:
And you're done. Now everyone knows that you know... ;)
Congratulations on adding the Certification and on actually passing it. Well done! Ooooh, I have a green tick. That's one up on twitter :) Yeah, congrats!! 🎉 The certifications came across on my profile but for some reason I am not seeing the green checkmark. Is this supposed to work for InterSystems employees? nevermind - it shows up now for some reason :) Yes, it may take some time for the checkmark to load on your profile ;)
Article
Anastasia Dyubaylo · Mar 30, 2023
Hi Community,
Some of you would like to share an event (online or offline) with others on our Community and here is a how-to on how to actually create an Event to invite your fellow members.
The main challenge when creating an event is to fill in all the necessary pieces of information in the right places. So let's look at what needs to be done.
First of all, you need to choose the tag Events
After you've done it, you'll see that a new form appeared at the bottom of the page:
When filling in the form please follow the instruction provided. Click Publish as usual and your event will become visible on the main page of the Community. And this is it.
If you have any comments or questions, please don't hesitate to ask them in the Comments section.