rp_resources_filter (private)

 rp_resources_filter why

Defined in packages/acs-tcl/tcl/request-processor-procs.tcl

This filter runs on all URLs of the form /resources/*. We just ns_returnfile the file, no permissions are checked, the ad_conn structure is not initialized, etc in order to maximize throughput for resource files. There are three mapping possibilities: /resources/package-key/* maps to root/packages/package-key/www/resources/*. If that fails, we map to root/packages/acs-subsite/www/resources/* If that fails, we map to root/www/resources/* If the file doesn't exist we'll log an error and return filter_ok, which will allow packages mounted at "/resources" in a legacy site to work correctly. This is a horrible kludge which may disappear after discussion with the gang.

Parameters:
why (required)
Author:
Don Baccus <dhogaza@pacifier.com>

Partial Call Graph (max 5 caller/called nodes):
%3 acs_package_root_dir acs_package_root_dir (public) ad_conn ad_conn (public) ad_file ad_file (public) rp_serve_resource_file rp_serve_resource_file (private) rp_resources_filter rp_resources_filter rp_resources_filter->acs_package_root_dir rp_resources_filter->ad_conn rp_resources_filter->ad_file rp_resources_filter->rp_serve_resource_file

Testcases:
No testcase defined.
Source code:
    if {[namespace which ::valgrind] ne ""} {
        ::valgrind start
    }

    ad_conn -set untrusted_user_id 0

    set urlv [ns_conn urlv]
    set package_key [lindex $urlv 1]
    set resource [join [lrange $urlv 2 end] /]

    # This would map resources to their alternative in the theme
    # package. Works, but needs some extra thought regarding
    # performance etc. and is therefore commented out.
    # set path "packages/$package_key/www/resources/$resource"
    # set themed_path [template::resource_path -type templates -style $path]
    # if { [ad_file isfile $themed_path] } {
    #     return [rp_serve_resource_file $themed_path]
    # }

    set path "[acs_package_root_dir $package_key]/www/resources/$resource"
    if { [ad_file isfile $path] } {
        return [rp_serve_resource_file $path]
    }

    set path $::acs::rootdir/www/[ns_conn url]
    if { [ad_file isfile $path] } {
        return [rp_serve_resource_file $path]
    }

    set path [acs_package_root_dir acs-subsite]/www/[ns_conn url]
    if { [ad_file isfile $path] } {
        return [rp_serve_resource_file $path]
    }

    ns_log Warning "rp_sources_filter: file \"$path\" does not exists trying to serve as a normal request"
    return filter_ok
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: