def setup_app(settings):
    """Set up the application."""
    # Init CouchDB model.
    print("initializing model")
    init_model(settings)

    # Add design docs to CouchDB.
    path = sys.path[0] + "/_design"
    print("loading views at %s" % path)
    loader = FileSystemDocsLoader(path)
    loader.sync(Session.auth)

    # Add a user, group, and permission to CouchDB.
    user_name = "admin"
    user_password = "******"
    group_name = "administrators"
    perm_name = "superpowers"

    print("loading data")
    perm = Permission(name=perm_name)
    perm.save()
    group = Group(name=group_name)
    group.permissions.append(perm)
    group.save()
    user = User.create(user_name, user_password)
    user.groups.append(group)
    user.save()
def login(context, request):
    """Display a login prompt."""
    if request.method != 'POST':
        return {'error': ''}
    if 'username' not in request.params:
        return {'error': 'Username is required.'}
    if 'password' not in request.params:
        return {'error': 'Password is required.'}
    
    username = request.params['username']
    password = request.params['password']

    users = User.view('pyramid/user_list', key=username)
    if len(users) == 0:
        return {'error': 'User not found.'}
    if not users.first().authenticate(password):
        return {'error': 'Bad password.'}

    headers = remember(request, username)
    redirect = '%s/auth/postlogin' % request.application_url
    return HTTPFound(location=redirect, headers=headers)