Feature Spec - Studio3T/robomongo GitHub Wiki

Robo 3T Feature Specisification

Discuss: Move this doc. to -> under /doc/ when stable ?
Todo: Add more from config file
Useful Links: https://github.com/Studio3T/robomongo/wiki/Robomongo-Config-File


Features added in Robo 1.4

More: https://blog.robomongo.org/robo-3t-1-4/

// From URI Feature

  • Connection Settings dialog -> Connection tab now has "From URI" button/feature (previously "From SRV").
  • With this change, "Standard Connection String Format" support added (in addition to SRV).
  • So currently, "Standard Connection String Format" and "SRV" URI strings are supported for Standalone and Replica Set configs.

Feature Details:
Every time From URI Button clicked, the followings will happen:

  • First, Mongo URI string (e.g. mongodb://mongodb0.example.com:27017) is parsed.
  • If something is wrong with URI format, user will be notified with error message coming from MongoDB code.
  • All tabs except SSH tab will be cleared or set back to default values.
  • All tabs except SSH tab will be set from what is parsed from URI.
  • Supported UI items:
    . Connection tab: Type, Address/Port, Members, Set Name
    . Auth tab: All items except "Manually visible databases"
    . TLS tab: All items except "CRL" and "Ask for passphrase each time"
    . Advanced tab

Ref: https://docs.mongodb.com/manual/reference/connection-string/

// Disable SSH tab for new and existing replica set connections

And new tooltip message for Use SSH tunnel checkbox - should also be visible only for Replica Set connections: "SSH is currently not supported for Replica Set connections"

// Force light mode on macOS (#1761, #1768, #1771)
Robo should start in light mode when macOS is in light or dark mode

// ExplorerWidget has smaller default width + Remember ExplorerWidget size

Details:

// Import keys from old version
Import these keys from old version:
autoExpand, lineNumbers, debugMode and shellTimeoutSec

// New Welcome Tab (for Windows, macOS)
Details in "Welcome Tab" section

// Build number

In Menu -> About window, there should be a build number and MM/YYYY next to Robo version.
e.g. Robo 3T 1.4.3 (Build 122dbd9 - 1/2021) for installer robo3t-1.4.1-darwin-x86_64-122dbd9.dmg.

// In app download URL
Organic (e.g. google) visitors should hit www.robomongo.org/download, while users from the app www.robomongo.org/download/download?inappupdate

// SSH: ECDSA and Ed25519 keys support (Windows & macOS only)
SSH connection from Windows and macOS should work with ECDSA and Ed25519 keys.
Note: Linux box (e.g. Ubuntu) might be preferred as an SSH Server.

// disableHttpsFeatures flag (config file)
Designed to be modified only by human users
Disables https related features (gets/posts/pages/forms)

When true:

  • Don't show eula dialog form (2nd) page
    . Delete/rename config file
    . Start Robo
    . Select Cancel on Eula dialog
    . Change disableHttpsFeatures to true
    . Re-start Robo, Eula dialog form (2nd page) should not be shown

  • Update bar: Don't check for updates (even when "checkForUpdates" : true)

  • Menu -> Open Welcome Tab item should not be visible

  • Welcome Tab will not be opened at program startup

  • Welcome Tab text, image or rss should not be downloaded (delete/rename cache folder before opening Robo)

// Manually visible dbs
Manually specify visible databases section connection settings auth. tab (#1696)

  • Used for this problem:
    . How to reproduce: create non-admin user for a database on Mongo Atlas. Connect w/ Robo, no dbs will be visible.

  • Check
    . Robo force shows the dbs user entered even they don't exist, we trust the user here
    . When "Manually specify visible databases" option disabled and listdatabases command fails, This warning window/hint is shown to user: "Warning: listdatabases failed Hint: If this user has access to a specific database, please use "Manually specify visible databases" option in Connection Settings window -> Authentication tab."

Features added in Robo 1.3

More: https://blog.robomongo.org/robo-3t-1-3

// Importing from MongoDB SRV connection strings
All Robo 3T connection settings tabs should be updated correctly.

Example MongoDB SRV connection strings:
mongodb+srv://admin:[email protected]/test

// Query results windows now supports tabbed output #1591 #1403

  • Tabbed output should be acivated when there are 3 or more statements in a query.
  • When statements count is 1 or 2, the result should be non-tabbed (side-by-side) so that the user can see/compare results more easily

// Support for SCRAM-SHA-256 auth mechanism
Users created with auth mechanism SCRAM-SHA-256 should be able to connect to server

// Encrypted passwords are used in config. file instead of clear text passwords
Encrpyted passwords feature will appply to 4 parameters in config file:

  1. Main connection (MongoDB) password
  2. SSH password & passphrase
  3. SSL PEM passphrase
  4. An example of encrypted passwords in Robo 3T 1.3 config file can be seen below:
robo3T.json: 
  ...
  {
   "connectionName" : "atlas",
   "credentials" : [
    {
     ...
     "mechanism" : "SCRAM-SHA-256",
     "userName" : "admin",
     "userPasswordEncrypted" : "AwL8SywX8c0="    <-- MongoDB password 
    }
   ],
   ...
   "ssh" : {
    ...
    "method" : "publickey",
    "passphraseEncrypted" : "AwJyY9PvDQ==",      <-- SSH passphrase
    "port" : 22,
    ...
    "userName" : "admin",
    "userPasswordEncrypted" : "AwKdhGVYuw=="     <-- SSH password
   },
   "ssl" : {
    ...
    "pemKeyFile" : "",
    "pemPassPhraseEncrypted" : "AwIGSdjjFC8",    <-- SSL PEM passphrase
    ...
   },
   ...
  },
  ...

Features added in Robo 1.2

More: https://blog.robomongo.org/robo-3t-1-2/

// Paging support for aggregate queries
Paging should work for aggregate queries

Features added in Robo 1.1

More: https://blog.robomongo.org/robomongo-is-robo-3t/

// Shell Timeout
Run a long query that times out (e.g. add 4000 objects)
Confirm query failed and change timeout dialog prompted to user
Change timeout
Check document object count
Re-run timed out query, confirm query finished with success
Re-check document object count (e.g. to see all object are added)
Close/open Robo check config file has correct value e.g. "shellTimeoutSec" : 15,

// NumberDecimal (Decimal128) Support
NumberDecimal (Decimal128) is added as new data type in MongoDB 3.4.

Examples of Usage:

  • The NumberDecimal("") constructor accepts the decimal value as a string:
    db.getCollection('Bills').insert({ "Jan": NumberDecimal("1000.55") })
  • The value is stored in the database as follows: NumberDecimal("1000.55")
  • UI: In results window type should be Decimal128
  • UI: In Edit Document window object should be: "Jan": NumberDecimal("1000.55")

// JavaScript ES2015 (ES6) Support
This query should work:

  const x = 3;	// "const" from ES2015  
  db.getCollection('aa').find({}).limit(x);  

Feature added in Robo 1.0

More: https://blog.robomongo.org/robomongo-1-0/

// Update bar (HTTPS)
Info:

  • First check for updates 30 secs after program start
  • Check for updates every 1 hour
  • Check for updates 1 second after menu item "Options -> Check For Updates" selected (* Added in v1.4)

Cases:

  • UI: Changing Menu item "Options -> Check For Updates should enable/disable this feature
  • Changing flag <"checkForUpdates" : true> should enable/disable this feature

URL: Example query for v1.4.1:
https://updates.3t.io/check.php?os=win&softwareId=8&softwareVersion=1.4.1&licenseInfo=FREE&setup=d7bfab48-0f34-4c28-a172- 0efbcb0ac581&notify=true#

Before 1.4:
http://updates.3tsoftwarelabs.com/check.php?os=win&softwareId=8&softwareVersion=1.2.1&licenseInfo=FREE&setup=d7bfab48-0f34-4c28-a172-0efbcb0ac581&notify=true#

Debug:
curl https://updates.3t.io/check.php?os=win&softwareId=8&softwareVersion=1.4.1&licenseInfo=FREE&setup=d7bfab48-0f34-4c28-a172-0efbcb0ac581&notify=true#

Code:
MainWindow::checkUpdates()

// Welcome Tab (HTTPS)

For Windows, macOS: (Added in v1.4.3)
Welcome Tab works/looks entirely different in Windows and macOS.
It embeds and acts like Chromium Web browser.
Checks:

  • Right click/context menu should be disabled
  • Clicks to links should be forwarded to external browser (e.g. Chrome)

For Linux:
See: https://github.com/Studio3T/robomongo/wiki/How-Welcome-Tab-works

Download URLs for v1.4.0:
pic URL = https://files.studio3t.com/rm-feed_3t_io/1.4.0/image.png
text URL = http://files.studio3t.com/rm-feed_3t_io/1.4.0/contents.txt
rss URL = https://blog.robomongo.org/rss/

Use Cases:
1> HTTPS download
Delete/rename cache folder: ~/.3T/robo3t/1.x.y/cache
Open Robo
~/.3T/robo3t/1.x.y/cache/ folder should be created
~/.3T/robo3t/1.x.y/cache/ following files should be created with correct content
. rss.xml
. contents.txt
. image.png

In config. file, following timestamps (last modified dates in server) should be created:

...
 "cacheData" : {
  "wtImage1LastModifiedDate" : "2019-05-03T10:16:17Z",
  "wtRssLastModifiedDate" : "NotImplemented",
  "wtText1LastModifiedDate" : "2020-02-04T11:05:06Z"
 },

Ref image: https://github.com/Studio3T/robomongo/wiki/How-Welcome-Tab-works

2> Loading from cache folder
Disable internet
Welcome Tab should load from cache and should work as expected

3> It should be possible to open Welcome Tab again after closing or refresh existing Welcome Tab content from "Window -> Open/Refresh Welcome Tab" menu item

// Eula Dialog (HTTPS) aka Welcome Wizard

  • Form (user data) should be sent
    When:
    . At least email must be filled
    . disableHttpsFeatures is false & programExitedNormally is true
    . Note: Ask 3T to provide form received email or use wireshark to verify form sent/received

  • URL info: https://rm-form.3t.io/

Features added in older versions

// SSH

  • PPK keys are not supported, they must be converted to OPENSSH format.

// Import connections

  • Todo: Should we also import some flags?

  • Main
    . Connections are imported from old config file

  • These flags should have these default values after or w/o import:

programExitedNormally = true;  
disableHttpsFeatures = false;  
checkForUpdates = true;  

// Style & Fonts

  • Close Robo
  • Change these values in config file
  • Confirm overall style of program changed
  • Confirm font of query section and result in text mode changed
 "style" : "Native",
 "textFontFamily" : "",
 "textFontPointSize" : -1, 

// IPv6

  • Main
    . When started from command line with robo3t --ipv6 option, Robo should connect to db server using IPv6 addresses
    . Db server must also be started with --ipv6 option

  • Basic checks:
    . Connect to local server with ::1 (which is localhost in IPv6)
    . Connect to local server with IP address using IPv6 format (e.g. 192.168.100.15 in IPv6 is 0:0:0:0:0:ffff:c0a8:640f)
    . Todo: How to connect to Mongo Atlas with IPv6?

  • Working example for mongo shell:

mongod --dbpath E:\data\4.2 --bind_ip_all --ipv6
mongo --ipv6 --host ::1
  • Related mongo shell feature:
mongo -h
  MongoDB shell version v4.2.6
    --ipv6 	enable IPv6 support (disabled by default)

// programExitedNormally flag

  • Main:
    Start Robo
    Kill/End process Robo
    programExitedNormally should be false
    Start Robo
    Close Robo
    Check programExitedNormally is true

  • When false, Eula dialog form (2nd) page should not be shown
    Delete/rename config file
    Open Robo
    Select Cancel on Eula dialog
    Change programExitedNormally to false
    Open Robo
    Check Eula dialog form (2nd) page is not shown

// "batchSize" : 50

  • Change this to 10, Robo should show 10 documents by default when a collection double clicked.

// mongo.rc
todo

// Default db
Change default db e.g. yy
Open shell from "Connection Icon", not from any db