Esempio n. 1
0
def create_wiki(environ, name, mode='private', username=None, desc='',
        validate=True):
    """
    Create a wiki with the name, name.

    For now a wiki is just a bag a policy.
    """
    store = environ['tiddlyweb.store']
    if username is None:
        username = environ['tiddlyweb.usersign']['name']

    bag = Bag(name)

    # We want this get to fail.
    try:
        store.get(bag)
        return False
    except NoBagError:
        pass

    try:
        bag.policy = WIKI_MODES[mode](username)
    except KeyError:
        bag.policy = WIKI_MODES['private'](username)
    bag.desc = desc
    if validate:
        validate_bag(bag, environ)
    store.put(bag)

    return bag
Esempio n. 2
0
File: wiki.py Progetto: pads/tank
def create_wiki(environ, name, mode='private', username=None, desc='',
        validate=True):
    """
    Create a wiki with the name, name.

    For now a wiki is just a bag a policy.
    """
    store = environ['tiddlyweb.store']
    if username is None:
        username = environ['tiddlyweb.usersign']['name']

    bag = Bag(name)

    # We want this get to fail.
    try:
        store.get(bag)
        return False
    except NoBagError:
        pass

    try:
        bag.policy = WIKI_MODES[mode](username)
    except KeyError:
        bag.policy = WIKI_MODES['private'](username)
    bag.desc = desc
    if validate:
        validate_bag(bag, environ)
    store.put(bag)

    return bag
Esempio n. 3
0
def setup_module(module):
    module.TMPDIR = tempfile.mkdtemp()

    _initialize_app(TMPDIR)
    module.ADMIN_COOKIE = make_cookie('tiddlyweb_user', 'admin',
            mac_key=CONFIG['secret'])

    module.STORE = get_store(CONFIG)

    # register admin user
    data = {
        'username': '******',
        'password': '******',
        'password_confirmation': 'secret'
    }
    response, content = _req('POST', '/register', urlencode(data),
            headers={ 'Content-Type': 'application/x-www-form-urlencoded' })

    bag = Bag('alpha')
    bag.policy = Policy(read=['admin'], write=['admin'], create=['admin'],
            delete=['admin'], manage=['admin'])
    STORE.put(bag)

    bag = Bag('bravo')
    STORE.put(bag)

    bag = Bag('charlie')
    bag.policy = Policy(read=['nobody'], write=['nobody'], create=['nobody'],
            delete=['nobody'], manage=['nobody'])
    STORE.put(bag)

    tiddler = Tiddler('index', 'bravo')
    tiddler.text = 'lorem ipsum\ndolor *sit* amet'
    tiddler.type = 'text/x-markdown'
    STORE.put(tiddler)
Esempio n. 4
0
def test_bag_policy():

    bag = Bag('policy_tester')
    bag.policy = Policy(read=['chris', 'jeremy'])

    assert bag.policy.allows(chris_info, 'read')
    py.test.raises(UserRequiredError, 'bag.policy.allows(guest_info, "read")')
Esempio n. 5
0
def make_space(space_name, store, member):
    """
    The details of creating the bags and recipes that make up a space.
    """
    space = Space(space_name)

    for bag_name in space.list_bags():
        bag = Bag(bag_name)
        bag.policy = _make_policy(member)
        if Space.bag_is_public(bag_name):
            bag.policy.read = []
        store.put(bag)

    info_tiddler = Tiddler('SiteInfo', space.public_bag())
    info_tiddler.text = 'Space %s' % space_name
    store.put(info_tiddler)

    public_recipe = Recipe(space.public_recipe())
    public_recipe.set_recipe(space.public_recipe_list())
    private_recipe = Recipe(space.private_recipe())
    private_recipe.set_recipe(space.private_recipe_list())
    private_recipe.policy = _make_policy(member)
    public_recipe.policy = _make_policy(member)
    public_recipe.policy.read = []
    store.put(public_recipe)
    store.put(private_recipe)
Esempio n. 6
0
def _make_space(environ, space_name):
    """
    The details of creating the bags and recipes that make up a space.
    """
    store = environ['tiddlyweb.store']
    member = environ['tiddlyweb.usersign']['name']

    # XXX stub out the clumsy way for now
    # can make this much more declarative

    space = Space(space_name)

    for bag_name in space.list_bags():
        bag = Bag(bag_name)
        bag.policy = _make_policy(member)
        if Space.bag_is_public(bag_name):
            bag.policy.read = []
        store.put(bag)

    public_recipe = Recipe(space.public_recipe())
    public_recipe.set_recipe(space.public_recipe_list())
    private_recipe = Recipe(space.private_recipe())
    private_recipe.set_recipe(space.private_recipe_list())
    private_recipe.policy = _make_policy(member)
    public_recipe.policy = _make_policy(member)
    public_recipe.policy.read = []
    store.put(public_recipe)
    store.put(private_recipe)
Esempio n. 7
0
def remove_user(environ, space_name, user_name):
    """
    remove user_name from space_name while
    checking the policy allows the logged
    in user to do it
    """
    store = environ['tiddlyweb.store']
    
    user = User(user_name)
    user = store.get(user)
    
    logged_in_user = environ['tiddlyweb.usersign']
    
    space_definition = environ['tiddlyweb.config']['space']
    space = []
    for name, values in space_definition['bags'].iteritems():
        bag = Bag(name.replace('SPACE_NAME', space_name))
        bag = store.get(bag)
        bag.policy.allows(logged_in_user, 'manage')
        bag.policy = remove_from_policy(user, bag.policy)
        space.append(bag)
    for name, values in space_definition['recipes'].iteritems():
        recipe = Recipe(name.replace('SPACE_NAME', space_name))
        recipe = store.get(recipe)
        recipe.policy.allows(logged_in_user, 'manage')
        recipe.policy = remove_from_policy(user, recipe.policy)
        space.append(recipe)
        
    for thing in space:
        store.put(thing)
Esempio n. 8
0
def test_bag_policy():

    bag = Bag('policy_tester')
    bag.policy = Policy(read=['chris','jeremy'])

    assert bag.policy.allows(chris_info, 'read')
    py.test.raises(UserRequiredError, 'bag.policy.allows(guest_info, "read")')
Esempio n. 9
0
def _make_space(environ, space_name):
    """
    The details of creating the bags and recipes that make up a space.
    """
    store = environ['tiddlyweb.store']
    member = environ['tiddlyweb.usersign']['name']

    # XXX stub out the clumsy way for now
    # can make this much more declarative

    space = Space(space_name)

    for bag_name in space.list_bags():
        bag = Bag(bag_name)
        bag.policy = _make_policy(member)
        if Space.bag_is_public(bag_name):
            bag.policy.read = []
        store.put(bag)

    public_recipe = Recipe(space.public_recipe())
    public_recipe.set_recipe(space.public_recipe_list())
    private_recipe = Recipe(space.private_recipe())
    private_recipe.set_recipe(space.private_recipe_list())
    private_recipe.policy = _make_policy(member)
    public_recipe.policy = _make_policy(member)
    public_recipe.policy.read = []
    store.put(public_recipe)
    store.put(private_recipe)
Esempio n. 10
0
def _bag_policy(environ, bag_name, publicity):
    user = get_user_object(environ)
    store = environ['tiddlyweb.store']
    bag = Bag(bag_name)
    bag = store.get(bag)
    bag.policy.allows(user, 'manage')

    if publicity == 'custom':
        raise HTTP303(bag_url(environ, bag) + '/tiddlers')

    if publicity == 'public':
        bag.policy = public_policy(user['name'])
    elif publicity == 'protected':
        bag.policy = protected_policy(user['name'])
    else:
        bag.policy = private_policy(user['name'])

    store.put(bag)
    raise HTTP303(bag_url(environ, bag) + '/tiddlers')
Esempio n. 11
0
def _bag_policy(environ, bag_name, publicity):
    user = get_user_object(environ)
    store = environ["tiddlyweb.store"]
    bag = Bag(bag_name)
    bag = store.get(bag)
    bag.policy.allows(user, "manage")

    if publicity == "custom":
        raise HTTP303(bag_url(environ, bag) + "/tiddlers")

    if publicity == "public":
        bag.policy = public_policy(user["name"])
    elif publicity == "protected":
        bag.policy = protected_policy(user["name"])
    else:
        bag.policy = private_policy(user["name"])

    store.put(bag)
    raise HTTP303(bag_url(environ, bag) + "/tiddlers")
Esempio n. 12
0
def _bag_policy(environ, bag_name, publicity):
    user = get_user_object(environ)
    store = environ['tiddlyweb.store']
    bag = Bag(bag_name)
    bag = store.get(bag)
    bag.policy.allows(user, 'manage')

    if publicity == 'custom':
        raise HTTP303(bag_url(environ, bag) + '/tiddlers')

    if publicity == 'public':
        bag.policy = public_policy(user['name'])
    elif publicity == 'protected':
        bag.policy = protected_policy(user['name'])
    else:
        bag.policy = private_policy(user['name'])

    store.put(bag)
    raise HTTP303(bag_url(environ, bag) + '/tiddlers')
Esempio n. 13
0
def test_reuse_policy_object():
    """
    Explicitly test a bug fix in policy handling wherein the owner
    field could get transformed into (and stay) a list thus ruining
    second use. Not that second use is encourage, but it could happen.
    """
    policy = Policy()
    policy.owner = u"campy"
    bag = Bag("policytest1")
    bag.policy = policy
    store.put(bag)
    bag = Bag("policytest2")
    bag.policy = policy
    store.put(bag)

    bag1 = store.get(Bag("policytest1"))
    bag2 = store.get(Bag("policytest2"))
    assert bag1.policy.owner == "campy"
    assert bag2.policy.owner == "campy"
    assert bag1.policy.owner == bag2.policy.owner
Esempio n. 14
0
def test_reuse_policy_object():
    """
    Explicitly test a bug fix in policy handling wherein the owner
    field could get transformed into (and stay) a list thus ruining
    second use. Not that second use is encourage, but it could happen.
    """
    policy = Policy()
    policy.owner = u'campy'
    bag = Bag('policytest1')
    bag.policy = policy
    STORE.put(bag)
    bag = Bag('policytest2')
    bag.policy = policy
    STORE.put(bag)

    bag1 = STORE.get(Bag('policytest1'))
    bag2 = STORE.get(Bag('policytest2'))
    assert bag1.policy.owner == 'campy'
    assert bag2.policy.owner == 'campy'
    assert bag1.policy.owner == bag2.policy.owner
Esempio n. 15
0
def _create_wiki(store, name, owner, private):
    bag = Bag(name)
    try:
        store.get(bag)
        raise HTTP409('wiki name unavailable')
    except NoBagError:
        pass

    read_constraint = [owner] if private else None
    bag.policy = Policy(read=read_constraint, write=[owner], create=[owner],
            delete=[owner], manage=[owner]) # XXX: too limiting!?
    store.put(bag)
Esempio n. 16
0
def setup_module(module):
    instance = make_instance()
    module.STORE = instance['store']
    module.ADMIN_COOKIE = instance['admin_cookie']

    bag = Bag('alpha')
    bag.policy = Policy(read=['admin'], write=['admin'], create=['admin'],
            delete=['admin'], manage=['admin'])
    STORE.put(bag)

    bag = Bag('bravo')
    STORE.put(bag)

    bag = Bag('charlie')
    bag.policy = Policy(read=['nobody'], write=['nobody'], create=['nobody'],
            delete=['nobody'], manage=['nobody'])
    STORE.put(bag)

    tiddler = Tiddler('index', 'bravo')
    tiddler.text = 'lorem ipsum\ndolor *sit* amet'
    tiddler.type = 'text/x-markdown'
    STORE.put(tiddler)
Esempio n. 17
0
def add_archive(args):
    """add archive bags to the store: twanager add_archive"""
    store = get_store(config)
    bags = store.list_bags()

    for bag in bags:
        if bag.name.endswith('_private'):
            space_name = bag.name.rsplit('_', 1)[0]
            archive = Bag('%s_archive' % space_name)
            try:
                archive = store.get(archive)
            except NoBagError:
                archive.policy = bag.policy
                store.put(archive)
Esempio n. 18
0
def bag_policy(environ, start_response):
    user = get_user_object(environ)
    store = environ['tiddlyweb.store']
    publicity = environ['tiddlyweb.query'].get('publicity', [''])[0]
    bag_name = environ['tiddlyweb.query'].get('bag', [''])[0]

    bag = Bag(bag_name)
    bag.skinny = True
    bag = store.get(bag)
    bag.policy.allows(user, 'manage')

    if publicity == 'custom':
        raise HTTP303(bag_url(environ, bag) + '/tiddlers')

    if publicity == 'public':
        bag.policy = public_policy(user['name'])
    elif publicity == 'protected':
        bag.policy = protected_policy(user['name'])
    else:
        bag.policy = private_policy(user['name'])

    store.put(bag)
    raise HTTP303(bag_url(environ, bag) + '/tiddlers')
Esempio n. 19
0
def setup_module(module):
    cfg = _initialize_app({ 'tagdex_db': 'tagdex_test.sqlite' })
    module.STORE = get_store(cfg)

    database.reset(cfg)

    module.STORE.put(Bag('alpha'))
    module.STORE.put(Bag('bravo'))
    bag = Bag('charlie')
    bag.policy = Policy(read=['bob'])
    module.STORE.put(bag)

    _put_tiddler('HelloWorld', 'alpha', ['foo', 'bar'], 'lorem ipsum')
    _put_tiddler('HelloWorld', 'bravo', ['foo', 'bar'], 'lorem ipsum')
    _put_tiddler('Lipsum', 'alpha', ['bar', 'baz'], '...')
    _put_tiddler('Confidential', 'charlie', ['private', 'secret'], '...')
    _put_tiddler('1984', 'alpha', ['book', 'scifi', 'political'], 'Orwell, G.')
    _put_tiddler('Foundation', 'alpha', ['book', 'scifi'], 'Asimov, I.')
Esempio n. 20
0
def _check_bag(name, environ, user):
    """
    Get the user's bag. Create if required.
    """
    store = environ['tiddlyweb.store']

    name = '%s-%s' % (user, name)
    name = name.replace('.', '_')
    try:
        bag = Bag(name)
        bag = store.get(bag)
    except NoBagError:
        uni_user = unicode(user)
        policy = Policy(owner=uni_user, manage=[uni_user],
                read=[uni_user], write=[uni_user],
                delete=[uni_user], create=[uni_user])
        bag.policy = policy
        bag.desc = 'Twotes for %s' % uni_user;
        store.put(bag)
    return bag
Esempio n. 21
0
def _check_bag(name, environ, user):
    """
    Get the user's bag. Create if required.
    """
    store = environ['tiddlyweb.store']

    name = '%s-%s' % (user, name)
    name = name.replace('.', '_')
    try:
        bag = Bag(name)
        bag = store.get(bag)
    except NoBagError:
        uni_user = unicode(user)
        policy = Policy(owner=uni_user, manage=[uni_user],
                read=[uni_user], write=[uni_user],
                delete=[uni_user], create=[uni_user])
        bag.policy = policy
        bag.desc = 'Twotes for %s' % uni_user;
        store.put(bag)
    return bag
Esempio n. 22
0
def make_space(space_name, store, member):
    """
    The details of creating the bags and recipes that make up a space.
    """
    space = Space(space_name)

    for bag_name in space.list_bags():
        bag = Bag(bag_name)
        bag.policy = _make_policy(member)
        if Space.bag_is_public(bag_name):
            bag.policy.read = []
        store.put(bag)

    public_recipe = Recipe(space.public_recipe())
    public_recipe.set_recipe(space.public_recipe_list())
    private_recipe = Recipe(space.private_recipe())
    private_recipe.set_recipe(space.private_recipe_list())
    private_recipe.policy = _make_policy(member)
    public_recipe.policy = _make_policy(member)
    public_recipe.policy.read = []
    store.put(public_recipe)
    store.put(private_recipe)
Esempio n. 23
0
def make_space(space_name, store, member):
    """
    The details of creating the bags and recipes that make up a space.
    """
    space = Space(space_name)

    for bag_name in space.list_bags():
        bag = Bag(bag_name)
        bag.policy = _make_policy(member)
        if Space.bag_is_public(bag_name):
            bag.policy.read = []
        store.put(bag)

    info_tiddler = Tiddler('SiteInfo', space.public_bag())
    info_tiddler.text = 'Space %s' % space_name
    info_tiddler.modifier = store.environ.get('tiddlyweb.usersign',
                                              {}).get('name', 'GUEST')
    store.put(info_tiddler)

    # Duplicate GettingStarted into public bag.
    getting_started_tiddler = Tiddler(GETTING_STARTED_TIDDLER['title'],
                                      GETTING_STARTED_TIDDLER['bag'])
    try:
        getting_started_tiddler = store.get(getting_started_tiddler)
        getting_started_tiddler.bag = space.public_bag()
        store.put(getting_started_tiddler)
    except StoreError:
        pass

    public_recipe = Recipe(space.public_recipe())
    public_recipe.set_recipe(space.public_recipe_list())
    private_recipe = Recipe(space.private_recipe())
    private_recipe.set_recipe(space.private_recipe_list())
    private_recipe.policy = _make_policy(member)
    public_recipe.policy = _make_policy(member)
    public_recipe.policy.read = []
    store.put(public_recipe)
    store.put(private_recipe)
Esempio n. 24
0
def make_space(space_name, store, member):
    """
    The details of creating the bags and recipes that make up a space.
    """
    space = Space(space_name)

    for bag_name in space.list_bags():
        bag = Bag(bag_name)
        bag.policy = _make_policy(member)
        if Space.bag_is_public(bag_name):
            bag.policy.read = []
        store.put(bag)

    info_tiddler = Tiddler('SiteInfo', space.public_bag())
    info_tiddler.text = 'Space %s' % space_name
    info_tiddler.modifier = store.environ.get('tiddlyweb.usersign',
            {}).get('name', 'GUEST')
    store.put(info_tiddler)

    # Duplicate GettingStarted into public bag.
    getting_started_tiddler = Tiddler(GETTING_STARTED_TIDDLER['title'],
            GETTING_STARTED_TIDDLER['bag'])
    try:
        getting_started_tiddler = store.get(getting_started_tiddler)
        getting_started_tiddler.bag = space.public_bag()
        store.put(getting_started_tiddler)
    except StoreError:
        pass

    public_recipe = Recipe(space.public_recipe())
    public_recipe.set_recipe(space.public_recipe_list())
    private_recipe = Recipe(space.private_recipe())
    private_recipe.set_recipe(space.private_recipe_list())
    private_recipe.policy = _make_policy(member)
    public_recipe.policy = _make_policy(member)
    public_recipe.policy.read = []
    store.put(public_recipe)
    store.put(private_recipe)
Esempio n. 25
0
def test_permission_handling():
    tags, _ = _get_html_data('/tags')
    assert len(tags) == 6
    tag_names = tags.values()
    assert 'foo' in tag_names
    assert 'bar' in tag_names
    assert 'baz' in tag_names
    assert 'book' in tag_names
    assert 'scifi' in tag_names
    assert 'political' in tag_names
    assert not 'secret' in tag_names

    tags, tiddlers = _get_html_data('/tags/secret')
    assert len(tags) == 0
    assert len(tiddlers) == 0

    tags, tiddlers = _get_html_data('/tags/private')
    assert len(tags) == 0
    assert len(tiddlers) == 0

    tags, tiddlers = _get_html_data('/tags/private,secret')
    assert len(tags) == 0
    assert len(tiddlers) == 0

    # ensure a single readable tiddler suffices for the tag to show up

    _put_tiddler('AllEyes', 'bravo', ['secret'], '...')

    tags, _ = _get_html_data('/tags')
    assert len(tags) == 7
    assert 'secret' in tags.values()

    tags, tiddlers = _get_html_data('/tags/secret', True)
    assert len(tags) == 0
    assert len(tiddlers) == 1
    assert ('/bags/bravo/tiddlers/AllEyes', 'AllEyes') in tiddlers

    tags, tiddlers = _get_html_data('/tags/private')
    assert len(tags) == 0
    assert len(tiddlers) == 0

    tags, tiddlers = _get_html_data('/tags/private,secret')
    assert len(tags) == 0
    assert len(tiddlers) == 0

    _put_tiddler('AllEyes', 'bravo', ['private', 'secret'], '...')

    tags, tiddlers = _get_html_data('/tags/secret', True)
    assert len(tags) == 1
    assert ('/tags/private,secret', 'private') in tags
    assert len(tiddlers) == 1
    assert ('/bags/bravo/tiddlers/AllEyes', 'AllEyes') in tiddlers

    tags, tiddlers = _get_html_data('/tags/private', True)
    assert len(tags) == 1
    assert ('/tags/private,secret', 'secret') in tags
    assert len(tiddlers) == 1
    assert ('/bags/bravo/tiddlers/AllEyes', 'AllEyes') in tiddlers

    tags, tiddlers = _get_html_data('/tags/private,secret', True)
    assert len(tags) == 0
    assert len(tiddlers) == 1
    assert ('/bags/bravo/tiddlers/AllEyes', 'AllEyes') in tiddlers

    tags, tiddlers = _get_html_data('/tags/foo,bar', True)
    assert len(tags) == 0
    assert len(tiddlers) == 2
    assert ('/bags/alpha/tiddlers/HelloWorld', 'HelloWorld') in tiddlers
    assert ('/bags/bravo/tiddlers/HelloWorld', 'HelloWorld') in tiddlers

    bag = Bag('bravo')
    bag.policy = Policy(read=['bob'])
    STORE.put(bag)

    tags, tiddlers = _get_html_data('/tags/foo,bar', True)
    assert len(tags) == 0
    assert len(tiddlers) == 1
    assert ('/bags/alpha/tiddlers/HelloWorld', 'HelloWorld') in tiddlers
Esempio n. 26
0
def setup(store):
  try:
    store.delete(Bag(votebag))
  except NoBagError:
    pass
  snowwhitebag = Bag("snow white")
  snowwhitebag.policy = Policy("jon",[],['admin'],['admin'],['admin'])
  mrmenbag = Bag("mr_and_mrs")
  mrmenbag.policy = Policy("jon",["jon","andrew","martin"],['admin'],['admin'],['admin'])
  films = Bag("films")
  films.policy = Policy(accept=["NONE"])
  try:
    store.delete(mrmenbag)
  except NoBagError:
    pass
  try:
    store.delete(snowwhitebag)
  except NoBagError:
    pass
  try:
    store.delete(films)
  except NoBagError:
    pass
  voting.setup_store(config)
  users = ["jon","FND","andrew","martin"]
  for user in users:
    store.put(User(user))
  mrmendata = [
    {"title":u"mr clumbsy","tags":["kitty","pet","cat"],"fields":{}},
    {"title":u"mr thin","tags":["dog","pet"],"fields":{}},
    {"title":u"mr tickle","tags":["cat","animal","bogof"],"fields":{"%s.total"%votebag:"2"}},
    {"title":u"mr messy","tags":["lion"],"fields":{}},
    {"title":u"mr strong","tags":["monkey","lolcat"],"fields":{"%s.total"%votebag:"923"}},
    {"title":u"mr tall","tags":["dinosaur","kitty","tiger"],"fields":{}},
    {"title":u"little miss naughty","tags":["cAt","pet"],"fields":{}},
    {"title":u"mr small","tags":["pet","animal","kitty"],"fields":{}}
  ]
  snowwhitedata = [
    {"title":u"snow white","tags":[],"fields":{}},
    {"title":u"grumpy","tags":[],"fields":{}}  
  ]
  filmdata = [{"title":"Kill Bill","modifier":"Ben"},{"title":"Kill Bill 2","modifier":"Ben"},{"title":"Pulp Fiction","modifier":"Ben"},{"title":"Jackie Brown","modifier":"Ben"}]
  configSnowWhite = Tiddler("config::snow white",votebag)
  configSnowWhite.text = """
increment.range::-5,30
increment.limit::2
"""
  store.put(configSnowWhite)
  store.put(snowwhitebag)
  store.put(mrmenbag)
  store.put(films)
  tiddlers = []
  for tid in mrmendata:
    tiddler = Tiddler(tid["title"],"mr_and_mrs")
    tiddler.fields = tid["fields"]
    tiddler.tags = tid["tags"]
    tiddlers.append(tiddler)
    store.put(tiddler)
  for tid in filmdata:
    tiddler = Tiddler(tid["title"],"films")
    if "modifier" in tid:
      tiddler.modifier = tid["modifier"]
    tiddlers.append(tiddler)
    store.put(tiddler)
  for tid in snowwhitedata:
    tiddler = Tiddler(tid["title"],"snow white")
    tiddler.fields = tid["fields"]
    tiddler.tags = tid["tags"]
    tiddlers.append(tiddler)
    store.put(tiddler)    
  return tiddlers