react-native-bluesnap-encrypter
Version:
A Cross platform React Native module to encrypt BlueSnap sensitive form data
128 lines (99 loc) • 4.29 kB
HTML
<html>
<head></head>
<body>
<script>
window.initialize = (function () {
var queue = [];
var loaded = false;
var bluesnap = null;
var formId = "bluesnap";
var BS_CREDIT_CARD_KEY = "encryptedCreditCard";
var BS_CVV_KEY = "encryptedCvv";
function createHiddenInput(bluesnapName, value) {
var $input = document.createElement("input");
$input.setAttribute("type", "hidden");
$input.setAttribute("data-bluesnap", bluesnapName);
$input.value = value;
return $input;
}
function createForm(params) {
var $form = document.createElement("form");
var $creditCardNumber = createHiddenInput(BS_CREDIT_CARD_KEY, params.creditCardNumber);
var $cvvNumber = createHiddenInput(BS_CVV_KEY, params.cvvNumber);
$form.id = formId;
$form.appendChild($creditCardNumber);
$form.appendChild($cvvNumber);
document.body.appendChild($form);
}
function encrypt(action) {
createForm(action.data);
bluesnap.encrypt(formId);
var ccLast4Digits = document.querySelector("input[name='ccLast4Digits']").value;
var encryptedCreditCard = document.querySelector("input[name='" + BS_CREDIT_CARD_KEY + "']").value;
var encryptedCvv = document.querySelector("input[name='" + BS_CVV_KEY + "']").value;
var $form = document.querySelector("#" + formId);
$form.parentNode.removeChild($form);
window.postMessage(JSON.stringify({
_id: action._id,
type: "encrypt",
data: {
ccLast4Digits: ccLast4Digits,
encryptedCreditCard: encryptedCreditCard,
encryptedCvv: encryptedCvv
}
}), "*");
}
function createEmbedFraudSessionUrl(fraudSessionId, type /* htm || gif */) {
return "https://www.bluesnap.com/servlet/logo." + type + "?s=" + fraudSessionId;
}
function setFraudSession(fraudSessionId) {
var img = document.createElement("img");
img.src = createEmbedFraudSessionUrl(fraudSessionId, "gif");
document.body.appendChild(img);
}
function handleAction(action) {
switch (action.type) {
case "encrypt":
encrypt(action);
break;
}
}
function onMessage(e) {
try {
var action = JSON.parse(e.data);
if (!action.type) {
return;
}
if (!loaded) {
queue.push(action);
return;
}
handleAction(action);
} catch (e) {
}
}
document.addEventListener("message", onMessage, "*");
window.addEventListener("message", onMessage, "*");
return function (clientEncryptionKey, version, fraudSessionId) {
var script = document.createElement("script");
script.src = "https://gateway.bluesnap.com/js/cse/v" + version + "/bluesnap.js"
script.onload = function () {
bluesnap = new BlueSnap(clientEncryptionKey);
var queueLength = queue.length;
if (queueLength > 0) {
for (var i = 0; i < queueLength; i++) {
handleAction(queue[i]);
}
queue.length = 0;
}
loaded = true;
if (fraudSessionId) {
setFraudSession(fraudSessionId);
}
};
document.head.appendChild(script);
}
})();
</script>
</body>
</html>