From c577e3ec23de2ff8b8f8272b687351f62cfcf5ca Mon Sep 17 00:00:00 2001 From: elijah Date: Thu, 24 Sep 2015 16:56:11 -0700 Subject: added script destroy-user-db --- destroy-all-test-users | 64 +++++++++++++++++++++++++++++++++++++++++++++ destroy-all-user-dbs | 14 ++++++++++ destroy-user-db | 47 +++++++++++++++++++++++++++++++++ lib/leap.rb | 2 ++ lib/leap/server.rb | 11 ++++++++ lib/leap/users.rb | 36 +++++++++++++++++++++++++ ruby/destroy-all-test-users | 64 --------------------------------------------- ruby/destroy-all-user-dbs | 14 ---------- 8 files changed, 174 insertions(+), 78 deletions(-) create mode 100755 destroy-all-test-users create mode 100755 destroy-all-user-dbs create mode 100755 destroy-user-db create mode 100644 lib/leap.rb create mode 100644 lib/leap/server.rb create mode 100644 lib/leap/users.rb delete mode 100755 ruby/destroy-all-test-users delete mode 100755 ruby/destroy-all-user-dbs diff --git a/destroy-all-test-users b/destroy-all-test-users new file mode 100755 index 0000000..b578f83 --- /dev/null +++ b/destroy-all-test-users @@ -0,0 +1,64 @@ +#!/usr/bin/ruby + +# +# Clean up cruft left over by bad tests. +# +# Removes all 'test_user_x' users from the users db, along with the +# corresponding indentities and storage db. +# + +require 'couchrest' + +users_db_name = 'users' +#user_db_name = 'tmp_users' +identities_db_name = 'identities' + +netrc = File.read('/root/.netrc').split(' ') +auth = "%{username}:%{password}@" % {username: netrc[3], password: netrc[5]} +server = CouchRest::Server.new("http://#{auth}localhost:5984") +users_db = server.database(users_db_name) +identities_db = server.database(identities_db_name) + +records = users_db.view('User/by_login', :reduce => false, :startkey => 'test_user_', :endkey => 'test_user_'+"\u{fff}")['rows'] +records.each do |record| + user_id = record['id'] + username = record['key'] + tries = 0 + begin + begin + doc = users_db.get(user_id) + users_db.delete_doc(doc) + puts "deleted #{users_db.name}/#{user_id} (#{username})" + rescue RestClient::ResourceNotFound + end + begin + storage_db = server.database("user-" + user_id) + storage_db.delete! + puts " deleted #{storage_db.name}" + rescue RestClient::ResourceNotFound + end + identities_db.view('Identity/by_user_id', :reduce => false, :startkey => user_id, :endkey => user_id)['rows'].each do |row| + begin + doc = identities_db.get(row['id']) + identities_db.delete_doc(doc) + puts " deleted #{identities_db.name}/#{row['id']}" + rescue RestClient::ResourceNotFound + end + end + rescue RestClient::RequestTimeout + tries += 1 + if tries < 10 + puts "Got timeout, retrying" + sleep 10 + retry + else + puts "Retry limit reached" + exit(1) + end + end +end + +users_db.compact! +identities_db.compact! + +puts "DONE" \ No newline at end of file diff --git a/destroy-all-user-dbs b/destroy-all-user-dbs new file mode 100755 index 0000000..84cec56 --- /dev/null +++ b/destroy-all-user-dbs @@ -0,0 +1,14 @@ +#!/usr/bin/ruby + +require 'couchrest' + +server = CouchRest::Server.new + +server.databases.each do |db_name| + if db_name =~ /^user-[a-f0-9]{32}$/ + server.database(db_name).delete! + end +end + + + diff --git a/destroy-user-db b/destroy-user-db new file mode 100755 index 0000000..fdf917b --- /dev/null +++ b/destroy-user-db @@ -0,0 +1,47 @@ +#!/usr/bin/ruby + +require_relative "lib/leap" + +def main() + parse_opts + server = LEAP::Server.new + users_db = LEAP::Users.new(server) + record = users_db.find_by_login($username) + if record.nil? + puts "Username #{$username} does not exist." + exit 1 + end + dbname = "user-#{record.id}" + begin + server.database(dbname).delete! + puts "Deleted DB #{dbname}" + exit 0 + rescue RestClient::ResourceNotFound + puts "DB does not exist: #{dbname}" + exit 1 + end +end + +def parse_opts() + $username = nil + while cmd = ARGV.shift + case cmd + when "--username" + $username = ARGV.shift + else + usage + end + end + unless $username + usage + end +end + +def usage() + puts "#{$0} COMMAND" + puts "Commands:" + puts " --username USERNAME - destroy the user db corresponding to USERNAME." + exit(1) +end + +main() \ No newline at end of file diff --git a/lib/leap.rb b/lib/leap.rb new file mode 100644 index 0000000..39d2004 --- /dev/null +++ b/lib/leap.rb @@ -0,0 +1,2 @@ +require_relative('leap/server.rb') +require_relative('leap/users.rb') \ No newline at end of file diff --git a/lib/leap/server.rb b/lib/leap/server.rb new file mode 100644 index 0000000..bc60455 --- /dev/null +++ b/lib/leap/server.rb @@ -0,0 +1,11 @@ +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 + end +end \ No newline at end of file diff --git a/lib/leap/users.rb b/lib/leap/users.rb new file mode 100644 index 0000000..14c9c4e --- /dev/null +++ b/lib/leap/users.rb @@ -0,0 +1,36 @@ +require 'couchrest' + +module LEAP + class Users < CouchRest::Database + + def initialize(server) + super(server, 'users') + end + + def find_by_login(login) + record = self.view('User/by_login', + :reduce => false, + :startkey => login, + :endkey => login + )['rows'].first + if record + return self.get(record['id']) + end + end + + def all_logins + self.view('User/by_login', + :reduce => false + )['rows'].map {|row| + row['key'] + } + end + + def all_active_ids + end + + def all_ids + end + + end +end diff --git a/ruby/destroy-all-test-users b/ruby/destroy-all-test-users deleted file mode 100755 index b578f83..0000000 --- a/ruby/destroy-all-test-users +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/ruby - -# -# Clean up cruft left over by bad tests. -# -# Removes all 'test_user_x' users from the users db, along with the -# corresponding indentities and storage db. -# - -require 'couchrest' - -users_db_name = 'users' -#user_db_name = 'tmp_users' -identities_db_name = 'identities' - -netrc = File.read('/root/.netrc').split(' ') -auth = "%{username}:%{password}@" % {username: netrc[3], password: netrc[5]} -server = CouchRest::Server.new("http://#{auth}localhost:5984") -users_db = server.database(users_db_name) -identities_db = server.database(identities_db_name) - -records = users_db.view('User/by_login', :reduce => false, :startkey => 'test_user_', :endkey => 'test_user_'+"\u{fff}")['rows'] -records.each do |record| - user_id = record['id'] - username = record['key'] - tries = 0 - begin - begin - doc = users_db.get(user_id) - users_db.delete_doc(doc) - puts "deleted #{users_db.name}/#{user_id} (#{username})" - rescue RestClient::ResourceNotFound - end - begin - storage_db = server.database("user-" + user_id) - storage_db.delete! - puts " deleted #{storage_db.name}" - rescue RestClient::ResourceNotFound - end - identities_db.view('Identity/by_user_id', :reduce => false, :startkey => user_id, :endkey => user_id)['rows'].each do |row| - begin - doc = identities_db.get(row['id']) - identities_db.delete_doc(doc) - puts " deleted #{identities_db.name}/#{row['id']}" - rescue RestClient::ResourceNotFound - end - end - rescue RestClient::RequestTimeout - tries += 1 - if tries < 10 - puts "Got timeout, retrying" - sleep 10 - retry - else - puts "Retry limit reached" - exit(1) - end - end -end - -users_db.compact! -identities_db.compact! - -puts "DONE" \ No newline at end of file diff --git a/ruby/destroy-all-user-dbs b/ruby/destroy-all-user-dbs deleted file mode 100755 index 84cec56..0000000 --- a/ruby/destroy-all-user-dbs +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/ruby - -require 'couchrest' - -server = CouchRest::Server.new - -server.databases.each do |db_name| - if db_name =~ /^user-[a-f0-9]{32}$/ - server.database(db_name).delete! - end -end - - - -- cgit v1.2.3