예제 #1
0
파일: fixtures.py 프로젝트: BillSeitz/tank
def establish_user_auth(config, store, host, username):
    user = User(username)
    mapping_username = '******' % username
    mapping_tiddler = Tiddler(mapping_username, 'MAPUSER')
    mapping_tiddler.fields['mapped_user'] = username

    try:
        store.delete(user)
    except StoreError:
        pass
    try:
        store.delete(mapping_tiddler)
    except IOError:
        pass

    user.add_role('MEMBER')
    user.note = '{}'
    store.put(user)
    ensure_bag('MAPUSER', store)
    store.put(mapping_tiddler)
    stamp = datetime.utcnow().strftime('%Y%m%d%H')
    csrf = gen_nonce(username, host, stamp, config['secret'])
    cookie = make_cookie('tiddlyweb_user', mapping_username,
            mac_key=config['secret'], httponly=False)

    return cookie, csrf
예제 #2
0
def establish_user_auth(config, store, host, username):
    user = User(username)
    mapping_username = '******' % username
    mapping_tiddler = Tiddler(mapping_username, 'MAPUSER')
    mapping_tiddler.fields['mapped_user'] = username

    try:
        store.delete(user)
    except StoreError:
        pass
    try:
        store.delete(mapping_tiddler)
    except IOError:
        pass

    user.add_role('MEMBER')
    user.note = '{}'
    store.put(user)
    ensure_bag('MAPUSER', store)
    store.put(mapping_tiddler)
    stamp = datetime.utcnow().strftime('%Y%m%d%H')
    csrf = gen_nonce(username, host, stamp, config['secret'])
    cookie = make_cookie('tiddlyweb_user',
                         mapping_username,
                         mac_key=config['secret'],
                         httponly=False)

    return cookie, csrf
예제 #3
0
파일: __init__.py 프로젝트: cdent/wiki-data
def _create_user(environ, start_response, creation=0, expiration=0, role='tier1'):
    domain = get_domain(environ['HTTP_HOST'])
    if creation == 0:
        creation = time.time()
    store = environ['tiddlyweb.store']
    query = environ['tiddlyweb.query']
    name = query.get('name', [None])[0]
    email = query.get('email', [None])[0]
    company = query.get('company', [None])[0]
    country = query.get('country', [None])[0]
    if not (name and email):
        # The form has not been filled out
        return _user_form(environ, start_response, role=role, message='Missing Data!',
                formdata={'name': name, 'email': email,
                    'company': company, 'country': country})
    user = User(email)
    try:
        user = store.get(user)
        # User exists!
        return _user_form(environ, start_response, role=role, message='That account already exists!',
                formdata={'name': name, 'email': email,
                    'company': company, 'country': country})
    except NoUserError:
        password = _random_pass()
        user.set_password(password)
        user.add_role(role)
        store.put(user)

    bag_name = environ['tiddlyweb.config'].get('magicuser.bag', 'MAGICUSER')
    ensure_bag(bag_name, store, policy_dict={
        'read': ['NONE'], 'write': ['NONE'],
        'create': ['NONE'], 'manage': ['NONE']})
    tiddler = Tiddler(email, bag_name)
    tiddler.fields['country'] = country
    tiddler.fields['company'] = company
    tiddler.fields['name'] = name
    # Set the creation and expiration times.
    now = time.time()
    tiddler.fields['creation'] = '%s' % creation
    tiddler.fields['expiry'] = '%s' % expiration
    store.put(tiddler)

    to_address = email
    subject = domain+" user info"
    body = """
Here's your info:
Username: %s
Password: %s
""" % (email, password)
    query_string = '?email=%s' % to_address
    try:
        send_email(to_address, subject=subject, body=body, from_='avox@'+domain)
        query_string += '&success=1&role=%s' % role
        raise HTTP303(server_base_url(environ)+'/pages/new_account'+query_string)
    except socket.error:
        logging.debug('failed to send: %s:%s:%s', to_address, subject, body)
        query_string += '&failure=1&role=%s' % role
        raise HTTP302(server_base_url(environ)+'/pages/new_account'+query_string)
예제 #4
0
파일: data.py 프로젝트: cdent/tiddlyhoster
def ensure_user_bag(store, userpage):
    policy = {}
    policy['manage'] = ['R:ADMIN']

    for constraint in ['read', 'write', 'create', 'delete']:
        policy[constraint] = [userpage]

    policy['owner'] = userpage

    ensure_bag(userpage, store, policy)
예제 #5
0
def ensure_user_bag(store, userpage):
    policy = {}
    policy["manage"] = ["R:ADMIN"]

    for constraint in ["read", "write", "create", "delete"]:
        policy[constraint] = [userpage]

    policy["owner"] = userpage

    ensure_bag(userpage, store, policy)
예제 #6
0
def ensure_user_bag(store, userpage):
    policy = {}
    policy['manage'] = ['R:ADMIN']

    for constraint in ['read', 'write', 'create', 'delete']:
        policy[constraint] = [userpage]

    policy['owner'] = userpage

    ensure_bag(userpage, store, policy)
예제 #7
0
def set_user_token(store, token_name, token, username, service):
    ensure_bag(OAUTH_BAG, store, OAUTH_BAG_POLICY,
            description='oauth info', owner=OAUTH_BAG_OWNER)
    user_tiddler_title = '%s_%s' % (service['name'], username)
    tiddler = Tiddler(user_tiddler_title, OAUTH_BAG)
    try:
        tiddler = store.get(tiddler)
    except NoTiddlerError:
        pass # we okay if it isn't there
    tiddler.fields[token_name] = token.to_string()
    store.put(tiddler)
예제 #8
0
def get_user_token(store, token_name, username, service):
    ensure_bag(OAUTH_BAG, store, OAUTH_BAG_POLICY,
            description='oauth info', owner=OAUTH_BAG_OWNER)
    user_tiddler_title = '%s_%s' % (service['name'], username)
    tiddler = Tiddler(user_tiddler_title, OAUTH_BAG)
    print 'getting tiddler', tiddler
    try:
        tiddler = store.get(tiddler)
        print 'got', tiddler.fields
        return tiddler.fields[token_name]
    except (NoTiddlerError, KeyError):
        return None
def get_subscriptions_bag(store, subscription_type):
    """
    determine the correct bag requested for the subscription
    """
    sub_template = Template(config['email']['subscription_format'])
    if subscription_type in SUPPORTED_SUBSCRIPTIONS:
        sub_bag = sub_template.safe_substitute(subscription=sub_type)
    else:
        sub_bag = sub_template.safe_substitute(
            subscription=config['email']['default_subscription'])

    ensure_bag(sub_bag, store)

    return sub_bag
예제 #10
0
 def manifest(args):
     """Make a new manifesto. <manifesto name> <dictionary prefix>"""
     store = get_store(config)
     try:
         recipe_name = args[0]
         bag_name = args[1] + '-dictionary'
     except IndexError:
         usage("manifesto name and dictionary prefix required")
     # add policy info later
     ensure_bag(recipe_name, store)
     ensure_bag(bag_name, store)
     recipe = Recipe(recipe_name)
     recipe.set_recipe([
         (bag_name, ''),
         (recipe_name, '')])
     recipe = store.put(recipe)
예제 #11
0
파일: doer.py 프로젝트: cdent/tiddlytoys
def do(args):
    """Establish a to do item."""
    store = get_store(global_config)
    bag_name = 'do'
    bag = ensure_bag(bag_name, store)
    title = ' '.join(args)
    tiddler = Tiddler(title, bag_name)
    store.put(tiddler)
예제 #12
0
파일: weight.py 프로젝트: cdent/tiddlytoys
def weight(args):
    """Record a daily weight."""
    store = get_store(global_config)
    bag_name = 'weight'
    bag = ensure_bag(bag_name, store)
    title = str(uuid())
    tiddler = Tiddler(title, bag_name)
    tiddler.fields['weight'] = args[0]
    store.put(tiddler)
예제 #13
0
파일: timer.py 프로젝트: cdent/tiddlytoys
def starttime(args):
    """Record start time in a bag: <bag>"""
    store = get_store(global_config)
    bag_name = "%s-start" % args[0]
    bag = ensure_bag(bag_name, store)
    tiddler = Tiddler(int(time()), bag_name)
    try:
        tiddler.text = args[1]
    except IndexError:
        pass
    store.put(tiddler)
예제 #14
0
def ensure_bags(config):
    """
    Ensure that our store has the required bags for operations.
    For now this assumes that we're operating on all possible
    consumer/provider dimensions. Bags are cheap, so...
    """
    store = get_store(config)

    # one for storing app info
    app_bag = config.get('oauth.app_bag', 'oauth_apps')
    # one for storing user authorization codes
    token_bag = config.get('oauth.tokens_bag', 'oauth_tokens')
    # one for storing user auth tokens
    registration_bag = config.get('oauth.registrations_bag',
            'oauth_registrations')

    for bag in [app_bag, token_bag, registration_bag]:
        ensure_bag(bag, store, policy_dict=dict(
            read=['NONE'], write=['NONE'], create=['NONE'],
            delete=['NONE'], manage=['NONE']))
예제 #15
0
파일: doer.py 프로젝트: cdent/tiddlytoys
def done(args):
    """Move a to do item to the done bag."""
    store = get_store(global_config)
    do_bag_name = 'do'
    done_bag_name ='done'
    bag = ensure_bag(done_bag_name, store)
    title = ' '.join(args)
    tiddler = Tiddler(title, do_bag_name)
    tiddler = store.get(tiddler)
    store.delete(tiddler)
    tiddler.bag = done_bag_name
    store.put(tiddler)
def init(config):
    """
    Initialize the plugin: setting up necessary defaults and globals.
    """
    global CACHE
    config['special_bag_detectors'].append(is_remote)

    HOOKS['recipe']['put'].append(recipe_change_hook)

    if config.get('remotebag.use_memcache'):
        import memcache
        CACHE = memcache.Client(config.get('memcache_hosts',
            ['127.0.0.1:11211']))
    else:
        path = config.get('remotebag.cache_dir', '.cache')
        if not os.path.isabs(path):
            path = os.path.join(config.get('root_dir', ''), path)
        CACHE = path

    store = get_store(config)
    policy = dict(manage=['NONE'], read=['NONE'], write=['NONE'],
            create=['NONE'], accept=['NONE'])
    ensure_bag(REMOTEURI_BAG, store, policy_dict=policy)
예제 #17
0
def _make_mapping_tiddler(environ, uri):
    """
    Create and store the tiddler that will persist the mapping.
    """
    store = environ['tiddlyweb.store']
    try:
        mapping_bag = ensure_bag(MAPPING_BAG, store, policy_dict=POLICY)
        title_uuid = '%s' % uuid.uuid4()
        tiddler = Tiddler(title_uuid, mapping_bag.name)
        tiddler.fields['uri'] = uri
        tiddler.fields['user'] = environ['tiddlyweb.usersign']['name']
        store.put(tiddler)
    except StoreError, exc:
        raise HTTP400('Unable to create mapping: %s' % exc)
예제 #18
0
파일: timer.py 프로젝트: cdent/tiddlytoys
def run_tests():
    store = get_store(global_config)
    start_bag = ensure_bag("test1-start", store)
    stop_bag = ensure_bag("test1-stop", store)
    store.put(Tiddler("1", "test1-start"))
    store.put(Tiddler("2", "test1-stop"))
    store.put(Tiddler("3", "test1-start"))
    store.put(Tiddler("4", "test1-stop"))
    reporttime(["test1"])  # 2

    start_bag = ensure_bag("test2-start", store)
    stop_bag = ensure_bag("test2-stop", store)
    store.put(Tiddler("1", "test2-start"))
    store.put(Tiddler("2", "test2-start"))
    store.put(Tiddler("5", "test2-stop"))
    reporttime(["test2"])  # 4

    start_bag = ensure_bag("test3-start", store)
    stop_bag = ensure_bag("test3-stop", store)
    store.put(Tiddler("1", "test3-start"))
    store.put(Tiddler("2", "test3-stop"))
    store.put(Tiddler("5", "test3-stop"))
    reporttime(["test3"])  # 1
예제 #19
0
def register(environ, start_response):
    """
    register the user
    """
    config = environ['tiddlyweb.config']
    store = environ['tiddlyweb.store']
    query = environ['tiddlyweb.query']
    try:
        server_name = query['server_name'][0]
        server_name_sig = query['server_name_sig'][0]
        server_login = query['server_login'][0]
        server_login_sig = query['server_login_sig'][0]
        username = query['login'][0]
        name = query['name'][0]
        email = query['email'][0]
        extra = query['extra'][0]
        redirect = query['redirect'][0]
    except (KeyError, ValueError) as exc:
        raise HTTP400('Incomplete form submission: %s' % exc)

    announcements = query.get('announcements', [None])[0]

    # Bail out if someone corrupted the form input.
    secret = config['secret']
    name_sig = sha('%s%s' % (server_name, secret)).hexdigest()
    login_sig = sha('%s%s' % (server_login, secret)).hexdigest()
    if name_sig != server_name_sig or login_sig != server_login_sig:
        raise HTTP400('Invalid request')

    user = User(username)
    try:
        store.get(user)
        raise HTTP400('That username is not available.')
    except StoreError:  # we expect and want this
        pass

    user.add_role(DEFAULT_ROLE)
    user.note = simplejson.dumps({
        'registered': time(),
        'name': name,
        'email': email,
        'extra': extra,
        'announcements': announcements is not None
    })

    map_bag_name = config.get('magicuser.map', 'MAPUSER')
    ensure_bag(map_bag_name, store, policy_dict=MAP_USER_POLICY)
    tiddler = Tiddler(server_login, map_bag_name)
    try:
        store.get(tiddler)
        raise HTTP400('That remote user is already mapped')
    except StoreError:
        pass
    tiddler.fields['mapped_user'] = username

    store.put(tiddler)
    store.put(user)

    create_wiki(environ,
                '_%s-data' % username,
                mode='private',
                username=username,
                desc='Data Files',
                validate=False)
    create_wiki(environ,
                '%s-notebook' % username,
                mode='private',
                username=username,
                desc='Private Notebook',
                validate=False)
    create_wiki(environ,
                '%s' % username,
                mode='protected',
                username=username,
                desc='Share Stuff',
                validate=False)

    redirect_uri = '%s%s' % (server_base_url(environ), redirect)
    secret = config['secret']
    cookie_age = config.get('cookie_age', None)
    cookie_header_string = make_cookie('tiddlyweb_user',
                                       server_login,
                                       mac_key=secret,
                                       path='/',
                                       expires=cookie_age)
    start_response('303 See Other', [('Set-Cookie', cookie_header_string),
                                     ('Content-Type', 'text/plain'),
                                     ('Location', str(redirect_uri))])
    return [redirect_uri]
예제 #20
0
파일: data.py 프로젝트: pmario/tiddlyhoster
def ensure_protected_bag(store, username, desc='', name=None):
    policy = _protected_policy(username)
    if name == None:
        name = '%s-protected' % username
    return ensure_bag(name, store, policy, description=desc)
예제 #21
0
def ensure_private_bag(store, username, desc="", name=None):
    policy = _private_policy(username)
    if name == None:
        name = "%s-private" % username
    return ensure_bag(name, store, policy, description=desc)
예제 #22
0
파일: data.py 프로젝트: cdent/tiddlyhoster
def ensure_private_bag(store, username, desc='', name=None):
    policy = _private_policy(username)
    if name is None:
        name = '%s-private' % username
    return ensure_bag(name, store, policy, description=desc)
예제 #23
0
def _create_user(environ, start_response, creation=0, expiration=0, role="tier1"):
    domain = get_domain(environ["HTTP_HOST"])
    if creation == 0:
        creation = time.time()
    store = environ["tiddlyweb.store"]
    query = environ["tiddlyweb.query"]
    name = query.get("name", [None])[0]
    email = query.get("email", [None])[0]
    company = query.get("company", [None])[0]
    country = query.get("country", [None])[0]
    if not (name and email):
        # The form has not been filled out
        return _user_form(
            environ,
            start_response,
            role=role,
            message="Missing Data!",
            formdata={"name": name, "email": email, "company": company, "country": country},
        )
    user = User(email)
    try:
        user = store.get(user)
        # User exists!
        return _user_form(
            environ,
            start_response,
            role=role,
            message="That account already exists!",
            formdata={"name": name, "email": email, "company": company, "country": country},
        )
    except NoUserError:
        password = _random_pass()
        user.set_password(password)
        user.add_role(role)
        store.put(user)

    bag_name = environ["tiddlyweb.config"].get("magicuser.bag", "MAGICUSER")
    ensure_bag(
        bag_name, store, policy_dict={"read": ["NONE"], "write": ["NONE"], "create": ["NONE"], "manage": ["NONE"]}
    )
    tiddler = Tiddler(email, bag_name)
    tiddler.fields["country"] = country
    tiddler.fields["company"] = company
    tiddler.fields["name"] = name
    # Set the creation and expiration times.
    now = time.time()
    tiddler.fields["creation"] = "%s" % creation
    tiddler.fields["expiry"] = "%s" % expiration
    store.put(tiddler)

    to_address = email
    subject = domain + " user info"
    body = """
Here's your info:
Username: %s
Password: %s
""" % (
        email,
        password,
    )
    query_string = "?email=%s" % to_address
    try:
        send_email(to_address, subject=subject, body=body, from_="avox@" + domain)
        query_string += "&success=1&role=%s" % role
        raise HTTP303(server_base_url(environ) + "/pages/new_account" + query_string)
    except socket.error:
        logging.debug("failed to send: %s:%s:%s", to_address, subject, body)
        query_string += "&failure=1&role=%s" % role
        raise HTTP302(server_base_url(environ) + "/pages/new_account" + query_string)
예제 #24
0
def ensure_private_bag(store, username, desc='', name=None):
    policy = _private_policy(username)
    if name is None:
        name = '%s-private' % username
    return ensure_bag(name, store, policy, description=desc)