Moonshine-IDE / Super.Human.Portal

Portal interface to show documentation for DominoVagrant and Super.Human.Installer
Other
0 stars 1 forks source link

Database Access Links #19

Closed JoelProminic closed 1 year ago

JoelProminic commented 1 year ago

@dpastov, @piotrzarzycki21,

This is an extension for the logic in #13.

We would like to support access links with type:"database". We currently represent these with single url values using the notes:// syntax:

    {
      "access": {
        "description": "OpenNTF",
        "links": [
          {
            "server": "demo.STARTcloud.com/STARTcloud",
            "name": "NotesDatabase Link",
            "type": "database",
            "url": "notes://demo.STARTcloud.com/absence.nsf"
          }
        ]
      },
      "AppID": "absence",
      ...
    },

Instead, I would like to give the users some options for opening the database:

Option Description
Open in Notes Client Use a notes:// link. This will require that the hosts file was populated, and may trigger some extra warnings in the client.
Open with Nomad Open the database in Nomad, which works as a web replacement for the Notes client. This is an optional feature for Super.Human.Installer, and I have had some trouble with it in my tests.
Let the user open it themselves Display the server, database, and view (optional) to let the user open the application manually if they prefer (or the other options are broken).

I intend to return this information for the link:

          {
            "name": "NotesDatabase Link",
            "type": "database",
            "url": "notes://demo.STARTcloud.com/absence.nsf"
            "nomadURL": "...TODO..."
            "server": "demo.STARTcloud.com/STARTcloud",
            "database": "absence.nsf",
            "view":"Configuration"
          }
Property Description
url This will be the "Open in Notes Client" URL. I'll reuse the property for bacwards compatibility.
nomadURL The URL for nomad. I need to investigate how this will look
server the server name. Populated by my agent
database the database name and path, provided by the Genesis API
view (optional) the target view. If this is not provided, the UI should hide the view label, and the URLs should exclude the view (the link will open the default view)
JoelProminic commented 1 year ago

Here is an example UI to clarify what information should be displayed. @piotrzarzycki21, I am flexible about how this UI is presented, but hopefully this clarifies my request.

image

JoelProminic commented 1 year ago

The format for the nomad links is like this: https://nomadweb.europa-1.jupiter.com/nomad/#/Notes://europa-1.jupiter.com/8025739D005C7E54/MainFrameset?OpenFrameset&view=OFDB5408A99659495680257245004427D0

This looks to be the notes:// link appended to https://nomadweb.%server_common%/normad/#/. From my tests with the notes:// URLs, I can replace the universal IDs with the database and view names. I'll do some experiments with this once I recreate my Super.Human.Installer instance with Nomad installed.

JoelProminic commented 1 year ago

I finally got a local Super.Human.Installer instance set up with Nomad. Note that:

I confirmed I could get the links to work with the database and view names. The format after /#/ is the same as the notes:// format that we already generated, so we can compute nomadURL easily like this:

Database: https://nomadweb.%SERVER_COMMON%/nomad/#/notes://%SERVER_COMMON%/SuperHumanPortal.nsf View: https://nomadweb.%SERVER_COMMON%/nomad/#/notes://%SERVER_COMMON%/SuperHumanPortal.nsf/Configuration?OpenView

Some notes on the behavior:

piotrzarzycki21 commented 1 year ago

@JoelProminic I have pushed first version of that view to master. Dev build is ready to first review.

JoelProminic commented 1 year ago

The current interface looks like this: image

I see that the Database is missing - is this because the property is not populated yet? I have some pending updates to the agent for this issue.

The Open in Client link works properly.

piotrzarzycki21 commented 1 year ago

I see that the Database is missing - is this because the property is not populated yet? I have some pending updates to the agent for this issue.

Exactly. If property any item of configuration is not present I'm not displaying it. In above case "database" and "nomad" link are missing.

piotrzarzycki21 commented 1 year ago

@JoelProminic I just pushed database name fix, so next dev build should have it.

JoelProminic commented 1 year ago

I populated some more data in the agents locally so that I could test the other interfaces. I haven't committed this yet, since I want to try to do this in a way so that it won't break when @dpastov updates the Genesis API.

Database Link Display Copy to Clipboard
Server populated Server displayed Works
Server not populated Not Tested
Database not poopulated Database not displayed N/A
Database populated Fixed Returns correct value
View not populated View not displayed N/A
View populated View displayed No button
url populated Open in Client displayed, works N/A
url not populated Not Tested
nomadURL populated Open in Nomad displayed, works N/A
nomadURL not populated Button not displayed N/A
piotrzarzycki21 commented 1 year ago

@JoelProminic I have added button for showing/hiding configuration. I have named that button "Database". We can change name if you think it's not the right one.

https://user-images.githubusercontent.com/24554795/235936502-31f864a5-3b88-4c13-9b89-fa15dc639d47.mov

piotrzarzycki21 commented 1 year ago

@JoelProminic I have made quick fixes for issues which we have found during meeting:

JoelProminic commented 1 year ago

I like the collapsible database options, I think this fits better with the browser actions.: image

We could potentially merge the button and the header in this expanded option, but this is not required.

I'll watch for that NPE, but it hasn't triggered so far.

dpastov commented 1 year ago

@JoelProminic I have made needed updates to JSON output

https://api.genesis.directory/v1/apps

image

Here is an output of the agent from superhumanportal.nsf (the version you uploaded a week ago or so). http://localhost/SuperHumanPortal.nsf/GenesisRead?OpenAgent (from my local server)

image

JoelProminic commented 1 year ago

@dpastov, I see that database and view were populated. The update seems to work well with the current production agent implementation as well.

url and nomadURL are not populated, but my agent has code for that. I could see it being useful to provide a custom URL in some cases, so the next version of the agent code will not override url or nomadURL if you provide them.

I am also working on insertion parameters, but that got interrupted by another task. I'll add the details here when I am done.

JoelProminic commented 1 year ago

I added support for insertion parameters in access.description and for all properties in the links except type. Most of these cases are probably not useful, but it was easy to include them.

The current available parameters are:

Parameter Description
%SERVER_COMMON% The common name. This is useful for URLs (though this may not work for all servers)
%SERVER_ABBR% The abbreviated server name (i.e. test-1.test.com/TEST).

We can add more parameters if necessary. Don't feel obligated to use the parameters if they are not helpful.

JoelProminic commented 1 year ago

I also added support to include views to the generated url and nomadURL.

While working on this, I revisted the encoding for the database and view names in the URLs. For example, if I have foo/Test DB.nsf for database and bar\Test View for view, I am URL encoding the database to get a URL like this

notes:/test-1.test.com/foo%2FTest+DB.nsf/bar%5CTest+View

NOTE: for database this works with both / and \, but for View names this only works for \. If I use forward slashes in the view, I get an error like "Invalid Document" when encoded, or it ignores everything after the first / when unencoded (in the above case, it would open the bar view).

JoelProminic commented 1 year ago

@dpastov, also note that the database name is case-sensitive for example for iMessageSMS, I see this link:

          {
            "database": "iMessageSMS.nsf",
            "view": "8. Config",
            "name": "NotesDatabase Link (Configuration)",
            "type": "database",
            "url": ""
          }

But the actual database installed by Genesis is imessagesms.nsf. (I also see that I don't have permissions for this database as a member of AutomaticallyCrossCertifiedUsers, but that is something we can discuss separately).

JoelProminic commented 1 year ago

Otherwise, the updates are looking good. @piotrzarzycki21, you can install my agents from the repository if you want to try testing.

I'll plan to do a final review next week and then we can do a release.

piotrzarzycki21 commented 1 year ago

Otherwise, the updates are looking good. @piotrzarzycki21, you can install my agents from the repository if you want to try testing.

I'll plan to do a final review next week and then we can do a release.

I did test for your update. Everything seems to be fine.

JoelProminic commented 1 year ago

image

Right now the name property is duplicated in the button name and the section header. We would like to replace the section header with a description, which will require a new description property in the link JSON. If description does not exist or it is blank/empty, then don't show this header.

@dpastov please add the description property for the links when you have a chance. We can discuss this more tomorrow if you need more clarification.

JoelProminic commented 1 year ago

I made some updates to support the link descriptions. For now, I hard-coded some descriptions for the Super.Human.Portal app links:

    {
      "access": {
        "description": "Install applications on your Domino server using Genesis.  View useful Domino documentation.",
        "links": [
          {
            "database": "",
            "view": "",
            "name": "Web Interface",
            "description": "This is an example link description for Super.Human.Portal.",
            "type": "browser",
            "url": "/Super.Human.Portal/js-release/index.html"
          },
          {
            "server": "domino-1.demoprod.com/DEMOPROD",
            "database": "SuperHumanPortal.nsf",
            "view": "Configuration",
            "name": "Configuration Database",
            "description": "This is an example link description for Super.Human.Portal.",
            "nomadURL": "https://nomadweb.domino-1.demoprod.com/nomad/#/notes://domino-1.demoprod.com/SuperHumanPortal.nsf/Configuration?OpenView",
            "type": "database",
            "url": "notes://domino-1.demoprod.com/SuperHumanPortal.nsf/Configuration?OpenView"
          }
        ]
      },
      "AppID": "superhumanportal",
      "DetailsURL": "https://genesis.directory/apps/superhumanportal",
      "InstallTimeS": 15,
      "Installed": true,
      "Label": "Super Human Portal",
      "InstallCommand": "install superhumanportal"
    }

Note that I added description on both the browser and database links. It makes sense to me tht we may want to add some notes to the links, but I'm not sure how this will look in the UI. We can discuss this more tomorrow, but here are some ideas:

piotrzarzycki21 commented 1 year ago

I made some updates to support the link descriptions. For now, I hard-coded some descriptions for the Super.Human.Portal app links:

    {
      "access": {
        "description": "Install applications on your Domino server using Genesis.  View useful Domino documentation.",
        "links": [
          {
            "database": "",
            "view": "",
            "name": "Web Interface",
            "description": "This is an example link description for Super.Human.Portal.",
            "type": "browser",
            "url": "/Super.Human.Portal/js-release/index.html"
          },
          {
            "server": "domino-1.demoprod.com/DEMOPROD",
            "database": "SuperHumanPortal.nsf",
            "view": "Configuration",
            "name": "Configuration Database",
            "description": "This is an example link description for Super.Human.Portal.",
            "nomadURL": "https://nomadweb.domino-1.demoprod.com/nomad/#/notes://domino-1.demoprod.com/SuperHumanPortal.nsf/Configuration?OpenView",
            "type": "database",
            "url": "notes://domino-1.demoprod.com/SuperHumanPortal.nsf/Configuration?OpenView"
          }
        ]
      },
      "AppID": "superhumanportal",
      "DetailsURL": "https://genesis.directory/apps/superhumanportal",
      "InstallTimeS": 15,
      "Installed": true,
      "Label": "Super Human Portal",
      "InstallCommand": "install superhumanportal"
    }

Note that I added description on both the browser and database links. It makes sense to me tht we may want to add some notes to the links, but I'm not sure how this will look in the UI. We can discuss this more tomorrow, but here are some ideas:

  • Expand the browser links to see the description. The button should still be clickable
  • Add the description below or inside the button with smaller text.

Description has been added. Header won't be displayed if description doesn't exists.

JoelProminic commented 1 year ago

I deployed the last builds of the Royale application from here: https://github.com/Moonshine-IDE/Super.Human.Portal/actions/runs/4959806131

However, neither link type is expandable for me, and I don't see the description. It feels like I am accidentally on an old build, but I confirmed that I downloaded and updated this build today...

JoelProminic commented 1 year ago

Now that I can see the updated build, I see this: image

And if there is no description: image

This looks good. I don't see the description on the browser link, though. We can discuss if we need this in the meeting tomorrow.

JoelProminic commented 1 year ago

We discussed this today, and we can ignore the description for browser links for now. We may revisit this later.

JoelProminic commented 10 months ago

I tried to create a link yesterday including a nested view, and I found that it failed until I removed the view. Doing some more testing with the URL format, using a view called All By UNID\By Creation Date, I see this behavior:

## NomadWeb
# Opens "All by UNID"
https://nomadweb.domino-1.demoprod.com/nomad/#/notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID%2FBy+Creation+Date?OpenView
https://nomadweb.domino-1.demoprod.com/nomad/#/notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID/By+Creation+Date?OpenView
https://nomadweb.domino-1.demoprod.com/nomad/#/notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID\By+Creation+Date?OpenView
https://nomadweb.domino-1.demoprod.com/nomad/#/notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID%5CBy+Creation+Date?OpenView

# Notes Client
# fails
notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID%2FBy+Creation+Date?OpenView
# Opens "All By UNID"
notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID/By+Creation+Date?OpenView
# Works:
notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID\By+Creation+Date?OpenView
notes://domino-1.demoprod.com/AuthorBookFan.nsf/All+By+UNID%5CBy+Creation+Date?OpenView

In the Java API, both forward and backwards slashes are supported in the view names, but I see the notes:// format expects backward slashes only. Nomad isn't working at all for this case.

We may want to add some clarification for this later, but for now I wanted to at least record my findings.