1)
Customizations that do not require any rewrite policies/actions (“policies”) or
source code modifications (“modifications”),
2)
Customizations that can be accomplished using either policies
or modification, and
3)
Customizations that will most probably need modification of the source code.
In Part
1, we focused on the Default, Green Bubble,
and X1 (the "original") themes. In part 2, we
will discuss the newest theme - Receiver for Web UI (RfWebUI), which uses a
completely new mechanism.
While
the logon page looks like the X1 theme:
... if
you will be using the RfWebUI theme, you can forget pretty much everything
you've learned about customizing the NetScaler logon page.
Let's
begin with the location of the logon page. When using the original themes, the
logon page (index.html) was served from the /netscaler/ns_gui/vpn/ directory.
With the RfWebUI theme, the file is now served from /var/netscaler/logon/LogonPoint/.
The good news is that since the page is now in the /var partition,
any modifications to the page (or copies of the logon page) are automatically
persisted across a reboot. No longer do you need to add lines to rc.netscaler to
copy modified files into the flash partition.
The next
major change is how you modify text. The portal wizard allows you to easily
make changes to commonly updated text. Let's say you wanted to change the
labels on the logon screen. After clicking OK at the bottom of
the wizard, you will then be prompted for the language you wish to use:
After
clicking OK, you will see the pages you can modify on the
right-hand side of the page.
Click Login
Page. You are presented with the default labels for the page:
Let's
modify them as follows:
Click Ok.
Finally,
click Done. Now, let's refresh the page (you may need to clear your
cache).
If
you've had experience customizing the original NetScaler themes, at this point
you are probably thinking "Tell me something that I don't already know ...
this is no different than modifying any of the other themes"! Not quite
... The portal wizard functions differently depending on which theme has been
chosen. For the original themes, the portal wizard would modify the values in
the appropriate XML file in the resources directory (e.g. /var/netscaler/logon/themes/<theme>/resources/en.xml).
The keys affected are located under the Partition ID of Logon. Now,
what if you wished to modify the text of the logon button above, which you
can't do from the portal wizard? No problem. In the same file, as few lines
down, we find:
<Property id="Log_On" property="value">Log
On</Property>
Simply
change it to:
<Property id="Log_On" property="value">Click
to log on</Property>
... and
then save the file.
Try
that with a theme based on RfWebUI and you will find that it doesn't work. In
fact, if you look at the en.xml file in the resources directory of a theme
based on RfWebUI, you will notice that the portal wizard did *not* modify ANY
of the keys in that file. What gives??
For
RfWebUI-based themes, those text changes are written
to /var/netscaler/logon/themes/<theme>/strings.<language
code>.json:
The
portal wizard writes all the values on a single line. I would suggest placing
each override on a separate line for readability and maintainability. Also note
that this "key":"value" format differs
from the XML format of the other themes.
In
order to change other text elements on the page, you will need to get the key to
be placed in the override file. The keys may be found in the file /var/netscaler/logon/LogonPoint/receiver/js/localization/<language
code>/ctxs.strings.js. The key for the logon button is nsg_LogOnbutton.
Let's add an override for it in the above file:
Then
save the file, and refresh the page. In addition to clearing the cache on your
PC, it may take 2-3 minutes for the cache to be cleared on the NetScaler.
Now,
let's try to add our own custom text fields as we did with the X1 theme in part
1.
Here we
come to another major difference. In the original themes, we would:
- Add
a <div> with
a unique id (either via a rewrite action/policy or a modified
gateway_login_form_view.js file),
- Add a
string with the <div>'s
id to the XML file in the resources directory, and
finally
- Add
a CSS selector with the <div>'s id to the custom.css file in
the selected theme.
Note
that everything is keyed off the id of the <div>.
With
RfWebUI-based themes, text is keyed off of class names, and the
class name must begin with _ctxstxt_. So, to add the
"authorized users only" warning (see Part 1), we
make a copy of the index.html file (let's call it custom.html), and
add our custom <div>:
We then
add an entry with the text into strings.en.json:
We also
need to add style information, but instead of adding it to custom.css,
for RfWebUI-based themes, it must go into theme.css. Here you can
either use the <div>'s
id (if specified), or the class name, which is required (include the _ctxstxt_ prefix).
We can
test by browsing to our custom.html file.
Let's
not forget our footer ... add another custom <div>:
Then
add the text:
... and
then the CSS:
Browsing
to our custom page:
Our
final step is to create a responder policy and bind it to our AG vServer. This
will automatically invoke our custom page when we browse to the AG vServer
FQDN:
> add responder action
"Logon Page Redirect Action" redirect
"\"custom.html\"" -responseStatusCode 302
> add responder policy "Logon Page Redirect Policy" "HTTP.REQ.URL.PATH_AND_QUERY.CONTAINS(\"LogonPoint/index.html\")" "Logon Page Redirect Action"
> bind vpn vserver "AG vServer" -policy "Logon Page Redirect Policy" -priority 100 -gotoPriorityExpression END -type REQUEST
> save config
> add responder policy "Logon Page Redirect Policy" "HTTP.REQ.URL.PATH_AND_QUERY.CONTAINS(\"LogonPoint/index.html\")" "Logon Page Redirect Action"
> bind vpn vserver "AG vServer" -policy "Logon Page Redirect Policy" -priority 100 -gotoPriorityExpression END -type REQUEST
> save config
To
remove the customizations, simply unbind the responder policy.
Here’s
a handy cheat-sheet summarizing all of the above:
|
Original Themes
(Default, Green Bubble, X1)
|
Receiver for Web UI
(RfWebUI) Theme
|
Logon page directory
|
/netscaler/ns_gui/vpn/
|
/var/netscaler/logon/LogonPoint/
|
Updates to text strings
|
/var/netscaler/logon/themes/<theme>/
resources/<language code>.xml
|
/var/netscaler/logon/themes/
<theme>/strings/<language
code>.json
|
String format
|
<String id=”key”>Value</String> OR
<Property id="key"
property="property">Value</Property>
|
“key” : “value”
|
Custom text based on
|
<div> ID
|
class name (existing
keys are in /var/netscaler/
logon/LogonPoint/receiver/js/localization/
<language code>/ctxs.strings.js
|
CSS file
|
custom.css
|
theme.css
|
Thanks
to the NetScaler development team for their help, and especially Bidyut H.
Sam
Jacobs is the Director of Technology Development at IPM, the longest standing
Citrix Platinum Partner on the East Coast. With more than 25 years of IT
consulting, Sam is a NetScaler customizations and integrations industry expert.
He holds Microsoft MCSD, Citrix CCP-M and CCP-N certifications, and is the
editor of TechDevCorner.com, a
technical resource blog for IT professionals. He is one of the top Citrix
support Forum contributors, and has earned industry praise for the tools he has
developed to make NetScaler, StoreFront and Web Interface easier to manage for
administrators and more intuitive for end users. Sam became a Citrix Technology
Professional (CTP) in 2015. Sam can be reached at: sam.jacobs@ipm.com or
on Twitter at: @WIGuru.
No comments:
Post a Comment