def doLater(self, args): if not args: self.stderr.write('Please specify the name of the user to add.\n') defer.returnValue(3) return user = args[0] h = hashlib.sha1() password = self.getRootCommand().getPassword() h.update(password) del password salt = os.urandom(16).encode('hex') h.update(salt) password_sha = h.hexdigest() roles = self.options.roles docId = "org.couchdb.user:"******"_id": docId, "type": "user", "name": user, "roles": roles, "password_sha": password_sha, "salt": salt } self.debug('Saving doc %r', doc) try: d = self.getRootCommand().getAdminClient().saveDoc('_users', doc, docId) except Exception, e: self.warning('saveDoc triggered exception: %s', log.getExceptionMessage(e)) raise
try: result = yield d except error.Error, e: if e.status == http.CONFLICT: self.stderr.write("Error: the user '%s' already exists.\n" % user) defer.returnValue(3) return ret = handleCouchException(self, e) if ret: defer.returnValue(ret) return except Exception, e: self.warning('yielding saveDoc triggered exception: %s', log.getExceptionMessage(e)) raise if result['ok']: self.stdout.write("Added user '%s'.\n" % user) else: self.stdout.write("Unknown error. Result: %r\n" % result) class Delete(logcommand.TwistedLogCommand): usage = """USER [.. USER]""" description = """Delete given user(s)""" @defer.inlineCallbacks