Пример #1
0
 def list_bags(self, bags):
     """
     Send bags out bags.html template.
     """
     return send_template(self.environ, 'bags.html', {
         'bags': bags,
         'title': 'Bags'})
Пример #2
0
 def tiddler_as(self, tiddler):
     """
     Transform the provided tiddler into an HTML
     representation of the tiddler packaged in a
     DIV. Render the content using the render_wikitext
     subsystem. Links to the tiddler in the wiki are
     provided.
     """
     user = self.environ['tiddlyweb.usersign']
     store = self.environ['tiddlyweb.store']
     if tiddler.recipe:
         list_link = '/recipes/%s/tiddlers' % encode_name(tiddler.recipe)
         list_title = 'Tiddlers in Recipe %s' % tiddler.recipe
     else:
         list_link = '/bags/%s/tiddlers' % encode_name(tiddler.bag)
         list_title = 'Tiddlers in Bag %s' % tiddler.bag
     try:
         store.get(Bag(tiddler.bag)).policy.allows(user, 'manage')
         container_policy = True
     except PermissionsError:
         container_policy = False
     space_link = self._space_link(tiddler)
     html = render_wikitext(tiddler, self.environ)
     return send_template(self.environ, 'tiddler.html', {
         'title': '%s' % tiddler.title,
         'tags': tiddler.tags,
         'fields': tiddler.fields,
         'html': html,
         'list_link': list_link,
         'list_title': list_title,
         'space_link': space_link,
         'tiddler': tiddler,
         'container_policy': container_policy,
         'tiddler_url': tiddler_url(self.environ, tiddler)})
Пример #3
0
 def list_recipes(self, recipes):
     """
     Send recipes out recipes.html template.
     """
     return send_template(self.environ, 'recipes.html', {
         'recipes': recipes,
         'title': 'Recipes'})
Пример #4
0
 def recipe_as(self, recipe):
     """
     Send a recipe out the recipe.html template.
     """
     return send_template(self.environ, 'recipe.html', {
         'recipe': recipe,
         'title': 'Recipe %s' % recipe.name})
Пример #5
0
 def list_recipes(self, recipes):
     """
     Send recipes out recipes.html template.
     """
     return send_template(self.environ, 'recipes.html', {
         'meta_keywords': 'recipes, tiddlyspace',
         'meta_description': 'A list of recipes on TiddlySpace',
         'recipes': recipes,
         'title': 'Recipes'})
Пример #6
0
 def recipe_as(self, recipe):
     """
     Send a recipe out the recipe.html template.
     """
     return send_template(self.environ, 'recipe.html', {
         'meta_keywords': 'recipe, tiddlyspace',
         'meta_description': 'A recipe on TiddlySpace',
         'recipe': recipe,
         'title': 'Recipe %s' % recipe.name})
Пример #7
0
 def list_bags(self, bags):
     """
     Send bags out bags.html template.
     """
     return send_template(self.environ, 'bags.html', {
         'meta_keywords': 'bags, tiddlyspace',
         'meta_description': 'A list of bags on TiddlySpace',
         'bags': bags,
         'title': 'Bags'})
Пример #8
0
 def recipe_as(self, recipe):
     """
     Send a recipe out the recipe.html template.
     """
     return send_template(
         self.environ, 'recipe.html', {
             'meta_keywords': 'recipe, tiddlyspace',
             'meta_description': 'A recipe on TiddlySpace',
             'recipe': recipe,
             'title': 'Recipe %s' % recipe.name
         })
Пример #9
0
 def list_bags(self, bags):
     """
     Send bags out bags.html template.
     """
     return send_template(
         self.environ, 'bags.html', {
             'meta_keywords': 'bags, tiddlyspace',
             'meta_description': 'A list of bags on TiddlySpace',
             'bags': bags,
             'title': 'Bags'
         })
Пример #10
0
 def list_recipes(self, recipes):
     """
     Send recipes out recipes.html template.
     """
     return send_template(
         self.environ, 'recipes.html', {
             'meta_keywords': 'recipes, tiddlyspace',
             'meta_description': 'A list of recipes on TiddlySpace',
             'recipes': recipes,
             'title': 'Recipes'
         })
Пример #11
0
def host_meta(environ, start_response):
    """
    Send the host_meta information, so webfinger info can be found.
    """
    http_host, host_url = determine_host(environ)
    if http_host != host_url:
        # Or should it be a 302?
        raise HTTP404('No host-meta at this host: %s' % http_host)

    start_response('200 OK', [('Content-Type', 'application/xrd+xml')])

    return send_template(environ, 'hostmeta.xml', {'host': http_host})
Пример #12
0
    def tiddler_as(self, tiddler):
        """
        Transform the provided tiddler into an HTML
        representation of the tiddler packaged in a
        DIV. Render the content using the render_wikitext
        subsystem. Links to the tiddler in the wiki are
        provided.
        """
        user = self.environ['tiddlyweb.usersign']
        store = self.environ['tiddlyweb.store']
        if tiddler.recipe:
            list_link = '/recipes/%s/tiddlers' % encode_name(tiddler.recipe)
            list_title = 'Tiddlers in Recipe %s' % tiddler.recipe
        else:
            list_link = '/bags/%s/tiddlers' % encode_name(tiddler.bag)
            list_title = 'Tiddlers in Bag %s' % tiddler.bag
        try:
            store.get(Bag(tiddler.bag)).policy.allows(user, 'manage')
            container_policy = True
        except PermissionsError:
            container_policy = False
        if not self.environ['tiddlyweb.space_settings'].get('index', None):
            space_link = self._space_link(tiddler)
        else:
            space_link = ''
        try:
            modifier_link = space_uri(self.environ, tiddler.modifier)
        except AttributeError:
            modifier_link = ""
        try:
            creator_link = space_uri(self.environ, tiddler.creator)
        except AttributeError:
            creator_link = ""

        html = render_wikitext(tiddler, self.environ)
        return send_template(
            self.environ, 'tiddler.html', {
                'meta_keywords': ', '.join(tiddler.tags),
                'meta_description': tiddler.title,
                'title': '%s' % tiddler.title,
                'tags': tiddler.tags,
                'modifier_link': modifier_link,
                'creator_link': creator_link,
                'fields': tiddler.fields,
                'html': html,
                'list_link': list_link,
                'list_title': list_title,
                'space_link': space_link,
                'tiddler': tiddler,
                'container_policy': container_policy,
                'tiddler_url': tiddler_url(self.environ, tiddler)
            })
Пример #13
0
def host_meta(environ, start_response):
    """
    Send the host_meta information, so webfinger info can be found.
    """
    http_host, host_url = determine_host(environ)
    if http_host != host_url:
        # Or should it be a 302?
        raise HTTP404('No host-meta at this host: %s' % http_host)

    start_response('200 OK', [
        ('Content-Type', 'application/xrd+xml')])

    return send_template(environ, 'hostmeta.xml', {'host': http_host})
Пример #14
0
    def tiddler_as(self, tiddler):
        """
        Transform the provided tiddler into an HTML
        representation of the tiddler packaged in a
        DIV. Render the content using the render_wikitext
        subsystem. Links to the tiddler in the wiki are
        provided.
        """
        user = self.environ['tiddlyweb.usersign']
        store = self.environ['tiddlyweb.store']
        if tiddler.recipe:
            list_link = '/recipes/%s/tiddlers' % encode_name(tiddler.recipe)
            list_title = 'Tiddlers in Recipe %s' % tiddler.recipe
        else:
            list_link = '/bags/%s/tiddlers' % encode_name(tiddler.bag)
            list_title = 'Tiddlers in Bag %s' % tiddler.bag
        try:
            store.get(Bag(tiddler.bag)).policy.allows(user, 'manage')
            container_policy = True
        except PermissionsError:
            container_policy = False
        if not self.environ['tiddlyweb.space_settings'].get('index', None):
            space_link = self._space_link(tiddler)
        else:
            space_link = ''
        try:
            modifier_link = space_uri(self.environ, tiddler.modifier)
        except AttributeError:
            modifier_link = ""
        try:
            creator_link = space_uri(self.environ, tiddler.creator)
        except AttributeError:
            creator_link = ""

        html = render_wikitext(tiddler, self.environ)
        return send_template(self.environ, 'tiddler.html', {
            'meta_keywords': ', '.join(tiddler.tags),
            'meta_description': tiddler.title,
            'title': '%s' % tiddler.title,
            'tags': tiddler.tags,
            'modifier_link': modifier_link,
            'creator_link': creator_link,
            'fields': tiddler.fields,
            'html': html,
            'list_link': list_link,
            'list_title': list_title,
            'space_link': space_link,
            'tiddler': tiddler,
            'container_policy': container_policy,
            'tiddler_url': tiddler_url(self.environ, tiddler)})
Пример #15
0
    def bag_as(self, bag):
        """
        Send a bag out as HTML via the bag.html template.
        Report on the permissions and policy for this bag
        for the viewing user.
        """
        user = self.environ['tiddlyweb.usersign']
        policy = bag.policy
        policy.owner = [policy.owner]
        user_perms = bag.policy.user_perms(user)

        return send_template(self.environ, 'bag.html', {
            'policy': policy,
            'user_perms': user_perms,
            'bag': bag,
            'title': 'Bag %s' % bag.name})
Пример #16
0
    def bag_as(self, bag):
        """
        Send a bag out as HTML via the bag.html template.
        Report on the permissions and policy for this bag
        for the viewing user.
        """
        user = self.environ['tiddlyweb.usersign']
        policy = bag.policy
        policy.owner = [policy.owner]
        user_perms = bag.policy.user_perms(user)

        return send_template(
            self.environ, 'bag.html', {
                'meta_keywords': 'bag, tiddlyspace',
                'meta_description': 'A bag on TiddlySpace',
                'policy': policy,
                'user_perms': user_perms,
                'bag': bag,
                'title': 'Bag %s' % bag.name
            })
Пример #17
0
def webfinger(environ, start_response):
    """
    Display the webfinger information for a given user.
    """
    http_host, host_url = determine_host(environ)
    if http_host != host_url:
        raise HTTP404('No webfinger at this host: %s' % http_host)

    username = environ['tiddlyweb.query'].get('q', [None])[0]

    if not username:
        raise HTTP400('No account provided to webfinger query')

    if username.startswith('acct:'):
        username = username.split(':', 1)[1]
    username = username.split('@', 1)[0]

    start_response('200 OK', [
        ('Content-Type', 'application/xrd+xml')])

    return send_template(environ, 'webfinger.xml', {
        'username': username,
        'host': http_host})
Пример #18
0
def webfinger(environ, start_response):
    """
    Display the webfinger information for a given user.
    """
    http_host, host_url = determine_host(environ)
    if http_host != host_url:
        raise HTTP404('No webfinger at this host: %s' % http_host)

    username = environ['tiddlyweb.query'].get('q', [None])[0]

    if not username:
        raise HTTP400('No account provided to webfinger query')

    if username.startswith('acct:'):
        username = username.split(':', 1)[1]
    username = username.split('@', 1)[0]

    start_response('200 OK', [('Content-Type', 'application/xrd+xml')])

    return send_template(environ, 'webfinger.xml', {
        'username': username,
        'host': http_host
    })
Пример #19
0
    def list_tiddlers(self, tiddlers):
        """
        List the tiddlers from a container. Include a link
        to the container if it can be viewed by the current
        user. List the available serializations for the tiddlers.
        """
        tiddlers_url = (self.environ.get('SCRIPT_NAME', '')
                + self.environ.get('PATH_INFO', ''))
        title = tiddlers.title
        revisions = tiddlers.is_revisions
        routing_args = self.environ.get('wsgiorg.routing_args', ([], {}))[1]
        container_name = ''
        container_url = ''
        container_policy = False
        store = self.environ['tiddlyweb.store']
        user = self.environ['tiddlyweb.usersign']
        if routing_args and not tiddlers.is_search:
            if 'recipe_name' in routing_args:
                name = get_route_value(self.environ, 'recipe_name')
                container_name = 'Recipe %s' % name
                try:
                    store.get(Recipe(name)).policy.allows(user, 'read')
                    container_url = '/recipes/%s' % name
                    container_policy = True
                except PermissionsError:
                    pass
            elif 'bag_name' in routing_args:
                name = get_route_value(self.environ, 'bag_name')
                container_url = '/bags/%s' % name
                container_name = 'Bag %s' % name
                try:
                    store.get(Bag(name)).policy.allows(user, 'manage')
                    container_policy = True
                except PermissionsError:
                    pass

            if revisions:
                container_policy = True

        try:
            query_string = self.environ.get('QUERY_STRING', '').decode('utf-8')
        except UnicodeDecodeError:
            query_string = u'invalid+query+string+encoding'

        links = self.environ.get('tiddlyweb.config',
                {}).get('extension_types', {}).keys()

        if query_string:
            query_string = '?%s' % query_string

        # chop off the possible trailing .html
        tiddlers_url = tiddlers_url.rsplit('.html')[0] 

        return send_template(self.environ, 'tiddlers.html', {
            'title': title,
            'revisions': revisions,
            'tiddlers_url': tiddlers_url.decode('utf-8', 'replace'),
            'query_string': query_string,
            'container_name': container_name,
            'container_url': container_url,
            'container_policy': container_policy,
            'links': links,
            'tiddlers': tiddlers})
Пример #20
0
    def list_tiddlers(self, tiddlers):
        """
        List the tiddlers from a container. Include a link
        to the container if it can be viewed by the current
        user. List the available serializations for the tiddlers.
        """
        tiddlers_url = (self.environ.get('SCRIPT_NAME', '') +
                        self.environ.get('PATH_INFO', ''))

        container_name = ''
        container_type = 'bags'
        container_url = ''
        container_policy = False
        store = self.environ['tiddlyweb.store']
        user = self.environ['tiddlyweb.usersign']
        if not tiddlers.is_search:
            if tiddlers.recipe:
                name = tiddlers.recipe
                container_url = '/recipes/%s' % name
                container_name = 'Recipe %s' % name
                container_type = 'recipes'
                try:
                    store.get(Recipe(name)).policy.allows(user, 'read')
                    container_policy = True
                except PermissionsError:
                    pass
            elif tiddlers.bag:
                name = tiddlers.bag
                container_url = '/bags/%s' % name
                container_name = 'Bag %s' % name
                try:
                    store.get(Bag(name)).policy.allows(user, 'manage')
                    container_policy = True
                except PermissionsError:
                    pass

            if tiddlers.is_revisions:
                container_policy = True

        try:
            query_string = self.environ.get('QUERY_STRING', '').decode('utf-8')
        except UnicodeDecodeError:
            query_string = u'invalid+query+string+encoding'

        links = self.environ.get('tiddlyweb.config',
                                 {}).get('extension_types', {}).keys()

        if query_string:
            query_string = '?%s' % query_string

        # chop off the possible trailing .html
        tiddlers_url = tiddlers_url.rsplit('.html')[0]
        friendly = False
        if tiddlers_url.count('/') <= 1:
            friendly = True

        if tiddlers.is_search:
            template = 'search.html'
            if 'tiddlyweb.query.original' in self.environ:
                tiddlers.title = ('Search for %s' %
                                  self.environ['tiddlyweb.query.original'])
        else:
            template = 'tiddlers.html'

        return send_template(
            self.environ, template, {
                'meta_keywords': 'tiddlers, tiddlyspace',
                'meta_description': 'A list of tiddlers on TiddlySpace',
                'title': tiddlers.title,
                'tiddler_url': tiddler_url,
                'environ': self.environ,
                'revisions': tiddlers.is_revisions,
                'friendly': friendly,
                'tiddlers_url': tiddlers_url.decode('utf-8', 'replace'),
                'space_uri': space_uri,
                'space_bag': space_bag,
                'query_string': query_string,
                'container_type': container_type,
                'container_name': container_name,
                'container_url': container_url,
                'container_policy': container_policy,
                'links': links,
                'tiddlers': tiddlers
            })
Пример #21
0
    profile_text = render_wikitext(profile_tiddler, environ)

    tiddlers = store.search(_search_string(username))
    tiddlers_list = readable_tiddlers_by_bag(store, tiddlers, usersign)

    avatar_path = '/recipes/%s_public/tiddlers/SiteIcon' % username

    start_response('200 OK', [
        ('Content-Type', 'text/html; charset=UTF-8')])

    return send_template(environ, 'tsprofile.html', {
        'css': ['/bags/common/tiddlers/profile.css'],
        'title': 'Profile for %s' % username,
        'username': username,
        'activity_feed': activity_feed,
        'avatar_path': avatar_path,
        'space_uri': space_uri(environ, username),
        'profile': profile_text,
        'tiddler_url': tiddler_url,
        'environ': environ,
        'tiddlers': tiddlers_list})


def host_meta(environ, start_response):
    """
    Send the host_meta information, so webfinger info can be found.
    """
    http_host, host_url = determine_host(environ)
    if http_host != host_url:
        # Or should it be a 302?
        raise HTTP404('No host-meta at this host: %s' % http_host)
Пример #22
0
    def tiddler_as(self, tiddler):
        """
        Transform the provided tiddler into an HTML
        representation of the tiddler packaged in a
        DIV. Render the content using the render_wikitext
        subsystem. Links to the tiddler in the wiki are
        provided.
        """
        tiddlers_url = (self.environ.get('SCRIPT_NAME', '')
                + self.environ.get('PATH_INFO', ''))

        template_name = 'friendlytiddler.html'
        if '/tiddlers/' in tiddlers_url:
            template_name = 'tiddler.html'

        revision = False
        if '/revisions/' in tiddlers_url:
            revision = True

        user = self.environ['tiddlyweb.usersign']
        store = self.environ['tiddlyweb.store']
        if tiddler.recipe:
            list_link = '/recipes/%s/tiddlers' % encode_name(tiddler.recipe)
            list_title = 'Tiddlers in Recipe %s' % tiddler.recipe
        else:
            list_link = '/bags/%s/tiddlers' % encode_name(tiddler.bag)
            list_title = 'Tiddlers in Bag %s' % tiddler.bag
        tiddlerurl = tiddler_url(self.environ, tiddler)
        if revision:
            list_link = '%s/%s/revisions' % (list_link,
                    encode_name(tiddler.title))
            list_title = 'Revisions of %s' % tiddler.title
            tiddlerurl = '%s/revisions/%s' % (tiddlerurl,
                    encode_name('%s' % tiddler.revision))
        try:
            store.get(Bag(tiddler.bag)).policy.allows(user, 'manage')
            container_policy = True
        except PermissionsError:
            container_policy = False
        if not self.environ['tiddlyweb.space_settings'].get('index', None):
            space_link, space_name = self._space_link(tiddler)
        else:
            space_link = ''
            space_name = ''
        try:
            modifier_link = space_uri(self.environ, tiddler.modifier)
        except AttributeError:
            modifier_link = ""
        try:
            creator_link = space_uri(self.environ, tiddler.creator)
        except AttributeError:
            creator_link = ""

        links = self.environ.get('tiddlyweb.config',
                {}).get('extension_types', {}).keys()

        html = render_wikitext(tiddler, self.environ)
        return send_template(self.environ, template_name, {
            'meta_keywords': ', '.join(tiddler.tags),
            'meta_description': tiddler.title,
            'title': '%s' % tiddler.title,
            'tags': tiddler.tags,
            'modifier_link': modifier_link,
            'creator_link': creator_link,
            'fields': tiddler.fields,
            'html': html,
            'list_link': list_link,
            'list_title': list_title,
            'space_link': space_link,
            'space_name': space_name,
            'tiddler': tiddler,
            'container_policy': container_policy,
            'links': links,
            'tiddler_url': tiddlerurl})
Пример #23
0
    profile_text = render_wikitext(profile_tiddler, environ)

    tiddlers = store.search(_search_string(username))
    tiddlers_list = readable_tiddlers_by_bag(store, tiddlers, usersign)

    avatar_path = '/recipes/%s_public/tiddlers/SiteIcon' % username

    start_response('200 OK', [('Content-Type', 'text/html; charset=UTF-8')])

    return send_template(
        environ, 'tsprofile.html', {
            'css': ['/bags/common/tiddlers/profile.css'],
            'title': 'Profile for %s' % username,
            'username': username,
            'activity_feed': activity_feed,
            'avatar_path': avatar_path,
            'space_uri': space_uri(environ, username),
            'profile': profile_text,
            'tiddler_url': tiddler_url,
            'environ': environ,
            'tiddlers': tiddlers_list
        })


def host_meta(environ, start_response):
    """
    Send the host_meta information, so webfinger info can be found.
    """
    http_host, host_url = determine_host(environ)
    if http_host != host_url:
        # Or should it be a 302?
Пример #24
0
    def list_tiddlers(self, tiddlers):
        """
        List the tiddlers from a container. Include a link
        to the container if it can be viewed by the current
        user. List the available serializations for the tiddlers.
        """
        tiddlers_url = (self.environ.get('SCRIPT_NAME', '')
                + self.environ.get('PATH_INFO', ''))
        if tiddlers_url.startswith('/tiddlers'):
            tiddlers.link = '/tiddlers'

        template_name = 'friendlytiddlers.html'
        if '/bags/' in tiddlers.link or '/recipes/' in tiddlers.link:
            template_name = 'tiddlers.html'

        container_name = ''
        container_type = 'bags'
        container_url = ''
        container_policy = False
        store = self.environ['tiddlyweb.store']
        user = self.environ['tiddlyweb.usersign']
        space_name = ''
        if not (tiddlers.is_search or tiddlers.is_revisions):
            if tiddlers.recipe:
                name = tiddlers.recipe
                try:
                    space_name = Space.name_from_recipe(name)
                    tiddlers.title = 'Tiddlers in %s' % space_name
                except ValueError:
                    pass
                container_url = '/recipes/%s' % name
                container_name = 'Recipe %s' % name
                container_type = 'recipes'
                try:
                    store.get(Recipe(name)).policy.allows(user, 'read')
                    container_policy = True
                except PermissionsError:
                    pass
            elif tiddlers.bag:
                name = tiddlers.bag
                try:
                    space_name = Space.name_from_recipe(name)
                    tiddlers.title = 'Tiddlers in %s' % space_name
                except ValueError:
                    pass
                container_url = '/bags/%s' % name
                container_name = 'Bag %s' % name
                try:
                    store.get(Bag(name)).policy.allows(user, 'manage')
                    container_policy = True
                except PermissionsError:
                    pass

        if tiddlers.is_revisions:
            container_policy = True
            container_url = tiddlers.link.rsplit('/revisions')[0]
            container_name = 'Head'

        try:
            query_string = self.environ.get('QUERY_STRING', '').decode('utf-8')
        except UnicodeDecodeError:
            query_string = u'invalid+query+string+encoding'

        links = self.environ.get('tiddlyweb.config',
                {}).get('extension_types', {}).keys()

        if query_string:
            query_string = '?%s' % query_string

        if tiddlers.is_search:
            template_name = 'search.html'
            if 'tiddlyweb.query.original' in self.environ:
                tiddlers.title = ('Search for %s'
                        % self.environ['tiddlyweb.query.original'])

        return send_template(self.environ, template_name, {
            'meta_keywords': 'tiddlers, tiddlyspace',
            'meta_description': 'A list of tiddlers on TiddlySpace',
            'title': tiddlers.title,
            'tiddler_url': tiddler_url,
            'environ': self.environ,
            'revisions': tiddlers.is_revisions,
            'tiddlers_url': tiddlers.link,
            'space_uri': space_uri,
            'space_bag': space_bag,
            'query_string': query_string,
            'container_type': container_type,
            'container_name': container_name,
            'container_url': container_url,
            'container_policy': container_policy,
            'links': links,
            'space_name': space_name,
            'tiddlers': tiddlers})