Author: jaz
Date: Mon Jan 5 11:49:05 2009
New Revision: 731663
URL: http://svn.apache.org/viewvc?rev=731663&view=rev
Log:
tracking codes now support -1 lifetime (just for the session), which will
create a session cookie, instead of a persistent cookie. Remove setVersion(1)
when setting cookies since this is "experimental" and 1) is not used for other
cookies in OFbiz 2) does not work with Safari
Added new TrackingCodeType 'ACCESS' to represent an access code.
Added new preprocessor event to restrict access to an application to users with
a valid ACCESS tracking code.
Modified:
ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml
ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java
Modified: ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml?rev=731663&r1=731662&r2=731663&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml (original)
+++ ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml Mon Jan 5
11:49:05 2009
@@ -50,7 +50,8 @@
<SegmentGroupType segmentGroupTypeId="MARKET_SEGMENT" description="Market
Segment"/>
<SegmentGroupType segmentGroupTypeId="SALES_SEGMENT" description="Sales
Segment"/>
-
+
+ <TrackingCodeType trackingCodeTypeId="ACCESS" description="Access Code"/>
<TrackingCodeType trackingCodeTypeId="INTERNAL" description="Internal"/>
<TrackingCodeType trackingCodeTypeId="EXTERNAL" description="External"/>
<TrackingCodeType trackingCodeTypeId="PARTNER_MGD" description="Partner
Managed"/>
Modified:
ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java?rev=731663&r1=731662&r2=731663&view=diff
==============================================================================
---
ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java
(original)
+++
ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java
Mon Jan 5 11:49:05 2009
@@ -225,22 +225,20 @@
// if trackingCode.trackableLifetime not null and is > 0 write a
trackable cookie with name in the form: TKCDT_{trackingCode.trackingCodeTypeId}
and timeout will be trackingCode.trackableLifetime
Long trackableLifetime = trackingCode.getLong("trackableLifetime");
- if (trackableLifetime != null && trackableLifetime.longValue() > 0) {
+ if (trackableLifetime != null && (trackableLifetime.longValue() > 0 ||
trackableLifetime.longValue() == -1)) {
Cookie trackableCookie = new Cookie("TKCDT_" +
trackingCode.getString("trackingCodeTypeId"),
trackingCode.getString("trackingCodeId"));
- trackableCookie.setMaxAge(trackableLifetime.intValue());
+ if (trackableLifetime.longValue() > 0)
trackableCookie.setMaxAge(trackableLifetime.intValue());
trackableCookie.setPath("/");
- trackableCookie.setVersion(1);
if (cookieDomain.length() > 0)
trackableCookie.setDomain(cookieDomain);
response.addCookie(trackableCookie);
}
// if trackingCode.billableLifetime not null and is > 0 write a
billable cookie with name in the form: TKCDB_{trackingCode.trackingCodeTypeId}
and timeout will be trackingCode.billableLifetime
Long billableLifetime = trackingCode.getLong("billableLifetime");
- if (billableLifetime != null && billableLifetime.longValue() > 0) {
+ if (billableLifetime != null && (billableLifetime.longValue() > 0 ||
billableLifetime.longValue() == -1)) {
Cookie billableCookie = new Cookie("TKCDB_" +
trackingCode.getString("trackingCodeTypeId"),
trackingCode.getString("trackingCodeId"));
- billableCookie.setMaxAge(billableLifetime.intValue());
+ if (billableLifetime.longValue() > 0)
billableCookie.setMaxAge(billableLifetime.intValue());
billableCookie.setPath("/");
- billableCookie.setVersion(1);
if (cookieDomain.length() > 0)
billableCookie.setDomain(cookieDomain);
response.addCookie(billableCookie);
}
@@ -367,6 +365,62 @@
return "success";
}
+
+ public static String checkAccessTrackingCode(HttpServletRequest request,
HttpServletResponse response) {
+ GenericDelegator delegator = (GenericDelegator)
request.getAttribute("delegator");
+ java.sql.Timestamp nowStamp = UtilDateTime.nowTimestamp();
+
+ String trackingCodeId = request.getParameter("autoTrackingCode");
+ if (UtilValidate.isEmpty(trackingCodeId)) trackingCodeId =
request.getParameter("atc");
+ if (UtilValidate.isEmpty(trackingCodeId)) {
+ Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (Cookie cookie : cookies) {
+ if ("TKCDT_ACCESS".equals(cookie.getName())) {
+ trackingCodeId = cookie.getValue();
+ }
+ }
+ }
+ }
+
+ if (UtilValidate.isNotEmpty(trackingCodeId)) {
+ // find the tracking code object
+ GenericValue trackingCode = null;
+ try {
+ trackingCode = delegator.findByPrimaryKeyCache("TrackingCode",
UtilMisc.toMap("trackingCodeId", trackingCodeId));
+ } catch (GenericEntityException e) {
+ Debug.logError(e, "Error looking up TrackingCode with
trackingCodeId [" + trackingCodeId + "], ignoring this trackingCodeId", module);
+ }
+ if (trackingCode != null) {
+ // verify the tracking code type
+ if
("ACCESS".equals(trackingCode.getString("trackingCodeTypeId"))) {
+ // verify the effective date
+ if (trackingCode.get("fromDate") != null &&
nowStamp.after(trackingCode.getTimestamp("fromDate"))) {
+ if (trackingCode.get("thruDate") != null &&
nowStamp.before(trackingCode.getTimestamp("thruDate"))) {
+ // tracking code is valid
+ return "success";
+ } else {
+ if (Debug.infoOn())
+ Debug.logInfo("The TrackingCode with ID [" +
trackingCodeId + "] has expired, ignoring this trackingCodeId", module);
+ request.setAttribute("_ERROR_MESSAGE_", "Access
code [" + trackingCodeId + "], is not valid.");
+ }
+ } else {
+ if (Debug.infoOn())
+ Debug.logInfo("The TrackingCode with ID [" +
trackingCodeId + "] has not yet gone into effect, ignoring this
trackingCodeId", module);
+ request.setAttribute("_ERROR_MESSAGE_", "Access code
[" + trackingCodeId + "], is not valid.");
+ }
+ } else {
+ Debug.logWarning("Tracking code found [" + trackingCodeId
+ "] but was not of the type ACCESS; access denied", module);
+ request.setAttribute("_ERROR_MESSAGE_", "Access code [" +
trackingCodeId + "] not found.");
+ }
+ } else {
+ request.setAttribute("_ERROR_MESSAGE_", "Access code [" +
trackingCodeId + "] not found.");
+ }
+ }
+
+ // no tracking code or tracking code invalid; redirect to the access
page (i.e. request named 'protect')
+ return ":_protect_:";
+ }
/** Makes a list of TrackingCodeOrder entities to be attached to the
current order; called by the createOrder event; the values in the returned List
will not have the orderId set */
public static List makeTrackingCodeOrders(HttpServletRequest request) {