Пример #1
0
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)
Пример #2
0
    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