summaryrefslogtreecommitdiff
path: root/server/pkg/create-user-db
diff options
context:
space:
mode:
authorVictor Shyba <victor.shyba@gmail.com>2015-10-27 13:30:07 -0300
committerVictor Shyba <victor.shyba@gmail.com>2015-10-29 16:50:01 -0300
commitbc8e8bea61b01e0b93593e24a816574f5a19ac61 (patch)
tree4c6bc6273977faa3537b2cd88bd2f5ea810d9485 /server/pkg/create-user-db
parent7c50a100a46c69f759dc22165cec9b8098cac3a4 (diff)
[feat] adds --migrate-all to create-user-db script
This parameter applies the ensure_database to all existing databases, making all of them use the latest design documents. This can be used to migrate security documents, update handlers or any other kind of design document.
Diffstat (limited to 'server/pkg/create-user-db')
-rwxr-xr-xserver/pkg/create-user-db35
1 files changed, 29 insertions, 6 deletions
diff --git a/server/pkg/create-user-db b/server/pkg/create-user-db
index 28d1cbd0..ae5d15dc 100755
--- a/server/pkg/create-user-db
+++ b/server/pkg/create-user-db
@@ -21,6 +21,7 @@ import netrc
import argparse
from leap.soledad.common.couch import CouchDatabase
from leap.soledad.common.couch import is_db_name_valid
+from leap.soledad.common.couch import list_users_dbs
from leap.soledad.server import load_configuration
@@ -30,7 +31,10 @@ This is meant to be used by Soledad Server.
"""
parser = argparse.ArgumentParser(description=description)
parser.add_argument('dbname', metavar='user-d34db33f', type=str,
+ default='', nargs='?',
help='database name on the format user-{uuid4}')
+parser.add_argument('--migrate-all', action='store_true',
+ help="recreate all design docs for all existing account")
CONF = load_configuration('/etc/soledad/soledad-server.conf')
NETRC_PATH = CONF['soledad-server']['admin_netrc']
@@ -49,15 +53,34 @@ def url_for_db(dbname):
return url
-if __name__ == '__main__':
- args = parser.parse_args()
- if not is_db_name_valid(args.dbname):
- print ("Invalid name! %s" % args.dbname)
+def ensure_database(dbname):
+ """
+ This method will ensure that a database named `dbname` will exist
+ or created if it doesn't. Calling it twice will ensure that design
+ documents are present and updated.
+ The database name has to match this criteria to be considered valid:
+ user-[a-f0-9]+
+
+ :param dbname: name of the user database
+ :type dbname: str
+ """
+ if not is_db_name_valid(dbname):
+ print ("Invalid name! %s" % dbname)
sys.exit(1)
- url = url_for_db(args.dbname)
+ url = url_for_db(dbname)
db_security = CONF['database-security']
db = CouchDatabase.open_database(url=url, create=True,
replica_uid=None, ensure_ddocs=True,
database_security=db_security)
- print ('success! Created %s, replica_uid: %s' %
+ print ('success! Ensured that database %s exists, with replica_uid: %s' %
(db._dbname, db.replica_uid))
+
+
+if __name__ == '__main__':
+ args = parser.parse_args()
+ if args.migrate_all:
+ couch_url = url_for_db('')
+ for dbname in list_users_dbs(couch_url):
+ ensure_database(dbname)
+ else:
+ ensure_database(args.dbname)