def _create_user(request, username=None): """ helper to create users ie POST /user or PUT /user/<username> """ if not request.context.user.has_perm(PERM_CREATE, User): return HttpResponse(status=401) try: params = _get_params_by_ct(request) if username is None: username = params.get('username') # validate if not VALID_USERNAME.match(username): return HttpResponse('Invalid username', status=400, content_type="text/plain") if 'password' in params: if (not 'password2' in params or params['password2'] != params['password']): return HttpResponse('Passwords did not match', status=400, content_type="text/plain") except: return HttpResponse('Error parsing parameters', status=400, content_type="text/plain") try: user = User(username=username) if 'password' in params: user.set_password(params['password']) user.store(request.context.get_users_database()) return HttpResponse(status=201) except ResourceConflict: return HttpResponse(status=409)
def __call__(self, username, is_locked=False, is_admin=False): """ Create a user with the given username. is_locked - if True, create with a locked password is_admin - if True, grant administrative rights to the user """ couchdb = Server(self.config['couchdb.address']) try: udb = couchdb[self.config['couchdb.users_database']] except: print "Failed to connect to couchdb at %s/%s" % (self.config['couchdb.address'], self.config['couchdb.users_database']) return 1 new_user = User(username=username) if new_user.id in udb: print 'User "%s" already exists' % username return 1 if not is_locked: done = False while(not done): password = getpass(prompt="Password for %s: " % username) password2 = getpass(prompt="Repeat password: "******"Passwords did not match, try again.\n" new_user.set_password(password) if is_admin: new_user.roles = [ROLE_ADMIN] new_user.store(udb) print 'Created user "%s"' % username