summaryrefslogtreecommitdiff
path: root/cleanup-user-dbs
diff options
context:
space:
mode:
Diffstat (limited to 'cleanup-user-dbs')
-rwxr-xr-xcleanup-user-dbs37
1 files changed, 37 insertions, 0 deletions
diff --git a/cleanup-user-dbs b/cleanup-user-dbs
new file mode 100755
index 0000000..8b09472
--- /dev/null
+++ b/cleanup-user-dbs
@@ -0,0 +1,37 @@
+#!/usr/bin/ruby
+
+#
+# This script will destroy every per-user storage database
+# where the corresponding user record does not exist.
+#
+# This should be run regularly by cron to clean up old storage dbs.
+#
+# This script is inefficient, but hopefully we will not be using couchdb
+# by the time that becomes a problem.
+#
+
+require_relative "lib/leap"
+
+server = LEAP::Server.new
+users_db = LEAP::Users.new(server)
+user_ids = users_db.all_ids.inject({}) {|h,i| h[i] = true; h}
+storage_dbs = server.storage_dbs
+
+begin
+ storage_dbs.each do |db|
+ user_id = db.sub(/^user-/,'')
+ unless user_ids[user_id]
+ begin
+ server.database(db).delete!
+ puts "Deleted storage DB `#{db}`."
+ rescue RestClient::ResourceNotFound
+ puts "Storage DB `#{db}` does not exist."
+ end
+ end
+ end
+rescue Exception => exc
+ STDERR.puts "ERROR: unhandled exception, #{exc}."
+ exit(1)
+end
+
+exit(0) \ No newline at end of file