According to WRC support, SOCKS proxies are unfortunately not supported. What a shame, especially when an open-source tool like curl works. At the moment, the only solution for me is to request a VPN solution that allows me to access company internal services.
I looked through the source to understand how those links are generated and found this:
When you click the Health button in the Management Portal, the list of namespaces that are displayed in the chooser are linked to the default application of the namespace, which in my case happened to be /csp/<namespace>
. That was the reason why the URLs were returning 404. After I modified the namespace default application to be /csp/healthshare/<namespace>
, the links started working.
So after I upgraded the container, the web application data was stored in durable %SYS
and was not updated on container startup. One has to modify the applications manually or via some method after instance startup (%ZSTART
, for example).
Here is a short script that I used to update the default application for all namespaces:
Set $NAMESPACE = "%SYS"
Set oldUiUrl = "/csp/" _ namespace _ "/"
Set newUiUrl = "/csp/healthshare/" _ namespace _ "/"
Set namespace = "yournamespace" // Change this to your namespace or add it as a method parameter that is used to loop through all your namespaces
Write "Checking if app " _ oldUiUrl _ " exists...", !
If (##class(Security.Applications).Exists(oldUiUrl, .oldApp, .status)) {
If (##class(Security.Applications).Exists(newUiUrl, .newApp, .status)) {
Write "Switching namespace default application from " _ oldUiUrl _ " to " _ newUiUrl, !
Set namespace = $ZConvert(namespace, "L")
Set props("IsNameSpaceDefault") = 0
Set sc = ##class(Security.Applications).Modify(oldUiUrl, .props)
If $$$ISERR(sc) {
Write "Failed to modify application " _ oldUiUrl _ ". Error=" _ $SYSTEM.sc.GetErrorText(sc), !
Return sc
} Else {
Write "Application " _ oldUiUrl _ " modified successfully", !
}
Set props("IsNameSpaceDefault") = 1
Set sc = ##class(Security.Applications).Modify(newUiUrl, .props)
If $$$ISERR(sc) {
Write "Failed to modify application " _ newUiUrl _ ". Error=" _ $SYSTEM.sc.GetErrorText(sc), !
Return sc
} Else {
Write "Application " _ newUiUrl _ " modified successfully", !
}
}
}
If you have any good tips on how to improve the upgrade process, please share them in the comments.
Hi @Tani Frankel
I ended up using Data Element Encryption (https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...) together with Production Credentials to store my secrets for 3rd party APIs securely, because in my use case that was way more easier than dealing with password vaults.
I encrypt my secrets using the data element encryption key I created (and activated), and then add them to Production Credentials encrypted.
When I need to use the credentials e.g. in a HTTP Operation, I just get the credentials I want and decrypt them with the same key just before sending the request.
I implemented a simple class which handles these tasks for me so I can just call Encrypt() and Decrypt() to get my ciphertext / plaintext when needed.
Let me know if you need more assistance with this approach.
Br, Kari