Exemplo n.º 1
0
    def handle_submit(self, converted):
        try:
            context = self.context
            request = self.request
            key = request.params.get('key')
            if not key or len(key) != 40:
                e = ResetFailed()
                e.page_title = 'Password Reset URL Problem'
                raise e
            users = find_users(context)
            user = users.get_by_login(converted['login'])
            if user is None:
                # XXX should be part of form validation
                raise Exception(login='******')
            userid = user.get('id')
            if userid is None:
                userid = user['login']

            profiles = find_profiles(context)
            profile = profiles.get(userid)
            if profile is None:
                # XXX should be part of form validation
                raise Exception(login='******')

            if key != getattr(profile, 'password_reset_key', None):
                e = ResetFailed()
                e.page_title = 'Password Reset Confirmation Problem'
                raise e

            now = datetime.datetime.now()
            t = getattr(profile, 'password_reset_time', None)
            if t is None or now - t > max_reset_timedelta:
                e = ResetFailed()
                e.page_title = 'Password Reset Confirmation Key Expired'
                raise e

            # The key matched.  Clear the key and reset the password.
            profile.password_reset_key = None
            profile.password_reset_time = None
            password = converted['password'].encode('UTF-8')
            users.change_password(userid, password)

            page_title = 'Password Reset Complete'
            api = request.api
            api.page_title = page_title
            return render_template_to_response(
                'templates/reset_complete.pt',
                api=api,
                login=converted['login'],
                password=converted['password'],
                )

        except ResetFailed, e:
            api = request.api
            api.page_title = e.page_title
            return render_template_to_response('templates/reset_failed.pt',
                                               api=api)
Exemplo n.º 2
0
    def __call__(self, environ, start_response):

        req = Request(environ)
        try:
            resp = req.get_response(self.app)
        except:
            # General failures get wrapped into a General KARL Error
            static_url = req.relative_url(self._static_url, to_application=True)
            home_url = req.relative_url(self._home_url, to_application=True)
            if self._errorlog_url is None:
                errorlog_url = None
            else:
                errorlog_url = req.relative_url(
                    self._errorlog_url, to_application=True
                )

            traceback_info = format_exc()
            resp = render_template_to_response(
                'karl.views:templates/wsgi_errormsg.pt',
                error_message='General Error',
                error_text=GENERAL_MESSAGE %
                           {'system_name': self._system_name},
                static_url=static_url,
                errorlog_url=errorlog_url,
                home_url=home_url,
                traceback_info=traceback_info,
                )
            resp.status = 500
            return resp(environ, start_response)

        status = resp.status_int
        if status in (404, 500):
            static_url = req.relative_url(self._static_url, to_application=True)
            home_url = req.relative_url(self._home_url, to_application=True)
            if self._errorlog_url is None:
                errorlog_url = None
            else:
                errorlog_url = req.relative_url(
                    self._errorlog_url, to_application=True
                )
            error_text = NOTFOUND_MESSAGE if status == 404 else GENERAL_MESSAGE
            error_text %= {'system_name': self._system_name}
            resp = render_template_to_response(
                'karl.views:templates/wsgi_errormsg.pt',
                error_message='Not Found',
                static_url=static_url,
                error_text=error_text,
                home_url=home_url,
                errorlog_url=errorlog_url,
                traceback_info=None,
                )
            resp.status = status
            return resp(environ, start_response)

        return resp(environ, start_response)
Exemplo n.º 3
0
    def handle_submit(self, converted):
        try:
            context = self.context
            request = self.request
            key = request.params.get("key")
            if not key or len(key) != 40:
                e = ResetFailed()
                e.page_title = "Password Reset URL Problem"
                raise e
            users = find_users(context)
            user = users.get_by_login(converted["login"])
            if user is None:
                raise ValidationError(login="******")
            userid = user.get("id")
            if userid is None:
                userid = user["login"]

            profiles = find_profiles(context)
            profile = profiles.get(userid)
            if profile is None:
                raise ValidationError(login="******")

            if key != getattr(profile, "password_reset_key", None):
                e = ResetFailed()
                e.page_title = "Password Reset Confirmation Problem"
                raise e

            now = datetime.datetime.now()
            t = getattr(profile, "password_reset_time", None)
            if t is None or now - t > max_reset_timedelta:
                e = ResetFailed()
                e.page_title = "Password Reset Confirmation Key Expired"
                raise e

            # The key matched.  Clear the key and reset the password.
            profile.password_reset_key = None
            profile.password_reset_time = None
            password = converted["password"].encode("UTF-8")
            users.change_password(userid, password)

            page_title = "Password Reset Complete"
            api = TemplateAPI(context, request, page_title)
            return render_template_to_response(
                "templates/reset_complete.pt", api=api, login=converted["login"], password=converted["password"]
            )

        except ResetFailed, e:
            api = TemplateAPI(context, request, e.page_title)
            return render_template_to_response("templates/reset_failed.pt", api=api)
Exemplo n.º 4
0
def forbidden(context, request):
    site = find_site(context)
    environ = request.environ
    referrer = environ.get('HTTP_REFERER', '')
    if 'repoze.who.identity' in environ:
        # the user is authenticated but he is not allowed to access this
        # resource
        api = TemplateAPI(context, request, 'Forbidden')
        response =  render_template_to_response(
            'templates/forbidden.pt',
            api=api,
            login_form_url = model_url(site, request, 'login.html'),
            homepage_url = model_url(site, request),
            )
        response.status = '403 Forbidden'
        return response
    elif '/login.html' in referrer:
        url = request.url
        # this request came from a user submitting the login form
        login_url = model_url(site, request, 'login.html',
                              query={'reason':'Bad username or password',
                                     'came_from':url})
        return HTTPFound(location=login_url)
    else:
        # the user is not authenticated and did not come in as a result of
        # submitting the login form
        url = request.url
        query = {'came_from':url}
        while url.endswith('/'):
            url = url[:-1]
        if url != request.application_url: # if request isnt for homepage
            query['reason'] = 'Not logged in'
        login_url = model_url(site, request, 'login.html', query=query)
        return HTTPFound(location=login_url)
Exemplo n.º 5
0
def stats(context, request):
    me = sys.argv[0]
    me = os.path.abspath(me)
    sandbox = os.path.dirname(os.path.dirname(me))
    outfile_path = os.path.join(sandbox, 'var/stats/', 'stats.csv')
    f = open(outfile_path, 'r')
    lines = f.readlines()
    resp_out = ""
    line_arrays = []
    for line in lines:
        resp_out = resp_out + line + "<br/>"
        line2 = line
        myarr = line2.split(",")
        line_arrays.append(myarr)
    
    page_title = 'Admin Statistics'
    api = TemplateAPI(context, request, page_title)

    return render_template_to_response(
        'templates/stats.pt',
        api = api,
        stats = resp_out,
        comms = line_arrays,
        )

    
    return Response(resp_out)
Exemplo n.º 6
0
def delete_profile_view(context, request):

    confirm = request.params.get('confirm')
    if confirm:
        parent = context.__parent__
        name = context.__name__
        find_users(context).remove(name)
        del parent[name]

        if authenticated_userid(request) == name:
            return logout_view(context, request, reason='User removed')
        query = {'status_message': 'Deleted profile: %s' % name}
        location = model_url(parent, request, query=query)

        return HTTPFound(location=location)

    page_title = 'Delete Profile for %s %s' % (context.firstname,
                                               context.lastname)
    api = TemplateAPI(context, request, page_title)

    # Get a layout
    return render_template_to_response(
        'templates/delete_profile.pt',
        api=api,
        )
Exemplo n.º 7
0
def login_view(context, request):

    system_name = get_setting(context, 'system_name', 'KARL')

    page_title = '' # Per #366377, don't say what screen
    api = TemplateAPI(context, request, page_title)

    came_from = request.params.get('came_from', request.url)

    if came_from.endswith('login.html'):
        came_from = came_from[:-len('login.html')]
    elif came_from.endswith('logout.html'):
        came_from = came_from[:-len('logout.html')]

    api.status_message = status_message=request.params.get('reason', None)
    response = render_template_to_response(
        'templates/login.pt',
        api=api,
        came_from=came_from,
        nothing='',
        app_url=request.application_url,
        )
    plugins = request.environ.get('repoze.who.plugins', {})
    auth_tkt = plugins.get('auth_tkt')
    if auth_tkt is not None:
        forget_headers = auth_tkt.forget(request.environ, {})
        response.headers.update(forget_headers)
    return response
Exemplo n.º 8
0
def stats(context, request):
    """
    This appears to no longer be in use.  If we can't confirm someone is using
    it after some period of time we shoudl probably get rid of it.
    --rossi 5/5/2011
    """
    me = sys.argv[0]
    me = os.path.abspath(me)
    sandbox = os.path.dirname(os.path.dirname(me))
    outfile_path = os.path.join(sandbox, 'var/stats/', 'stats.csv')
    if not os.path.exists(outfile_path):
        raise NotFound
    f = open(outfile_path, 'r')
    lines = f.readlines()
    resp_out = ""
    line_arrays = []
    for line in lines:
        resp_out = resp_out + line + "<br/>"
        line2 = line
        myarr = line2.split(",")
        line_arrays.append(myarr)

    page_title = 'Admin Statistics'
    api = TemplateAPI(context, request, page_title)

    return render_template_to_response(
        'templates/stats.pt',
        api = api,
        stats = resp_out,
        comms = line_arrays,
        )
Exemplo n.º 9
0
def view_pw_reset(context, request):
    
    # Second step: User is visiting reset url
    if 'key' in request.params:
        key = request.params['key']
        
        if 'form.submitted' in request.params:
            try:
                # FormEncode validation
                schema = PWResetSchema()
                form_result = schema.to_python(request.params)
            except formencode.validators.Invalid, why:
                form = render_template('templates/password_reset.pt', request=request, api=TemplateAPI(request))
                # FormEncode fills template with error messages
                form = htmlfill.render(form, defaults=request.params, errors=why.error_dict)
                return Response(form)
            else:
                session = DBSession()
                user = session.query(User).filter_by(email=form_result['email']).one()
                if key == user.password_reset_key():
                    user.password = '******' % sha.new(form_result['password'].encode('utf-8')).hexdigest()
                    # Login directly
                    headers = []
                    plugins = request.environ.get('repoze.who.plugins', {})
                    identifier = plugins.get('auth_tkt')
                    if identifier:
                        identity = {'repoze.who.userid': form_result['email']}
                        headers = identifier.remember(request.environ, identity)
                    request.environ['repoze.who.userid'] = form_result['email']
                    return HTTPFound(location = model_url(context, request), headers=headers)
                else:
                    statusmessage.show(request, u"Retrieve request not valid.", u"error")
        
        return render_template_to_response('templates/password_reset.pt', request=request, api=TemplateAPI(request))
Exemplo n.º 10
0
def show_profiles_view(context, request):
    system_name = get_setting(context, "system_name", "KARL")
    page_title = "%s Profiles" % system_name
    api = TemplateAPI(context, request, page_title)

    # Grab the data for the two listings, main communities and portlet
    search = ICatalogSearch(context)

    query = dict(sort_index="title", interfaces=[IProfile], limit=5)

    titlestartswith = request.params.get("titlestartswith")
    if titlestartswith:
        query["titlestartswith"] = (titlestartswith, titlestartswith)

    num, docids, resolver = search(**query)

    profiles = []
    for docid in docids:
        model = resolver(docid)
        if model is None:
            continue
        profiles.append(model)

    mgr = ILetterManager(context)
    letter_info = mgr.get_info(request)

    return render_template_to_response("templates/profiles.pt", api=api, profiles=profiles, letters=letter_info)
Exemplo n.º 11
0
    def handle_submit(self, validated):
        context = self.context
        request = self.request
      
        name = make_unique_name(context, validated['title'])
        creator = authenticated_userid(request)

        text = safe_html(validated['description'])
        
        topic = create_content(IForumTopic,
            validated['title'],
            text,
            creator,
            )

        if text:
            topic.description = extract_description(text)
        else:
            topic.description = validated['title']    
        context[name] = topic
      
        if request.POST.get('return_to') is not None:
            location  = request.POST['return_to']
            return render_template_to_response('templates/javascript_redirect.pt', 
                    url=location)
        else:
            location = model_url(topic, request)
            return HTTPFound(location=location)
Exemplo n.º 12
0
def blog_post_view(context, request):
    result = {}
    obj = context
    dc = obj.metadata.get('dublin',{})
    result['title'] = dc.get('title', obj.__name__)
    result['description'] = dc.get('description', '')
    result['url'] = obj.__name__
    result['created'] = dc.get('created', '')
    result['creator'] = dc.get('creators', [])[0]

    pachs = request.url.split('/')
    img_url =  '/'.join(pachs[0:len(pachs)-2]) + '/img/'

    result['body'] = IHTMLRenderer(obj).html().replace('src="img/', 'src="%s' % img_url)
    tabs = render_tabs(context,request)

    settings = queryUtility(ISettings)
    idcomments_acct = str(getattr(settings, 'idcomments_acct', ''))
    return render_template_to_response('templates/blogpost.pt',
            title = dc.get('title', context.__name__),
            result = result,
            tabs = tabs,
            post_created = getDisplayTime(result['created']),
            idcomments_acct = idcomments_acct,
            )
Exemplo n.º 13
0
def syslog_view(context, request):
    syslog_path = get_setting(context, 'syslog_view')
    instances = get_setting(context, 'syslog_view_instances', ['karl'])
    filter_instance = request.params.get('instance', '_any')
    if filter_instance == '_any':
        filter_instances = instances
    else:
        filter_instances = [filter_instance]

    entries = []
    with codecs.open(syslog_path, encoding='utf-8',
                     errors='replace') as syslog:
        for line in syslog:
            line = _decode(line)
            try:
                month, day, time, host, instance, message = line.split(None, 5)
            except ValueError:
                # Ignore lines that don't fit the format
                continue

            if instance not in filter_instances:
                continue
            entries.append(line)
    entries.reverse() # Show more recent entries first

    return render_template_to_response(
        'templates/admin/syslog.pt',
        api=AdminTemplateAPI(context, request),
        menu=_menu_macro(),
        instances=instances,
        instance=filter_instance,
        entries=entries,
    )
Exemplo n.º 14
0
def viewall_referencemanual_view(context, request):

    backto = {
        'href': model_url(context.__parent__, request),
        'title': context.__parent__.title,
        }

    page_title = context.title
    api = TemplateAPI(context, request, page_title)

    # Get a layout
    layout_provider = get_layout_provider(context, request)
    layout = layout_provider('intranet')

    # provide client data for rendering current tags in the tagbox
    client_json_data = dict(
        tagbox = get_tags_client_data(context, request),
        )

    return render_template_to_response(
        'templates/viewall_referencemanual.pt',
        api=api,
        actions=[],
        head_data=convert_to_script(client_json_data),
        sections=_get_viewall(context, request, api),
        backto=backto,
        layout=layout,
        )
Exemplo n.º 15
0
def _add_existing_users(context, community, profiles, text, request, status=None):
    users = find_users(community)
    for profile in profiles:
        group_name = community.members_group_name
        user_name = profile.__name__
        users.add_group(user_name, group_name)

    # Generate HTML and text mail messages and send a mail for
    # each user added to the community.
    community_href = model_url(community, request)
    _send_aeu_emails(community, community_href, profiles, text)

    # We delivered invitation messages to each user.  Redirect to
    # Manage Members with a status message.
    n = len(profiles)
    if n == 1:
        msg = 'One member added and email sent.'
    else:
        fmt = '%s members added and emails sent.'
        msg = fmt % len(profiles)
    if status:
        msg = msg + ' ' + status    
    if request.POST.get('return_to') is not None:
        location  = request.POST['return_to']
        return render_template_to_response('templates/javascript_redirect.pt', 
                url=location)

    else:
        location = model_url(context, request, 'manage.html',
                             query={'status_message': msg})
        return HTTPFound(location=location)
Exemplo n.º 16
0
def calendar_setup_view(context, request):
    default_category_name = ICalendarCategory.getTaggedValue('default_name')
    categories = filter(lambda x: x.__name__ != default_category_name,
                        _get_calendar_categories(context))

    default_layer_name = ICalendarLayer.getTaggedValue('default_name')
    layers = filter(lambda x: x.__name__ != default_layer_name,
                    _get_calendar_layers(context))

    fielderrors = {}
    fielderrors_target = None

    page_title = 'Calendar Setup'
    api = TemplateAPI(context, request, page_title)

    return render_template_to_response(
        'templates/calendar_setup.pt',
        back_to_calendar_url=model_url(context, request),
        categories_url=model_url(context, request, 'categories.html'),
        layers_url=model_url(context, request, 'layers.html'),
        formfields=api.formfields,
        fielderrors=fielderrors,
        fielderrors_target = fielderrors_target,
        api=api,
        editable_categories = categories,
        editable_layers = layers,
        all_categories = _get_all_calendar_categories(context, request),
        colors = _COLORS,
        )
Exemplo n.º 17
0
def retail_view(context, request):

    page_title = context.title
    api = TemplateAPI(context, request, page_title)

    middle_portlet_html = _get_portlet_html(context, request,
                                            context.middle_portlets)
    right_portlet_html = _get_portlet_html(context, request,
                                           context.right_portlets)
    current_intranet = api.current_intranet
    feature = getattr(find_intranets(current_intranet), 'feature', u'')

    # Rendering this separately gives us a chance later to think about
    # some kind of caching.
    body = render_template(
        'templates/intranethome_body.pt',
        current_intranet=current_intranet,
        feature=feature,
        middle_portlet_html=middle_portlet_html,
        right_portlet_html=right_portlet_html,
        )

    return render_template_to_response(
        'templates/intranet_homepage.pt',
        api=api,
        body=body,
        )
Exemplo n.º 18
0
def report_view(context, request):
    client_json_data = {
        'grid_data': get_grid_data(context, request),
        }
    api = TemplateAPI(context, request, context.title)
    peopledir = find_peopledirectory(context)
    section = context.__parent__
    peopledir_tabs = get_tabs(peopledir, request, section.__name__)

    mgr = ILetterManager(context)
    letter_info = mgr.get_info(request)
    kw, qualifiers = get_search_qualifiers(request)

    descriptions = get_report_descriptions(context)
    print_url = model_url(context, request, 'print.html', **kw)
    csv_url = model_url(context, request, 'csv', **kw)
    pictures_url = model_url(context, request, 'picture_view.html', **kw)
    opensearch_url = model_url(context, request, 'opensearch.xml')

    return render_template_to_response(
        'templates/people_report.pt',
        api=api,
        peopledir=peopledir,
        peopledir_tabs=peopledir_tabs,
        head_data=convert_to_script(client_json_data),
        descriptions=descriptions,
        letters=letter_info,
        print_url=print_url,
        csv_url=csv_url,
        pictures_url=pictures_url,
        qualifiers=qualifiers,
        opensearch_url=opensearch_url,
        actions=get_actions(context, request),
        )
Exemplo n.º 19
0
def logs_view(context, request):
    log_paths = get_setting(context, 'logs_view')
    if len(log_paths) == 1:
        # Only one log file, just view that
        log = log_paths[0]

    else:
        # Make user pick a log file
        log = request.params.get('log', None)

        # Don't let users view arbitrary files on the filesystem
        if log not in log_paths:
            log = None

    if log is not None and os.path.exists(log):
        lines = codecs.open(log, encoding='utf-8',
                            errors='replace').readlines()
    else:
        lines = []

    return render_template_to_response(
        'templates/admin/log.pt',
        api=AdminTemplateAPI(context, request),
        menu=_menu_macro(),
        logs=log_paths,
        log=log,
        lines=lines,
    )
Exemplo n.º 20
0
def blog_post_view(context, request):
    result = {}
    obj = context
    dc = obj.metadata.get('dublin', {})
    result['title'] = dc.get('title', obj.__name__)
    result['description'] = dc.get('description', '')
    result['url'] = obj.__name__
    result['created'] = dc.get('created', '')
    result['creator'] = dc.get('creators', [])[0]

    pachs = request.url.split('/')
    img_url = '/'.join(pachs[0:len(pachs) - 2]) + '/img/'

    result['body'] = IHTMLRenderer(obj).html().replace('src="img/',
                                                       'src="%s' % img_url)
    tabs = render_tabs(context, request)

    settings = queryUtility(ISettings)
    idcomments_acct = str(getattr(settings, 'idcomments_acct', ''))
    return render_template_to_response(
        'templates/blogpost.pt',
        title=dc.get('title', context.__name__),
        result=result,
        tabs=tabs,
        post_created=getDisplayTime(result['created']),
        idcomments_acct=idcomments_acct,
    )
Exemplo n.º 21
0
def _show_calendar_view(context, request, make_presenter):
    year, month, day = _date_requested(context, request)
    focus_datetime = datetime.datetime(year, month, day)
    now_datetime   = _now()

    # make the calendar presenter for this view
    url_for = _make_calendar_presenter_url_func(context, request)
    calendar = make_presenter(focus_datetime,
                              now_datetime,
                              url_for)

    # find events and paint them on the calendar
    selected_layer = _calendar_filter(context, request)

    events = _get_catalog_events(context, request,
                                 first_moment=calendar.first_moment,
                                 last_moment=calendar.last_moment,
                                 layer_name=selected_layer)
    calendar.paint_events(events)

    layers    = _get_calendar_layers(context)
    setup_url = _calendar_setup_url(context, request)

    # render
    api = TemplateAPI(context, request, calendar.title)
    return render_template_to_response(
        calendar.template_filename,
        api=api,
        setup_url=setup_url,
        calendar=calendar,
        selected_layer = selected_layer,
        layers = layers,
        quote = quote,
        may_create = has_permission(CREATE, context, request),
    )
Exemplo n.º 22
0
def opensearch_view(context, request):
    api = TemplateAPI(context, request, 'KARL People OpenSearch')
    return render_template_to_response(
        'templates/opensearch.xml',
        api=api,
        report=context,
        url=model_url(context, request),
    )
Exemplo n.º 23
0
def not_found(context, request):
    api = request.api
    api.page_title = "Page Not Found!"

    response = render_template_to_response("templates/404.pt", api=api)
    response.status = "404 Not Found"

    return response
Exemplo n.º 24
0
def directory_view(context, request):
    """directory view

    Show a list of packages or files in a directory.    
    """
    return render_template_to_response(
        'templates/page.pt', project='pkgindex',
        items=[(name, model_path(item)) for (name, item) in context.items()])
Exemplo n.º 25
0
def reset_sent_view(context, request):
    page_title = 'Password Reset Instructions Sent'
    api = TemplateAPI(context, request, page_title)
    return render_template_to_response(
        'templates/reset_sent.pt',
        api=api,
        email=request.params.get('email'),
        )
Exemplo n.º 26
0
def image_view(context, request):
    dc = context.metadata.get('dublin', {})
    tabs = render_tabs(context,request)
    return render_template_to_response('templates/image.pt',
             title = dc.get('title', context.__name__),
             description = dc.get('description', ''),
            url=context.__name__,
            tabs = tabs,
            )
Exemplo n.º 27
0
 def __call__(self):
     key = self.request.params.get("key")
     if not key or len(key) != 40:
         api = TemplateAPI(self.context, self.request, "Password Reset URL Problem")
         return render_template_to_response("templates/reset_failed.pt", api=api)
     snippets = get_template("forms/templates/snippets.pt")
     snippets.doctype = xhtml
     blurb_macro = snippets.macros["reset_confirm_blurb"]
     api = TemplateAPI(self.context, self.request, "Reset Password")
     return {"api": api, "blurb_macro": blurb_macro}
Exemplo n.º 28
0
def image_view(context, request):
    dc = context.metadata.get('dublin', {})
    tabs = render_tabs(context, request)
    return render_template_to_response(
        'templates/image.pt',
        title=dc.get('title', context.__name__),
        description=dc.get('description', ''),
        url=context.__name__,
        tabs=tabs,
    )
Exemplo n.º 29
0
    def __call__(self):
        context, request = self.context, self.request
        api = AdminTemplateAPI(context, request, 'Admin UI: Send Email')
        admin_email = get_setting(context, 'admin_email')
        system_name = get_setting(context, 'system_name')
        profiles = find_profiles(context)
        admin = profiles[authenticated_userid(request)]
        from_emails = [
            ('self', '%s <%s>' % (admin.title, admin.email)),
            ('admin', '%s Administrator <%s>' % (system_name, admin_email)),
        ]

        if 'send_email' in request.params:
            mailer = getUtility(IMailDelivery)
            group = request.params['to_group']
            users = find_users(context)
            search = ICatalogSearch(context)
            count, docids, resolver = search(interfaces=[IProfile])
            n = 0
            for docid in docids:
                profile = resolver(docid)
                userid = profile.__name__
                if group and not users.member_of_group(userid, group):
                    continue

                message = Message()
                if request.params['from_email'] == 'self':
                    message['From'] = from_emails[0][1]
                    message_from = admin.email
                else:
                    message['From'] = from_emails[1][1]
                    message_from = admin_email
                message['To'] = '%s <%s>' % (profile.title, profile.email)
                message['Subject'] = request.params['subject']
                body = u'<html><body>%s</body></html>' % (
                    request.params['text']
                )
                message.set_payload(body.encode('UTF-8'), 'UTF-8')
                message.set_type('text/html')

                mailer.send(message_from, [profile.email], message)
                n += 1

            status_message = "Sent message to %d users." % n
            redirect_to = model_url(context, request, 'admin.html',
                                    query=dict(status_message=status_message))
            return HTTPFound(location=redirect_to)

        return render_template_to_response(
            'templates/admin/email_users.pt',
            api=api,
            menu=_menu_macro(),
            to_groups = self.to_groups,
            from_emails=from_emails,
        )
Exemplo n.º 30
0
def show_forum_view(context, request):

    page_title = context.title
    api = request.api
 
    actions = []
    if has_permission('create', context, request):
        actions.append(('Add Forum Topic', 'add_forum_topic.html'))
    if has_permission('edit', context, request):
        actions.append(('Edit', 'edit.html'))
    if has_permission('delete', context, request):
        actions.append(('Delete', 'delete.html'))

    profiles = find_profiles(context)
    appdates = getUtility(IAppDates)

    topic_batch = get_topic_batch(context, request)
    topic_entries = topic_batch['entries']

    topics = []
    for topic in topic_entries:
        D = {}
        profile = profiles.get(topic.creator)
        posted_by = getattr(profile, 'title', None)
        date = appdates(topic.created, 'longform')
        D['url'] = model_url(topic, request)
        D['title'] = topic.title
        D['posted_by'] = posted_by
        D['date'] = date
        D['number_of_comments'] = len(topic['comments'])
        topics.append(D)

    # In the intranet side, the backlinks should go to the show_forums
    # view (the default)
    forums = context.__parent__
    backto = {
        'href': model_url(forums, request),
        'title': forums.title,
        }

    # Get a layout
    layout_provider = get_layout_provider(context, request)
    layout = layout_provider('generic')

    return render_template_to_response(
        'templates/show_forum.pt',
        api = api,
        actions = actions,
        title = context.title,
        topics = topics,
        batch_info = topic_batch,
        backto=backto,
        layout=layout,
        )
Exemplo n.º 31
0
def print_view(context, request):
    dumper = text_dump(context, request)
    header = dumper.next()
    api = TemplateAPI(context, request, context.title)

    return render_template_to_response(
        'templates/people_print.pt',
        api=api,
        header=header,
        rows=dumper,
    )
Exemplo n.º 32
0
def show_forum_topic_view(context, request):
    post_url = model_url(context, request, "comments", "add_comment.html")
    page_title = context.title

    actions = []
    if has_permission('edit', context, request):
        actions.append(('Edit', 'edit.html'))
    if has_permission('delete', context, request):
        actions.append(('Delete', 'delete.html'))

    api = request.api
    api.page_title = page_title

    byline_info = getMultiAdapter((context, request), IBylineInfo)
    forum = find_interface(context, IForum)
    backto = {
        'href': model_url(forum, request),
        'title': forum.title,
        }

    # provide client data for rendering current tags in the tagbox
    client_json_data = dict(
        tagbox = get_tags_client_data(context, request),
        )

    # Get a layout
    layout_provider = get_layout_provider(context, request)
    layout = layout_provider('community')

    if support_attachments(context):
        attachments = fetch_attachments(context['attachments'], request)
    else:
        attachments = ()

    # enable imagedrawer for adding forum replies (comments)
    api.karl_client_data['text'] = dict(
            enable_imagedrawer_upload = True,
            )

    return render_template_to_response(
        'templates/show_forum_topic.pt',
        api=api,
        actions=actions,
        comments=comments_to_display(request),
        attachments=attachments,
        formfields=api.formfields,
        post_url=post_url,
        byline_info=byline_info,
        head_data=convert_to_script(client_json_data),
        backto=backto,
        layout=layout,
        comment_form={},
        )
Exemplo n.º 33
0
def view_pw_reset(context, request):

    # Second step: User is visiting reset url
    if 'key' in request.params:
        key = request.params['key']

        if 'form.submitted' in request.params:
            try:
                # FormEncode validation
                schema = PWResetSchema()
                form_result = schema.to_python(request.params)
            except formencode.validators.Invalid, why:
                form = render_template('templates/password_reset.pt',
                                       request=request,
                                       api=TemplateAPI(request))
                # FormEncode fills template with error messages
                form = htmlfill.render(form,
                                       defaults=request.params,
                                       errors=why.error_dict)
                return Response(form)
            else:
                session = DBSession()
                user = session.query(User).filter_by(
                    email=form_result['email']).one()
                if key == user.password_reset_key():
                    user.password = '******' % sha.new(
                        form_result['password'].encode('utf-8')).hexdigest()
                    # Login directly
                    headers = []
                    plugins = request.environ.get('repoze.who.plugins', {})
                    identifier = plugins.get('auth_tkt')
                    if identifier:
                        identity = {'repoze.who.userid': form_result['email']}
                        headers = identifier.remember(request.environ,
                                                      identity)
                    request.environ['repoze.who.userid'] = form_result['email']
                    return HTTPFound(location=model_url(context, request),
                                     headers=headers)
                else:
                    statusmessage.show(request, u"Retrieve request not valid.",
                                       u"error")

        return render_template_to_response('templates/password_reset.pt',
                                           request=request,
                                           api=TemplateAPI(request))
Exemplo n.º 34
0
def document_view(context, request):
    html = IHTMLRenderer(context).html()
    html_cols = render_cols(context, request)

    settings = queryUtility(ISettings)
    site_title = getattr(settings, 'site_title', '').decode('utf-8')

    dc = context.metadata.get('dublin', {})
    tabs = render_tabs(context, request)
    return render_template_to_response(
        'templates/document.pt',
        title=dc.get('title', context.__name__),
        description=dc.get('description', ''),
        site_title=site_title,
        html=html,
        tabs=tabs,
        html_cols=html_cols,
    )
Exemplo n.º 35
0
def folder_view(context, request):
    if not request.url.endswith('/'):
        response = HTTPFound(location=request.url + '/')
        return response

    defaults = ('index.html', 'index.rst')
    for name in defaults:
        try:
            index = context[name]
        except KeyError:
            continue
        return document_view(index, request)

    contents = []
    for obj in context.values(True, True):
        dc = obj.metadata.get('dublin', {})

        if hasattr(obj, '__getitem__'):
            url = obj.__name__ + '/'
        else:
            url = obj.__name__
        contents.append({
            'name': obj.__name__,
            'title': dc.get('title', ''),
            'url': url,
            'description': dc.get('description', '')
        })

    dc = context.metadata.get('dublin', {})

    tabs = render_tabs(context, request)
    html_cols = render_cols(context, request)
    return render_template_to_response(
        'templates/contents.pt',
        title=dc.get('title', context.__name__),
        description=dc.get('description', ''),
        contents=contents,
        html_cols=html_cols,
        tabs=tabs,
    )
Exemplo n.º 36
0
def render(name,
           request,
           context=None,
           status_int=None,
           view=None,
           section=None,
           **kw):
    if os.path.sep != "/":
        name = name.replace("/", os.path.sep)
    template = os.path.join("templates", name)

    response = render_template_to_response(
        template,
        request=request,
        context=context,
        view=view,
        section=section,
        layout=get_template(os.path.join("templates", "layout.pt")),
        **kw)
    if status_int is not None:
        response.status_int = status_int
    return response
Exemplo n.º 37
0
def blog_view(context, request):
    batch_start = int(request.params.get('b_start', 0))
    posts = []
    blog_subpaths = context.get_recent_file_subpaths()
    if batch_start >= len(blog_subpaths):
        return HTTPFound(location=request.url.split('?b_start')[0])

    for subpath in blog_subpaths:
        obj = context.get_obj_by_subpath(subpath)
        if obj != None:
            url = '/'.join(obj.vpath.split('/')[2:])
            dc = obj.metadata.get('dublin', {})
            raw_html = IHTMLRenderer(obj).html().decode('utf-8')
            converted_html = raw_html.replace('src="img/',\
                         'src="%s/%s/../img/' %(request.application_url, url))
            posts.append({
                'title': dc.get('title', obj.__name__),
                'description': dc.get('description', ''),
                'url': '/'.join(url.split('/')[1:]),
                'created': getDisplayTime(dc.get('created', '')),
                'creator': dc.get('creators', [])[0],
                'body': converted_html[:500] + ' ......',
            })

    posts = Batch(posts, start=batch_start, size=5)

    dc = context.metadata.get('dublin', {})
    tabs = render_tabs(context, request)
    html_cols = render_cols(context, request)
    batch = render_batch(context, request)
    return render_template_to_response(
        'templates/blog.pt',
        title=dc.get('title', context.__name__),
        result=posts,
        tabs=tabs,
        batch=batch,
        html_cols=html_cols,
    )
Exemplo n.º 38
0
def rss_view(context, request):
    return render_template_to_response(
        'templates/rss.pt',
        request=request,
    )
Exemplo n.º 39
0
def my_view(context, request):
    return render_template_to_response('templates/mytemplate.pt',
                                       project='myproject')
Exemplo n.º 40
0
def view_login(request):
    if 'failed' in request.params:
        failed = True
    else:
        failed = False
    return render_template_to_response('templates/login.pt', request=request, login_failed=failed)
Exemplo n.º 41
0
    if 'form.submitted' in request.params:
        try:
            # FormEncode validation
            schema = PWResetRequestSchema()
            form_result = schema.to_python(request.params)
        except formencode.validators.Invalid, why:
            form = render_template(
                'templates/password_retrieve.pt',
                request=request,
                api=TemplateAPI(request),
            )
            # FormEncode fills template with error messages
            form = htmlfill.render(form,
                                   defaults=request.params,
                                   errors=why.error_dict)
            return Response(form)
        else:
            session = DBSession()
            user = session.query(User).filter_by(
                email=form_result['email']).one()
            reset_url = model_url(get_root(request), request,
                                  'retrieve_password.html')
            user.send_password_reset(reset_url)

            statusmessage.show(request, u'Password retrieval e-mail sent.')
            return HTTPFound(location=model_url(context, request))

    return render_template_to_response('templates/password_retrieve.pt',
                                       request=request,
                                       api=TemplateAPI(request))
Exemplo n.º 42
0
def contact_view(context, request):
    params = request.params
    reply_str = ''
    sender_fullname = params.get('sender_fullname', '')
    sender_from_address = params.get('sender_from_address', '')
    company_name = params.get('company_name', '')
    company_website = params.get('company_website', '')
    company_tel = params.get('company_tel', '')
    subject = params.get('subject', '')
    message = params.get('message', '')

    #    if sender_from_address!='' and company_name!=''\
    #         and company_tel!='' and subject!='' and message!='':
    if sender_from_address != '' and subject != '' and message != '':

        body = """%s 消息回馈:
回馈人信息:
NAME: %s
EMAIL: %s
COMPANY NAME: %s
COMPANY WEBSITE: %s
COMPANY TEL: %s

SUBJECT: %s
CONTENT: 
%s
                 """ % (request.application_url, sender_fullname, \
                        sender_from_address, company_name, company_website, \
                        company_tel, subject, message)

        settings = queryUtility(ISettings)
        smtp_host = getattr(settings, 'smtp_host', '')
        from_addr = getattr(settings, 'email_from', '')
        user_name = getattr(settings, 'user_name', '')
        user_passwd = getattr(settings, 'user_passwd', '')
        to_addr = getattr(settings, 'email_to', '')
        """邮件参数
        smtp_host = smtp.***.com
        email_from = usr1@***.com
        email_to = usr2@***.com
        user_name = 'usr1'
        user_passwd = '123*'
        """
        try:
            """
            msg = MIMEText.MIMEText(body,_subtype='plain',_charset='utf-8')
            msg['subject'] = Header.Header(subject,'utf-8')
            msg['from'] = from_addr  
            msg['to'] = to_addr  
            """
            msg = 'to: %s\r\nFrom: %s\r\nSubject: %s \r\n\r\n %s\r\n' \
                                 %(to_addr, from_addr, subject, body)
            server = smtplib.SMTP(smtp_host, 25)
            server.ehlo()
            server.starttls()
            server.ehlo()
            server.login(user_name, user_passwd)
            server.sendmail(from_addr, to_addr, msg)
            server.close()

            reply_str = '信息已经发出,谢谢。'
            sender_fullname = ''
            sender_from_address = ''
            company_name = ''
            company_website = ''
            company_tel = ''
            subject = ''
            message = ''
        except:
            reply_str = '邮件收发设置信息错误。请稍后重试,或通过其他方式反馈。'
    else:
        reply_str = '必填项信息不足,请补全。'

    return render_template_to_response(
        'templates/contact.pt',
        reply_str=reply_str.decode('utf-8'),
        sender_fullname=sender_fullname.decode('utf-8'),
        sender_from_address=sender_from_address.decode('utf-8'),
        company_name=company_name.decode('utf-8'),
        company_website=company_website.decode('utf-8'),
        company_tel=company_tel.decode('utf-8'),
        subject=subject.decode('utf-8'),
        message=message.decode('utf-8'),
    )