11###
2- # A script that will produce a csv-like report to assist with de-duplication.
2+ # A script that will produce a csv-like report to assist with de-duplication.
33# Outputs vaultName, vaultUUID, itemCount, vault creation date, vault updated, number of users
44###
55import os
1111scriptPath = os .path .dirname (__file__ )
1212outputPath = scriptPath # Optionally choose an alternative output path here.
1313
14+
1415# Get a list of vaults the logged-in user has access to
1516def getVaults ():
1617 try :
17- return subprocess .run ("op vault list --group=Owners --format=json" , shell = True , check = True , capture_output = True ).stdout
18- except (Exception ) as err :
19- print (f"Encountered an error getting the list of vaults you have access to: " , err )
18+ return subprocess .run (
19+ ["op" , "vault" , "list" , "--permission=manage_vault" , "--format=json" ],
20+ check = True ,
21+ capture_output = True ,
22+ ).stdout
23+ except Exception as err :
24+ print (
25+ f"Encountered an error getting the list of vaults you have access to: " , err
26+ )
2027 return
21-
28+
29+
2230# Get a list of users and their permissions for a vault
2331def getVaultUserList (vaultID ):
2432 try :
25- return subprocess .run (f"op vault user list { vaultID } --format=json" , shell = True , check = True , capture_output = True ).stdout
26- except (Exception ) as err :
27- print (f"Encountered an error getting the list of users for vault { vaultID } : " , err )
33+ return subprocess .run (
34+ f"op vault user list { vaultID } --format=json" ,
35+ shell = True ,
36+ check = True ,
37+ capture_output = True ,
38+ ).stdout
39+ except Exception as err :
40+ print (
41+ f"Encountered an error getting the list of users for vault { vaultID } : " , err
42+ )
2843 return
2944
45+
3046# Get the details of a vault
3147def getVaultDetails (vaultID ):
3248 try :
33- return subprocess .run (f"op vault get { vaultID } --format=json" , shell = True , check = True , capture_output = True ).stdout
34- except (Exception ) as err :
49+ return subprocess .run (
50+ f"op vault get { vaultID } --format=json" ,
51+ shell = True ,
52+ check = True ,
53+ capture_output = True ,
54+ ).stdout
55+ except Exception as err :
3556 print (f"Encountered an error getting details for vault { vaultID } : " , err )
3657 return
3758
59+
3860# Make dates returned from the CLI a bit nicer
3961def formatDate (date ):
4062 isoDate = datetime .fromisoformat (date )
4163 return f"{ isoDate .year } -{ isoDate .month } -{ isoDate .day } { isoDate .hour } :{ isoDate .minute } :{ isoDate .second } "
4264
65+
4366def main ():
4467 vaultList = json .loads (getVaults ())
4568 with open (f"{ outputPath } /vaultreport.csv" , "w" , newline = "" ) as outputFile :
4669 csvWriter = csv .writer (outputFile )
47- fields = ["vaultName" , "vaultUUD" , "itemCount" , "vaultCreated" , "vaultUpdated" , "userCount" ]
70+ fields = [
71+ "vaultName" ,
72+ "vaultUUD" ,
73+ "itemCount" ,
74+ "vaultCreated" ,
75+ "vaultUpdated" ,
76+ "userCount" ,
77+ ]
4878 csvWriter .writerow (fields )
49-
79+
5080 for vault in vaultList :
5181 if vault ["name" ] == "Private" :
5282 continue
@@ -56,19 +86,25 @@ def main():
5686 dateCreated = formatDate (vaultDetails ["created_at" ])
5787 dateUpdated = formatDate (vaultDetails ["updated_at" ])
5888
59- csvWriter .writerow ([
89+ csvWriter .writerow (
90+ [
91+ vault ["name" ],
92+ vault ["id" ],
93+ vaultDetails ["items" ],
94+ dateCreated ,
95+ dateUpdated ,
96+ userCount ,
97+ ]
98+ )
99+
100+ print (
60101 vault ["name" ],
61102 vault ["id" ],
62103 vaultDetails ["items" ],
63104 dateCreated ,
64105 dateUpdated ,
65- userCount
66- ])
67-
68- print (vault ["name" ],
69- vault ["id" ],
70- vaultDetails ["items" ],
71- dateCreated ,
72- dateUpdated ,
73- userCount )
74- main ()
106+ userCount ,
107+ )
108+
109+
110+ main ()
0 commit comments