-
Notifications
You must be signed in to change notification settings - Fork 10
/
paywall.html
187 lines (184 loc) · 13.8 KB
/
paywall.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Browser Fingerprinting, JavaScript identification, fraud detection">
<link rel="preconnect" href="https://cdn.fpjs.io">
<link rel="preconnect" href="https://api.fpjs.io">
<link rel="preconnect" href="https://api.rollbar.com">
<title>FingerprintJS Paywall</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="/dist/main.css">
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-144459549-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-144459549-1');
</script>
<script>
var _rollbarConfig = {
accessToken: "7cccede652874b068cc3f9bb1e05b8e4",
captureUncaught: true,
captureUnhandledRejections: true,
payload: {
environment: "production"
}
};
!function (r) { function e(n) { if (o[n]) return o[n].exports; var t = o[n] = { exports: {}, id: n, loaded: !1 }; return r[n].call(t.exports, t, t.exports, e), t.loaded = !0, t.exports } var o = {}; return e.m = r, e.c = o, e.p = "", e(0) }([function (r, e, o) { "use strict"; var n = o(1), t = o(4); _rollbarConfig = _rollbarConfig || {}, _rollbarConfig.rollbarJsUrl = _rollbarConfig.rollbarJsUrl || "https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.4.6/rollbar.min.js", _rollbarConfig.async = void 0 === _rollbarConfig.async || _rollbarConfig.async; var a = n.setupShim(window, _rollbarConfig), l = t(_rollbarConfig); window.rollbar = n.Rollbar, a.loadFull(window, document, !_rollbarConfig.async, _rollbarConfig, l) }, function (r, e, o) { "use strict"; function n(r) { return function () { try { return r.apply(this, arguments) } catch (r) { try { console.error("[Rollbar]: Internal error", r) } catch (r) { } } } } function t(r, e) { this.options = r, this._rollbarOldOnError = null; var o = s++; this.shimId = function () { return o }, "undefined" != typeof window && window._rollbarShims && (window._rollbarShims[o] = { handler: e, messages: [] }) } function a(r, e) { if (r) { var o = e.globalAlias || "Rollbar"; if ("object" == typeof r[o]) return r[o]; r._rollbarShims = {}, r._rollbarWrappedError = null; var t = new p(e); return n(function () { e.captureUncaught && (t._rollbarOldOnError = r.onerror, i.captureUncaughtExceptions(r, t, !0), i.wrapGlobals(r, t, !0)), e.captureUnhandledRejections && i.captureUnhandledRejections(r, t, !0); var n = e.autoInstrument; return e.enabled !== !1 && (void 0 === n || n === !0 || "object" == typeof n && n.network) && r.addEventListener && (r.addEventListener("load", t.captureLoad.bind(t)), r.addEventListener("DOMContentLoaded", t.captureDomContentLoaded.bind(t))), r[o] = t, t })() } } function l(r) { return n(function () { var e = this, o = Array.prototype.slice.call(arguments, 0), n = { shim: e, method: r, args: o, ts: new Date }; window._rollbarShims[this.shimId()].messages.push(n) }) } var i = o(2), s = 0, d = o(3), c = function (r, e) { return new t(r, e) }, p = d.bind(null, c); t.prototype.loadFull = function (r, e, o, t, a) { var l = function () { var e; if (void 0 === r._rollbarDidLoad) { e = new Error("rollbar.js did not load"); for (var o, n, t, l, i = 0; o = r._rollbarShims[i++];)for (o = o.messages || []; n = o.shift();)for (t = n.args || [], i = 0; i < t.length; ++i)if (l = t[i], "function" == typeof l) { l(e); break } } "function" == typeof a && a(e) }, i = !1, s = e.createElement("script"), d = e.getElementsByTagName("script")[0], c = d.parentNode; s.crossOrigin = "", s.src = t.rollbarJsUrl, o || (s.async = !0), s.onload = s.onreadystatechange = n(function () { if (!(i || this.readyState && "loaded" !== this.readyState && "complete" !== this.readyState)) { s.onload = s.onreadystatechange = null; try { c.removeChild(s) } catch (r) { } i = !0, l() } }), c.insertBefore(s, d) }, t.prototype.wrap = function (r, e, o) { try { var n; if (n = "function" == typeof e ? e : function () { return e || {} }, "function" != typeof r) return r; if (r._isWrap) return r; if (!r._rollbar_wrapped && (r._rollbar_wrapped = function () { o && "function" == typeof o && o.apply(this, arguments); try { return r.apply(this, arguments) } catch (o) { var e = o; throw e && ("string" == typeof e && (e = new String(e)), e._rollbarContext = n() || {}, e._rollbarContext._wrappedSource = r.toString(), window._rollbarWrappedError = e), e } }, r._rollbar_wrapped._isWrap = !0, r.hasOwnProperty)) for (var t in r) r.hasOwnProperty(t) && (r._rollbar_wrapped[t] = r[t]); return r._rollbar_wrapped } catch (e) { return r } }; for (var u = "log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","), f = 0; f < u.length; ++f)t.prototype[u[f]] = l(u[f]); r.exports = { setupShim: a, Rollbar: p } }, function (r, e) { "use strict"; function o(r, e, o) { if (r) { var t; "function" == typeof e._rollbarOldOnError ? t = e._rollbarOldOnError : r.onerror && !r.onerror.belongsToShim && (t = r.onerror, e._rollbarOldOnError = t); var a = function () { var o = Array.prototype.slice.call(arguments, 0); n(r, e, t, o) }; a.belongsToShim = o, r.onerror = a } } function n(r, e, o, n) { r._rollbarWrappedError && (n[4] || (n[4] = r._rollbarWrappedError), n[5] || (n[5] = r._rollbarWrappedError._rollbarContext), r._rollbarWrappedError = null), e.handleUncaughtException.apply(e, n), o && o.apply(r, n) } function t(r, e, o) { if (r) { "function" == typeof r._rollbarURH && r._rollbarURH.belongsToShim && r.removeEventListener("unhandledrejection", r._rollbarURH); var n = function (r) { var o, n, t; try { o = r.reason } catch (r) { o = void 0 } try { n = r.promise } catch (r) { n = "[unhandledrejection] error getting `promise` from event" } try { t = r.detail, !o && t && (o = t.reason, n = t.promise) } catch (r) { t = "[unhandledrejection] error getting `detail` from event" } o || (o = "[unhandledrejection] error getting `reason` from event"), e && e.handleUnhandledRejection && e.handleUnhandledRejection(o, n) }; n.belongsToShim = o, r._rollbarURH = n, r.addEventListener("unhandledrejection", n) } } function a(r, e, o) { if (r) { var n, t, a = "EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(","); for (n = 0; n < a.length; ++n)t = a[n], r[t] && r[t].prototype && l(e, r[t].prototype, o) } } function l(r, e, o) { if (e.hasOwnProperty && e.hasOwnProperty("addEventListener")) { for (var n = e.addEventListener; n._rollbarOldAdd && n.belongsToShim;)n = n._rollbarOldAdd; var t = function (e, o, t) { n.call(this, e, r.wrap(o), t) }; t._rollbarOldAdd = n, t.belongsToShim = o, e.addEventListener = t; for (var a = e.removeEventListener; a._rollbarOldRemove && a.belongsToShim;)a = a._rollbarOldRemove; var l = function (r, e, o) { a.call(this, r, e && e._rollbar_wrapped || e, o) }; l._rollbarOldRemove = a, l.belongsToShim = o, e.removeEventListener = l } } r.exports = { captureUncaughtExceptions: o, captureUnhandledRejections: t, wrapGlobals: a } }, function (r, e) { "use strict"; function o(r, e) { this.impl = r(e, this), this.options = e, n(o.prototype) } function n(r) { for (var e = function (r) { return function () { var e = Array.prototype.slice.call(arguments, 0); if (this.impl[r]) return this.impl[r].apply(this.impl, e) } }, o = "log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","), n = 0; n < o.length; n++)r[o[n]] = e(o[n]) } o.prototype._swapAndProcessMessages = function (r, e) { this.impl = r(this.options); for (var o, n, t; o = e.shift();)n = o.method, t = o.args, this[n] && "function" == typeof this[n] && ("captureDomContentLoaded" === n || "captureLoad" === n ? this[n].apply(this, [t[0], o.ts]) : this[n].apply(this, t)); return this }, r.exports = o }, function (r, e) { "use strict"; r.exports = function (r) { return function (e) { if (!e && !window._rollbarInitialized) { r = r || {}; for (var o, n, t = r.globalAlias || "Rollbar", a = window.rollbar, l = function (r) { return new a(r) }, i = 0; o = window._rollbarShims[i++];)n || (n = o.handler), o.handler._swapAndProcessMessages(l, o.messages); window[t] = n, window._rollbarInitialized = !0 } } } }]);
</script>
<script>
window.fpLayer = window.fpLayer || [];
function fp() { fpLayer.push(arguments); }
fp('config', 'client', '1IZEt2062');
fp('config', 'loaded', function (fp) {
fp.send({ debug: true }).then(function (res) {
}).catch(function (err) {
}).finally(function () {
});
});
</script>
<script async src="https://cdn.fpjs.io/@2.4.9/fp.js"></script>
</head>
<body>
<div class="container">
<div class="row pt-5">
<div class="col text-center">
<a href="/">
<h1>FingerprintJS</h1>
</a>
<h1 id="main-logo" class="border-bottom pb-2">
Paywall
</h1>
</div>
</div>
<div class="row text-center text-md-left">
<div class="col-md-7">
<div class="mt-5 paywall-section-title">
Regular paywalls are easily avoided.
</div>
<p>
<h3>
By going incognito or clearing cookies,
thus giving users virtually unlimited article reads and no incentive to pay your subscription.
</h3>
</p>
</div>
<div class="col-md-5">
<img class="img-fluid" src="/img/paywall-mobile-frame.png" alt="paywall-mobile" />
</div>
</div>
<div class="row text-center text-md-left">
<div class="col-md-6">
<img class="img-fluid" src="/img/paywall-desktop.png" alt="paywall-mobile" />
</div>
<div class="col-md-6 order-first order-md-2">
<div class="mt-5 paywall-section-title">
FingerprintJS Pro Paywall is a next-generation identification service
</div>
<p>
<h2>
with integrated paywall evasion detection
</h2>
<h3>
It works better than existing paywall solutions due to our advanced fingerprinting technology.
</h3>
</p>
</div>
</div>
<div class="row">
<div class="col text-center">
<div class="mt-5 paywall-section-title">
Our users see a measurable increase in paywall conversions after implementing our software.
</div>
<a href="http://paywall.fpjs.pro" target="_blank" class="btn btn-danger btn-lg mt-3">
<h3 class="pt-2">
try out our demo
</h3>
</a>
</div>
</div>
<div class="row">
<div class="col text-center">
<div class="mt-5 mb-3 paywall-section-title">
Start your free trial today
</div>
</div>
</div>
<div class="row mb-5">
<div class="col-lg-8 offset-lg-2 text-center">
<form id="contact-form" class="form">
<div class="form-row">
<div class="col-9">
<input type="email" id="contact-email" class="form-control" placeholder="[email protected]" required />
</div>
<div class="col-3">
<button id="contact-submit" class="btn btn-primary form-control">Send</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="container border-top">
<div class="row">
<div class="col">
<footer class="pt-4 pt-md-5">
<div class="row">
<div class="col-6 col-md">
<h5>Resources</h5>
<ul class="list-unstyled text-small">
<li><a class="text-muted" href="/privacy.html">Privacy policy</a></li>
<li><a class="text-muted" href="/terms.html">Terms and conditions</a></li>
</ul>
</div>
<div class="col-6 col-md">
<h5>Contact us</h5>
<ul class="list-unstyled text-small">
<li class="text-muted">
<a class="text-muted" href="mailto:[email protected]">[email protected]</a></li>
<!-- <li class="text-muted">
<a href="tel:+13313307266">+1(331)330-7266</a></li> -->
<li class="text-muted">
1440 W. Taylor St #735, Chicago, IL 60607, USA</li>
</ul>
</div>
</div>
<div class="text-center">
© fingerprintjs.com 2020
</div>
</footer>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
$("#contact-form").on("submit", function (e) {
var $submit = $("#contact-submit");
$submit.prop("disabled", true);
e.preventDefault();
var email = $("#contact-email").val();
if (!email) {
return alert("Please enter your email");
}
var payload = { email: email, name: email, website: email, comment: 'fingerprintjs.com/paywall' };
$.ajax({
url: "https://admin.fingerprintjs.com/create-lead",
type: 'post',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify(payload),
success: function () {
alert('Thanks, we received your data')
$("#contact-form").get(0).reset();
},
}).catch(function () {
alert("Error occurred, contact us at: [email protected]");
}).always(function () {
$submit.prop("disabled", false);
});
});
</script>
</body>
</html>