Proxy server configuration and URL customizations

In some situations it is required, or desirable, to modify the URL for an online resource. The most common situation where this occurs is when an institution offers a "proxy server" (aka "reverse proxies") which is used to proxy requests for e-resources in order that a user can access the e-resource with minimal authentication/authorisation issues (e.g. if the proxy server is granted IP authorisation to the resource, the user can access the resource from any location using the proxy server). For example a resource might have the URL: http://example.org. The proxied link for the same resource could be http://proxy.server.url/?url=http://example.org 

Another common situation where modification to a URL is required, is where the e-resource provider requires an institutional code to be added to a URL before it will respond to any requests to the URL. For example an e-resource might have the URL: http://example.org/?db=1234, but in order to successfully link to the resource using the subscription for a specific institution "ABCD" this URL would need to be modified to be: http://example.org/ABCD/?db=1234. Major database vendors such as EBSCO and Gale support institution specific URLs of this type.

In order to support such modified URLs, the Agreements app offers a system of templating which can be used to both:

  • create Proxy server configurations, which modify all URLs across the system and;
  • create platform level URL customizations, which modify all the URLs on a specific platform

Proxy server configuration is done via Settings → Local KB Admin → Proxy server settings. Proxy server configurations will apply to all URLs in the internal Knowledgebase by default, but specific platforms can be excluded from the Proxy server configuration, or from the platform record (accessed via the Agreements app). You can create multiple proxy server configurations if there are multiple proxy servers used (e.g. where a separate proxy server is used for resources licensed to Alumni).

Platform level URL customizations can be added to the platform record (accessed via the Agreements app). Each platform can have a single URL customization. 

URL customizations and proxy server configurations generate additional URLs to the URLs already stored in the system for the e-resource. If there are proxy server configurations and platform level URL customizations set, any URLs generated by a platform URL customization will also have the proxy server configuration applied (but not the reverse - the platform URL customization is never applied after the proxy configuration). So for example if a URL such as http://example.org/?db=1234 was modified to http://example.org/ABCD/?db=1234 by a platform URL customization, a proxy server configuration would produce the proxied version of the URL such as http://proxy.server.url/?http://example.org/ABCD/?db=1234. In this case four URLs would be available for the e-resource in total:

Original URL: http://example.org/?db=1234

Original URL proxied: http://proxy.server.url/?http://example.org/?db=1234

Customized URL: http://example.org/ABCD/?db=1234

Customized URL proxied: http://proxy.server.url/?http://example.org/ABCD/?db=1234

If there are multiple proxy server configurations, each additional configuration will result in an additional version of the Original and Customized URL modified for that proxy

Writing proxy server configurations and URL customizers

The templating system for modifying URLs works in the same way for both proxy server configurations and URL customizers. The templates can be used to do one or more of the following as required:

  • Add text before the original URL
  • Add text after the original URL
  • Encode text with URL (aka 'percent') encoding
  • Remove any protocol prefix from a URL
  • Replace or remove text from the original URL
  • Add a "local platform code" to a URL as defined on the platform record

Any text that is to be added around the original URL (such as a proxy server prefix or suffix) can just be typed as plain text, while any variables or helpers (which are functions which can be used for more complex modifications) need to be inside double curly brackets {{ }}. 

The variables supported by the templates currently are `inputURL` and `platformLocalCode`:

  • The `inputURL` variable represents the URL to which the modifications specified in the template will apply and would usually appear in all templates
  • The `platformLocalCode` variable is the  (if any) for the platform where the resource is accessed. The local platform code is defined on the platform record in the Agreements application and would typically be used to store information such as a database code that needs to be added into a URL

The helpers supported by the templates currently are  `urlEncode`, `insertAfter`, `insertBefore`, `removeProtocol` and `replace` and are explained in detail below.

A simple addition of a prefix for a proxy server would be achieved using the following customization code:

http://url.prefix.com/{{ inputUrl }}

and a suffix addition would be achieved with

{{ inputUrl }}?some-suffix-text

and adding both a prefix and suffix is 

http://url.prefix.com/{{ inputUrl }}?some-suffix-text

Helper functions can be used inside the curly brackets. These work as follows:

urlEncode

{{ urlEncode inputUrl }}

Explanation: This helper encodes a URL (or other string) using percent encoding.

Example

Original URL: http://example.org

Template: http://proxy.url/?url={{ urlEncode inputUrl }}

Modified URL: http://proxy.url/?url=http%3A%2F%2Fexample.org

insertAfter

{{ insertAfter inputUrl "string-to-find" "string-to-insert" }}

Explanation: This helper inserts a string ("string-to-insert") after the first occurrence of a search string ("string-to-find") in the  URL

Example

Original URL: http://example.org

Template: {{ insertAfter inputUrl  "&authentication=ip" }}

Modified URL: http://example.org&authentication=ip

insertBefore

{{ insertBefore inputUrl "string-to-find" "string-to-insert" }}

Explanation: This helper inserts a string ("string-to-insert") before the first occurrence of a search string ("string-to-find") in the  URL

Example

Original URL: http://example.org/index/

Local platform code: ABCD

Template: {{ insertBefore inputUrl "/index" platformLocalCode }}

Modified URL: http://example.org/ABCD/index/

removeProtocol

{{ removeProtocol inputUrl }}

Explanation: This helper removes either "http://" or "https://" from the start of a URL

Example

Original URL: http://example.org

Template: https://proxy.url/?url={{ removeProtocol inputUrl }}

Modified URL: https://proxy.url/?url=example.org

replace

{{ replace inputUrl "string-to-find" "replacement-string" }}

Explanation: This helper replaces each occurrence of a specified string ("string-to-find") in the URL with a replacement string ("replacement-string")

Example

Original URL: http://example.org

Template: {{ replace inputUrl "org" "com" }}

Modified URL: http://example.com

Note that "replace" will replace all occurrences of the "string-to-find" that are found in the URL

Controlling the order in which changes are made

To control the order in which changes are made, parentheses can be used inside the curly brackets:

Example

Original URL: http://example.org/ebook/

Template: https://proxy.url/?url={{ ( replace ( removeProtocol inputUrl ) "/ebook/" "" ) }}

Modified URL: https://proxy.url/?url=example.org

In this example the "removeProtocol" happens before the "replace"

Example proxy server configuration templates

These examples are provided for guidance only.

EZProxy

Web page: https://help.oclc.org/Library_Management/EZproxy

Example template:

http://ezproxy.abclib.org:2048/login?url={{ inputUrl }}

WAM

Web page: https://csdirect.iii.com/tutorials/wam/index.html

Example template:

http://{{ insertBefore ( removeProtocol inputUrl ) "/" ".web.library.edu" }}

OpenAthens Redirector URLs

Web page: https://docs.openathens.net/display/public/MD/Redirector+link+generator

Example template:

https://go.openathens.net/redirector/athensdemo.net?url={{ encodeUrl inputUrl }}