summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2015-09-29 14:22:15 -0700
committerelijah <elijah@riseup.net>2015-09-29 14:22:15 -0700
commitc6eeb0c9e5666e98f97b048882ad3668550f4741 (patch)
treed0225e7dd5064e563269340ddcece9c92b89cb51
parentc577e3ec23de2ff8b8f8272b687351f62cfcf5ca (diff)
added cleanup-user-dbs
-rwxr-xr-xcleanup-user-dbs37
-rw-r--r--lib/leap/server.rb12
-rw-r--r--lib/leap/users.rb1
3 files changed, 50 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
diff --git a/lib/leap/server.rb b/lib/leap/server.rb
index bc60455..05d76e3 100644
--- a/lib/leap/server.rb
+++ b/lib/leap/server.rb
@@ -2,10 +2,22 @@ require 'couchrest'
module LEAP
class Server < CouchRest::Server
+
def initialize
netrc = File.read('/root/.netrc').split(' ')
auth = "%{username}:%{password}@" % {username: netrc[3], password: netrc[5]}
super("http://#{auth}localhost:5984")
end
+
+ #
+ # returns an array of the names of all the per-user storage
+ # databases.
+ #
+ def storage_dbs
+ self.databases.select { |db_name|
+ db_name =~ /^user-[a-f0-9]{32}$/
+ }
+ end
+
end
end \ No newline at end of file
diff --git a/lib/leap/users.rb b/lib/leap/users.rb
index 14c9c4e..b9dc12c 100644
--- a/lib/leap/users.rb
+++ b/lib/leap/users.rb
@@ -30,6 +30,7 @@ module LEAP
end
def all_ids
+ self.all_docs["rows"].map {|row| row["id"]}
end
end