blob: 0ccdcc300acaff02dfc8a22435d20005382c3ef7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
// We use this method to generate unique sessions IDs
function generateGuid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
// -- COOKIE HELPER METHODS ---
function createCookie(name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
} else {
expires = "";
}
document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + expires + "; path=/";
}
function readCookie(name) {
var nameEQ = encodeURIComponent(name) + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));
}
return null;
}
function eraseCookie(name) {
createCookie(name, "", -1);
}
// -- BOOTSTRAP HELPER METHODS ---
bootstrapAlert = {};
bootstrapAlert.success = function (message) {
$('#alert_placeholder').html('<div class="alert alert-success"><a class="close" data-dismiss="alert">×</a><span>' + message + '</span></div>')
};
bootstrapAlert.danger = function (message) {
$('#alert_placeholder').html('<div class="alert alert-danger"><a class="close" data-dismiss="alert">×</a><span>' + message + '</span></div>')
};
$(document).ready(function () {
// first we check if we have an existing session ID cookie, if not we generate a new session identifier and
// store it in the cookie.
var unomiSessionId = readCookie('unomi-session-id');
if (!unomiSessionId) {
unomiSessionId = generateGuid();
console.log("No existing session cookie found, creating a new one with value " + unomiSessionId);
createCookie('unomi-session-id', unomiSessionId, 1);
}
console.log("Setting up form listener...");
$("#loginForm").submit(function (event) {
var email = $('#email').val();
var firstName = $('#firstname').val();
var lastName = $('#lastname').val();
var password = $('#password').val();
if (password != 'test1234') {
bootstrapAlert.danger("Wrong password (default is : test1234)");
event.preventDefault();
return false;
}
var contextRequest = {
source: { // the source is required for the request to be process properly
itemId: location.pathname,
itemType: 'webpage',
scope: 'test' // the scope is used to regroup events and sessions into sub-groups (eg sites)
},
events: [{ // here we provide a simple login event, but as this is actually an array we could provide other events at the same time (page view, clicks, mouse movements, ...)
eventType: "login",
properties: {},
target: {
itemId: email,
itemType: "exampleUser",
properties: {
preferredLanguage: "en",
email: email,
firstName: firstName,
lastName: lastName
}
}
}],
requiredProfileProperties: ['*'], // this tells Unomi to send us back all the profile properties (by default none are returned)
requiredSessionProperties: ['*'] // this tells Unomi to send us back all the session properties (by default none are returned)
};
// now let's perform the actual call to Apache Unomi, asking it to process the events and give us back the updated (or created) profile.
// as we have a rule listening to a login event, it will be executed and its actions will be processed.
$.ajax({
url: "http://localhost:8181/cxs/context.json?sessionId=" + unomiSessionId,
type: 'POST',
data: JSON.stringify(contextRequest), // make sure you sent JSON and not form-encoded, otherwise Unomi will generate an error
contentType: 'application/json; charset=utf-8',
dataType: 'json',
async: false,
headers : {
'X-Unomi-Peer' : '670c26d1cc413346c3b2fd9ce65dab41' // this is configured in the etc/org.apache.unomi.thirdparty.cfg
},
success: function (data) {
console.log("Unomi response:", data);
bootstrapAlert.success("Successfully sent login event to Apache Unomi ! (profileId=" + data.profileId + ",properties.email=" + data.profileProperties.email + ",nbOfVisits=" + data.profileProperties.nbOfVisits + ")");
}
});
event.preventDefault();
return false;
});
});
})();