Conversion Issue from Keeper to 1Password - Shared Folders Don't get converted to tags
@MrC I was checking the data as you suggested and found that shared folders do not get
converted to tags like normal folders do.
I've put a screenshot of what the JSON file looks like for a shared folder.
1Password Version: Not Provided
Extension Version: Not Provided
OS Version: Not Provided
Browser: Not Provided
Comments
-
I've reviewed my test export files and find that some records have a
shared_folder
attribute, but its value is "1". They look like this:"folders": [ { "shared_folder": "1", "can_edit": "1", "can_share": "1", "folder": "A Shared Folder" }, { "shared_folder": "1", "can_edit": "1", "can_share": "1", "folder": "B Shared Folder" } ]
Notice these also have a
folder
attribute, which is the folder name. It appears your data'sshared_folder
attribute (and perhaps the new export format) contains the actual folder name now, but there is nofolder
attribute. Can you confirm this is the case?Also, there is a top level
shared_folders
list, which for me with my free accounts is always empty:"shared_folders": [],
Is your list empty too? If not, what does it look like?
1 -
This is the top of the JSON, I have 3 shared folders.
{ "shared_folders": [ { "uid": "LxuHiRnyTMkkPt1Za-sn9g", "path": "MMIT Share Items", "manage_users": false, "manage_records": false, "can_edit": false, "can_share": false, "permissions": [ { "name": "gholcomb@domain.com", "manage_users": true, "manage_records": true }, { "name": "glenn@domain.com", "manage_users": false, "manage_records": false }, { "uid": "GwyFvvzCHm7TNWyBYwMvIQ", "name": "Sales", "manage_users": false, "manage_records": false } ] }, { "uid": "mPmEabnykaZMOmiHwzMXYw", "path": "TEST Shared Folder 1", "manage_users": false, "manage_records": false, "can_edit": false, "can_share": false, "permissions": [ { "name": "gholcomb@domain.com", "manage_users": true, "manage_records": true } ] }, { "uid": "q93G76MSaFQtMQkD8S1Kqg", "path": "TEST Shared Folder 2", "manage_users": false, "manage_records": true, "can_edit": true, "can_share": false, "permissions": [ { "name": "gholcomb@domain.com", "manage_users": true, "manage_records": true } ] } ],
0 -
Oh, that's good data. Odd that their
folder
attribute only refers to a folder by name (vs.uid
).If there no data you need from the
shared_folders
list, I'll just add the value of thefolder
attribute as a tag. Is that sufficient?If so, I've posted an updated version in Custom for you.
0 -
Folder name as tag would be great. That way after the import into 1Password I'd just move anything with that tag into a new shared vault.
0 -
This is what is at the top of the JSON file, I do have these 3 shared folders in my Keeper Vault
"shared_folders": [ { "uid": "uid", "path": "MMIT Share Items", "manage_users": false, "manage_records": false, "can_edit": false, "can_share": false, "permissions": [ { "name": "gholcomb@domain.com", "manage_users": true, "manage_records": true }, { "name": "glenn@domain.com", "manage_users": false, "manage_records": false }, { "uid": "uid", "name": "Sales", "manage_users": false, "manage_records": false } ] }, { "uid": "uid", "path": "TEST Shared Folder 1", "manage_users": false, "manage_records": false, "can_edit": false, "can_share": false, "permissions": [ { "name": "gholcomb@domain.com", "manage_users": true, "manage_records": true } ] }, { "uid": "uid", "path": "TEST Shared Folder 2", "manage_users": false, "manage_records": true, "can_edit": true, "can_share": false, "permissions": [ { "name": "gholcomb@domain.com", "manage_users": true, "manage_records": true } ] } ],
Then the entries in those folders look like this.
{ "uid": 918, "title": "Test Login 1", "$type": "login", "login": "test@test.com", "password": "password", "login_url": "https://www.dummysite.com", "folders": [ { "shared_folder": "TEST Shared Folder 1", "can_edit": false, "can_share": false } ] }, { "uid": 919, "title": "Test Login 2", "$type": "login", "login": "test@test.com", "password": "password", "login_url": "https://www.dummysite.com", "folders": [ { "shared_folder": "TEST Shared Folder 2", "can_edit": true, "can_share": false } ] },
0 -
I get it.
There are several reasons why the perfect world isn't here yet.
Creating a single vault was a design decision I made when I created the 1PUX generator. It is (correctly) painful to remove vaults (yet obviously this is something I frequently). Imagine a generator creating a dozen vaults, and then having to manually delete each one:
- right click the correct vault
- select Delete Vault...
- type in the vault name to the confirmation dialog
- press OK
- select the next vault
- rinse, lather, repeat
The 1Password 1PUX importer has no user-facing diagnostics, and it is very finicky. It was a lot of reverse engineering to be able to reliably generate importable 1PUX files. When things go wrong, the importer just aborts. So I quit while I was ahead.
I didn't want to pollute a user's list of vaults (I realize most converter users would have none).
It is much harder to review, edit, purge imported content in multiple vaults (and that's rather important, as you've discovered; and it's critical for me as I review conversions). Its easy to rifle through a list of items (at least for me).
I thought it prudent not to muscle-memory train users to delete vaults.
I don't have access to the more feature-rich business or memberships of other password managers, and without my ability to construct comprehensive export data, I'd be programming blind. The keeper converter is just one examle (you're the first person to provide me with the format of the
shared_folders
list and inform me about the "shared_folder" attribute in a record).
All that said, the converter framework can create multiple 1PUX (or 1PIF) files; the onepux and onepif converters do this with the ```--percategory option. I suppose for the keeper converter, there could be an similar per-shared-folder option to do likewise, one 1PUX per shared folder, and I suppose one more for any items not in a shared folder. That could end up being a lot of 1PUX!
0 -
@MrC I understand completely and what you've provided and tweaked works perfectly for my use case. I'm moving my clients from Keeper over to 1Password, but all my clients are smaller and generally only have a single shared folder. As you were helping me I was talking to a number of other MSPs making the same move from Keeper to 1Password, but they have a few larger installations, with more shared folders.
My opinion is what you've provided works and saves a ton of time vs. importing CSV files and massaging the data ourselves.
So thanks again for the great tool and those tweaks to make it even better.
0 -
If you have a lot of shared_folders and need separation like this, and are willing to test out the work, I can look tomorrow into adding this option. When there is someone like yourself sufficiently motivated and has the technical background, its much easier to me to fly without a net.
0 -
I would go with which ever one is easier to implement.
0 -
I've implemented the changes, and just pushed a development version (in the folder: mrc-converter-suite - development version).
The new option is
--persharedfolder
(keeper only currently).Compare the two runs below. The shared folder name I used for two records in my test data is "Shared 1".
The shared folder name is added to the
--outfile
vault name (default "M_C_S'). Records not tagged as belonging to a shared folder are added to the non-suffixed output file.0