PageSourceSearch

https://pentlandferries.co.uk/wp-content/plugins/content-protector…/public/passster-public.min.js?ver=4.2.6.4

js pentlandferries.co.uk collected 2026-09-24 23:07:40 UTC 16,863 bytes, 388 lines download raw bytes

1jQuery(document).ready(function ($) {
2
3    // Get cookie duration.
4    function getDurationBySettings() {
5        switch (ps_ajax.cookie_duration_unit) {
6            case 'days':
7                return parseInt(ps_ajax.cookie_duration);
8                break;
9            case 'hours':
10                return new Date(new Date().getTime() + (ps_ajax.cookie_duration * 10) * 60 * 1000);
11                break;
12            case 'minutes':
13                return new Date(new Date().getTime() + ps_ajax.cookie_duration * 60 * 1000);
14                break;
15            default:
16                return parseInt(ps_ajax.cookie_duration);
17        }
18    }
19
20    // Get cache busting URL.
21    function getCacheFriendlyURL() {
22        if (location.search) {
23            return (location.origin).concat(location.pathname).concat(location.hash) + location.search + '&pts=' + Math.floor(Date.now() / 1000);
24        } else {
25            return (location.origin).concat(location.pathname).concat(location.hash) + '?pts=' + Math.floor(Date.now() / 1000);
26        }
27    }
28
29    // Get hashed cookie via Ajax.
30    function setHashedCookie(password) {
31        $.ajax({
32            type: "post", dataType: "json", url: ps_ajax.ajax_url, data: {
33                'action': 'hash_password', 'hash_nonce': ps_ajax.hash_nonce, 'password': password,
34            }, success: function (response) {
35                Cookies.set('passster', response.password, {
36                    expires: getDurationBySettings(), sameSite: 'strict'
37                });
38            }, async: false,
39        });
40    }
41
42    // Check if we have an unlock link.
43    if (ps_ajax.link_pass) {
44        if (!ps_ajax.disable_cookie) {
45            if (ps_ajax.link_pass.length < 25) {
46                // It's an old base64 encryption.
47                setHashedCookie(atob(ps_ajax.link_pass));
48            } else {
49                Cookies.set('passster', ps_ajax.link_pass, {
50                    expires: getDurationBySettings(), sameSite: 'strict'
51                });
52            }
53
54            // Handle the redirect with cache busting.
55            window.location.replace(ps_ajax.permalink + '?pts=' + Math.floor(Date.now() / 1000));
56        }
57    }
58
59    // Passwords
60    $('.passster-submit').on('click', function (e) {
61        e.preventDefault();
62
63        // Validate form before submitting ajax.
64        var form = $(this).parent().parent();
65
66        if (!$(form)[0].checkValidity()) {
67            $(form)[0].reportValidity();
68        }
69
70        ps_id = $(this).attr('data-psid');
71        form = $("#" + ps_id);
72        password = $("#" + ps_id + ' .passster-password').attr('data-password');
73        type = $("#" + ps_id + ' .passster-password').attr('data-protection-type');
74        list = $("#" + ps_id + ' .passster-password').attr('data-list');
75        lists = $("#" + ps_id + ' .passster-password').attr('data-lists');
76        area = $("#" + ps_id + ' .passster-password').attr('data-area');
77        protection = $("#" + ps_id + ' .passster-password').attr('data-protection');
78        redirect = $(this).attr('data-redirect');
79        input = $("#" + ps_id + ' .passster-password').val();
80        acf = $(this).attr('data-acf');
81
82        $.ajax({
83            type: "post", dataType: "json", url: ps_ajax.ajax_url, data: {
84                'action': 'validate_input',
85                'nonce': ps_ajax.nonce,
86                'input': input,
87                'password': password,
88                'post_id': ps_ajax.post_id,
89                'type': type,
90                'list': list,
91                'lists': lists,
92                'area': area,
93                'protection': protection,
94                'acf': acf,
95                'redirect': redirect
96            }, beforeSend: function () {
97                form.find(".ps-loader").css('display', 'block');
98            }, success: function (response) {
99                form.find(".ps-loader").css('display', 'none');
100                if (true === response.success) {
101                    // if no ajax.
102                    if (!ps_ajax.unlock_mode) {
103                        setHashedCookie(input);
104
105                        if (response.redirect) {
106                            window.location.replace(redirect);
107                        } else {
108                            window.location.href = getCacheFriendlyURL();
109                        }
110                    } else {
111
112                        // set cookie if activated.
113                        if (!ps_ajax.disable_cookie) {
114                            setHashedCookie(input);
115                        }
116                        form.find('.passster-error').hide();
117
118                        // replace shortcodes.
119                        let content = response.content;
120
121                        if (content) {
122                            $.each(ps_ajax.shortcodes, function (key, value) {
123                                content = content.replace(key, value);
124                            });
125
126                            $("#" + ps_id).replaceWith(content);
127                        }
128
129                        // Redirect?
130                        if (response.redirect) {
131                            window.location.replace(redirect);
132                        }
133
134                    }
135                } else {
136                    form.find('.passster-error').text(response.error);
137                    form.find('.passster-error').show().fadeOut(3500);
138                    $("#" + ps_id + ' .passster-password').val('');
139                }
140            }
141        });
142    });
143
144    // Recaptcha v2
145    if ($('.recaptcha-form-v2').length > 0) {
146        grecaptcha.ready(function () {
147            grecaptcha.render('ps-recaptcha-v2', {
148                'sitekey': ps_ajax.recaptcha_key, 'callback': function (token) {
149                    ps_id = $('.recaptcha-v2-submit').attr('data-psid');
150                    form = $("#" + ps_id);
151                    protection = $('.recaptcha-v2-submit').attr('data-protection');
152                    acf = $('.recaptcha-v2-submit').attr('data-acf');
153                    area = $("#" + ps_id).find('.recaptcha-v2-submit').attr('data-area');
154                    redirect = $("#" + ps_id).find('.recaptcha-v2-submit').attr('data-redirect');
155
156                    $.ajax({
157                        type: "post", dataType: "json", url: ps_ajax.ajax_url, data: {
158                            'action': 'validate_input',
159                            'nonce': ps_ajax.nonce,
160                            'token': token,
161                            'post_id': ps_ajax.post_id,
162                            'type': 'recaptcha',
163                            'protection': protection,
164                            'captcha_id': ps_id,
165                            'acf': acf,
166                            'area': area,
167                            'redirect': redirect
168                        }, success: function (response) {
169                            if (true === response.success) {
170
171                                // if no ajax.
172                                if (!ps_ajax.unlock_mode) {
173                                    Cookies.set('passster', 'recaptcha', {
174                                        expires: getDurationBySettings(), sameSite: 'strict'
175                                    });
176
177                                    if (response.redirect) {
178                                        window.location.replace(redirect);
179                                    } else {
180                                        window.location.href = getCacheFriendlyURL();
181                                    }
182                                } else {
183                                    // set cookie if activated.
184                                    if (!ps_ajax.disable_cookie) {
185                                        Cookies.set('passster', 'recaptcha', {
186                                            expires: getDurationBySettings(), sameSite: 'strict'
187                                        });
188                                    }
189                                    form.find('.passster-error').hide();
190
191                                    // replace shortcodes.
192                                    let content = response.content;
193
194                                    if (content) {
195
196                                        $.each(ps_ajax.shortcodes, function (key, value) {
197                                            content = content.replace(key, value);
198                                        });
199
200                                        $("#" + ps_id).replaceWith(content);
201                                    }
202
203                                    // Redirect?
204                                    if (response.redirect) {
205                                        window.location.replace(redirect);
206                                    }
207                                }
208                            } else {
209                                form.find('.passster-error').text(response.error);
210                                form.find('.passster-error').show().fadeOut(3500);
211                            }
212                        }
213                    });
214                }
215            });
216        });
217    }
218
219    // ReCaptcha v3
220    $('.recaptcha-form').on('submit', function (event) {
221        event.preventDefault();
222
223        ps_id = $(this).find('.passster-submit-recaptcha').attr('data-psid');
224        form = $("#" + ps_id);
225        protection = $(this).find('.passster-submit-recaptcha').attr('data-protection');
226        acf = $(this).find('.passster-submit-recaptcha').attr('data-acf');
227        area = $(this).find('.passster-submit-recaptcha').attr('data-area');
228        redirect = $(this).find('.passster-submit-recaptcha').attr('data-redirect');
229
230        grecaptcha.ready(function () {
231            grecaptcha.execute(ps_ajax.recaptcha_key, {action: 'validate_input'}).then(function (token) {
232
233                form.prepend('<input type="hidden" name="token" value="' + token + '">');
234                form.prepend('<input type="hidden" name="action" value="validate_input">');
235
236                $.ajax({
237                    type: "post", dataType: "json", url: ps_ajax.ajax_url, data: {
238                        'action': 'validate_input',
239                        'nonce': ps_ajax.nonce,
240                        'token': token,
241                        'post_id': ps_ajax.post_id,
242                        'type': 'recaptcha',
243                        'protection': protection,
244                        'captcha_id': ps_id,
245                        'acf': acf,
246                        'area': area,
247                        'redirect': redirect
248                    }, success: function (response) {
249                        if (true === response.success) {
250
251                            // if no ajax.
252                            if (!ps_ajax.unlock_mode) {
253                                Cookies.set('passster', 'recaptcha', {
254                                    expires: getDurationBySettings(), sameSite: 'strict'
255                                });
256
257                                if (response.redirect) {
258                                    window.location.replace(redirect);
259                                } else {
260                                    window.location.href = getCacheFriendlyURL();
261                                }
262                            } else {
263                                // set cookie if activated.
264                                if (!ps_ajax.disable_cookie) {
265                                    Cookies.set('passster', 'recaptcha', {
266                                        expires: getDurationBySettings(), sameSite: 'strict'
267                                    });
268                                }
269                                form.find('.passster-error').hide();
270                                // replace shortcodes.
271                                let content = response.content;
272
273                                if (content) {
274                                    $.each(ps_ajax.shortcodes, function (key, value) {
275                                        content = content.replace(key, value);
276                                    });
277
278                                    form.replaceWith(content);
279                                }
280
281                                // Redirect?
282                                if (response.redirect) {
283                                    window.location.replace(redirect);
284                                }
285                            }
286                        } else {
287                            form.find('.passster-error').text(response.error);
288                            form.find('.passster-error').show().fadeOut(3500);
289                        }
290                    }
291                });
292            });
293        });
294    });
295
296    // hcaptcha
297    $('.hcaptcha-form').on('submit', function (event) {
298        event.preventDefault();
299
300        ps_id = $(this).find('.passster-submit-recaptcha').attr('data-psid');
301        form = $("#" + ps_id);
302        protection = $(this).find('.passster-submit-recaptcha').attr('data-protection');
303        acf = $(this).find('.passster-submit-recaptcha').attr('data-acf');
304        area = $(this).find('.passster-submit-recaptcha').attr('data-area');
305        redirect = $(this).find('.passster-submit-recaptcha').attr('data-redirect');
306
307        hcaptcha.execute({async: true})
308            .then(({response, key}) => {
309                $.ajax({
310                    type: "post", dataType: "json", url: ps_ajax.ajax_url, data: {
311                        'action': 'validate_input',
312                        'nonce': ps_ajax.nonce,
313                        'token': response,
314                        'post_id': ps_ajax.post_id,
315                        'type': 'recaptcha',
316                        'protection': protection,
317                        'captcha_id': ps_id,
318                        'acf': acf,
319                        'area': area,
320                        'redirect': redirect
321                    }, success: function (response) {
322                        if (true === response.success) {
323
324                            // if no ajax.
325                            if (!ps_ajax.unlock_mode) {
326                                Cookies.set('passster', 'recaptcha', {
327                                    expires: getDurationBySettings(), sameSite: 'strict'
328                                });
329
330                                if (response.redirect) {
331                                    window.location.replace(redirect);
332                                } else {
333                                    window.location.href = getCacheFriendlyURL();
334                                }
335                            } else {
336                                // set cookie if activated.
337                                if (!ps_ajax.disable_cookie) {
338                                    Cookies.set('passster', 'recaptcha', {
339                                        expires: getDurationBySettings(), sameSite: 'strict'
340                                    });
341                                }
342                                form.find('.passster-error').hide();
343                                // replace shortcodes.
344                                let content = response.content;
345
346                                if (content) {
347                                    $.each(ps_ajax.shortcodes, function (key, value) {
348                                        content = content.replace(key, value);
349                                    });
350
351                                    form.replaceWith(content);
352                                }
353
354                                // Redirect?
355                                if (response.redirect) {
356                                    window.location.replace(redirect);
357                                }
358                            }
359                        } else {
360                            form.find('.passster-error').text(response.error);
361                            form.find('.passster-error').show().fadeOut(3500);
362                        }
363                    }
364                });
365            })
366            .catch(err => {
367                form.find('.passster-error').text(err);
368                form.find('.passster-error').show().fadeOut(3500);
369            });
370
371    });
372
373    // Concurrent logout.
374    $(document).on('click', '#ps-logout', function () {
375        $.
375ajax({
376            type: 'post',
377            dataType: 'json',
378            url: ps_ajax.ajax_url,
379            data: {'action': 'handle_logout', 'logout_nonce': ps_ajax.logout_nonce},
380            success: function (response) {
381                if (true === response.success) {
382                    Cookies.set('passster', '', {expires: 0, sameSite: 'strict'});
383                    window.location.href = getCacheFriendlyURL();
384                }
385            }
386        });
387    });
388});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.