Customise Login
Overview
The standard FarCry login screen can be customised in a variety of ways.
Image, Application Name and Tagline can be modified
the login template can be replaced
Config Changes
Changing the properties on the standard FarCry login is easy. Just login into the webtop and go to ADMIN > Configuration > General. You can change the application name and tagline here. Also you can change the logo-image by adding an absolute URL or an address relative to the webroot of your application.
Substitute Login Template
You can completely replace the login template by adding a template of your own to ./yourproject/customadmin/login/login.cfm
./projects/myproject/customadmin/login/login.cfm
<cfsetting enablecfoutputonly="Yes">
<cfprocessingDirective pageencoding="utf-8">
<cfimport taglib="/farcry/fourq/tags" prefix="q4">
<cfoutput>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>#application.config.general.siteTitle# :: #application.applicationname#</title>
<!--- check for custom Admin CSS in project codebase --->
<cfif fileExists("#application.path.project#/www/css/customadmin/admin.css")>
<cfoutput>
<link href="#application.url.webroot#/css/customadmin/admin.css" rel="stylesheet" type="text/css" />
</cfoutput>
<cfelse>
<cfoutput>
<link href="#application.url.farcry#/css/main.css" rel="stylesheet" type="text/css" />
</cfoutput>
</cfif>
<script type="text/javascript" src="#application.url.farcry#/js/fade.js"></script>
</head>
<body id="sec-login" onload="ol()">
</cfoutput>
<cfset returnUrl = URLDecode(url.returnUrl)>
<cfset returnUrl = replace( returnUrl, "logout=1", "" )>
<cfset returnUrl = replace( returnUrl, "&&", "" )>
<cfparam name="error" default="">
<cfif isdefined("url.error") and url.error eq "draft">
<!--- TODO: i18n --->
<cfset error = "This page is in draft. Please login with your details below">
</cfif>
<cfset currentNumberLoginAttempts = 0>
<cfif isDefined("form.Normal")>
<cfset bHasLoggedIn = request.dmSec.oAuthentication.login(userlogin=form.userlogin,userpassword=form.password,baudit=1)>
<cfif bHasLoggedIn>
<cfset o_userProfile = createObject("component", application.types.dmProfile.typePath)>
<cfset session.dmProfile = o_userProfile.getProfile(userName=form.userlogin)>
<cfelse>
<!--- check the audit log to see if they have try to login before and failed --->
<cfset dateTolerance = DateAdd("n","-#application.config.general.loginAttemptsTimeOut#",Now())>
<cfquery name="qLogAudit" datasource="#application.dsn#">
SELECT count(a.datetimeStamp) as numberOfLogin, max(a.datetimeStamp) as lastlogindate, a.username
FROM #application.dbowner#fqAudit a
WHERE a.auditType = 'dmSec.loginfailed'
AND a.datetimeStamp >= <cfqueryparam value="#createODBCDateTime(dateTolerance)#" cfsqltype="cf_sql_timestamp">
GROUP BY a.username
</cfquery>
<cfif qLogAudit.recordcount>
<cfset currentNumberLoginAttempts = qLogAudit.numberOfLogin>
</cfif>
<cfset error = "<h5 class='fade-FFDADA' id='errortext'><span style='color:##c00'><b>Login failed:</b></span> Invalid User Login</h5>">
</cfif>
</cfif>
<cfset oAuthentication = request.dmSec.oAuthentication>
<cfset stLoggedIn = oAuthentication.getUserAuthenticationData()>
<cfset bLoggedin = stLoggedIn.bloggedIn>
<cfif bLoggedIn>
<!--- dmSecMX automatically sets up session.dmSec.authentication structure --->
<!--- check for ADMIN permissions --->
<cfset oAuthorisation = request.dmSec.oAuthorisation>
<cfset iAdminState = oAuthorisation.checkPermission(permissionName="Admin",reference="PolicyGroup")>
<cfif iAdminState eq 1>
<!--- turn on admin permissions --->
<cfset request.mode.bAdmin = 1>
<cfset session.dmSec.authentication.bAdmin = 1>
<!--- i18n: admin bits --->
<cfif NOT structKeyExists(application.adminBundle, session.dmProfile.locale)>
<!--- <cfset application.adminBundle[session.dmProfile.locale]=application.rB.getResourceBundle("farcry.admin",session.dmProfile.locale,true)> --->
<!--- check if resource exist for this locale if not default to en_AU --->
<cfif StructIsEmpty(application.rB.getResourceBundle("#application.path.core#/packages/resources/admin.properties",session.dmProfile.locale,false))>
<cfset application.adminBundle[session.dmProfile.locale]=application.rB.getResourceBundle("#application.path.core#/packages/resources/admin.properties",session.dmProfile.locale,false)>
<cfelse>
<cfset application.adminBundle[session.dmProfile.locale]=application.rB.getResourceBundle("#application.path.core#/packages/resources/admin.properties","en_AU",false)>
</cfif>
</cfif>
<!--- i18n: find out this locale's writing system direction using our special psychic powers --->
<cfif application.i18nUtils.isBIDI(session.dmProfile.locale)>
<cfset session.writingDir="rtl">
<cfelse>
<cfset session.writingDir="ltr">
</cfif>
<!--- i18n: final bit, grab user language from locale, tarts up html tag --->
<cfset session.userLanguage=left(session.dmProfile.locale,2)>
</cfif>
<!--- relocate to original location --->
<cflocation url="#returnUrl#" addtoken="No">
<cfabort>
</cfif>
<!--- set message [error], if user has logged out --->
<cfif not len(error) AND returnUrl contains "logout=1">
<cfset error="<span style='color:##008C0D'><b>OK:</b></span> You have successfully logged out.">
</cfif>
<cfset bShowLogin = "true">
<cfif currentNumberLoginAttempts GTE application.config.general.loginAttemptsAllowed>
<cfset bShowLogin = "false">
<cfset error = "<h5 class='fade-FFDADA' id='errortext'><span style='color:##c00'><b>Login failed:</b></span> Invalid User Login<br />You have exceeded the ammount of login attempts allowed #application.config.general.loginAttemptsAllowed#. Please retry later.</h5>">
</cfif>
<cfoutput>
<script type="text/javascript">
function ol()
{
el=document.getElementById('userLogin');
if ( el.value.length==0 ) el.focus();
}
</script>
<form action="#cgi.script_name#?#cgi.query_string#" method="post">
<div id="login">
<!--- default logo gif --->
<cfset siteLogo = "images/logo_placeholder.gif">
<!--- if there is a site logo, use it instead of the default placeholder --->
<cfif structKeyExists(application.config.general,'siteLogoPath')>
<cfif application.config.general.siteLogoPath NEQ "">
<cfset siteLogo = application.config.general.siteLogoPath>
</cfif>
</cfif>
<h1><a href="#application.url.webroot#/"><img src="#siteLogo#" alt="#application.config.general.siteTitle#" /></a>#application.config.general.siteTitle#<span>#application.config.general.siteTagLine#</span></h1>
<fieldset><cfif bShowLogin EQ "true">
<label for="userLogin">
Username
<input type="text" name="userLogin" id="userLogin" tabindex="1" />
</label>
<label for="password">
Password
<input type="password" name="password" id="password" tabindex="2" />
</label>
<input type="Submit" name="Normal" value="Log In" class="f-submit" tabindex="3" /></cfif>
#error#
</fieldset>
<h3><img src="images/powered_by_farcry_watermark.gif" alt="Powered by FarCry" />Tell it to someone who cares</h3>
</div>
</form>
</body>
</html>
</cfoutput>
<cfsetting enablecfoutputonly="No">