mirror of
https://github.com/PrivateBin/PrivateBin.git
synced 2025-09-21 21:24:37 -04:00
add YOURLS API samples for extractUrl validation
This commit is contained in:
parent
fd82b937a9
commit
405479642f
6 changed files with 130 additions and 17 deletions
|
@ -259,16 +259,16 @@ describe('Helper', function () {
|
|||
this.timeout(30000);
|
||||
jsc.property(
|
||||
'returns the URL without query & fragment',
|
||||
jsc.elements(['http', 'https']),
|
||||
jsc.nearray(common.jscA2zString()),
|
||||
jsc.array(common.jscA2zString()),
|
||||
jsc.array(common.jscQueryString()),
|
||||
'string',
|
||||
function (schema, address, path, query, fragment) {
|
||||
common.jscSchemas(false),
|
||||
common.jscUrl(),
|
||||
function (schema, url) {
|
||||
url.schema = schema;
|
||||
const fullUrl = common.urlToString(url);
|
||||
delete(url.query);
|
||||
delete(url.fragment);
|
||||
$.PrivateBin.Helper.reset();
|
||||
var path = path.join('') + (path.length > 0 ? '/' : ''),
|
||||
expected = schema + '://' + address.join('') + '/' + path,
|
||||
clean = jsdom('', {url: expected + '?' + query.join('') + '#' + fragment}),
|
||||
const expected = common.urlToString(url),
|
||||
clean = jsdom('', {url: fullUrl}),
|
||||
result = $.PrivateBin.Helper.baseUri();
|
||||
clean();
|
||||
return expected === result;
|
||||
|
|
|
@ -1,6 +1,23 @@
|
|||
'use strict';
|
||||
var common = require('../common');
|
||||
|
||||
function urlStrings(schema, longUrl, shortUrl) {
|
||||
longUrl.schema = schema;
|
||||
shortUrl.schema = schema;
|
||||
let longUrlString = common.urlToString(longUrl),
|
||||
shortUrlString = common.urlToString(shortUrl);
|
||||
// ensure the two random URLs actually are sorted as expected
|
||||
if (longUrlString.length <= shortUrlString.length) {
|
||||
if (longUrlString.length === shortUrlString.length) {
|
||||
longUrl.address.unshift('a');
|
||||
longUrlString = common.urlToString(longUrl);
|
||||
} else {
|
||||
[longUrlString, shortUrlString] = [shortUrlString, longUrlString];
|
||||
}
|
||||
}
|
||||
return [longUrlString, shortUrlString];
|
||||
}
|
||||
|
||||
describe('PasteStatus', function () {
|
||||
describe('createPasteNotification', function () {
|
||||
this.timeout(30000);
|
||||
|
@ -28,8 +45,8 @@ describe('PasteStatus', function () {
|
|||
this.timeout(30000);
|
||||
|
||||
jsc.property(
|
||||
'extracts and updates URLs found in given response',
|
||||
jsc.elements(['http','https']),
|
||||
'extracts and updates IDN URLs found in given response',
|
||||
common.jscSchemas(false),
|
||||
'nestring',
|
||||
common.jscUrl(),
|
||||
function (schema, domain, url) {
|
||||
|
@ -58,6 +75,102 @@ describe('PasteStatus', function () {
|
|||
);
|
||||
}
|
||||
);
|
||||
|
||||
// YOURLS API samples from: https://yourls.org/readme.html#API;apireturn
|
||||
jsc.property(
|
||||
'extracts and updates URLs found in YOURLS API JSON response',
|
||||
common.jscSchemas(false),
|
||||
common.jscUrl(),
|
||||
common.jscUrl(false),
|
||||
function (schema, longUrl, shortUrl) {
|
||||
const [longUrlString, shortUrlString] = urlStrings(schema, longUrl, shortUrl),
|
||||
yourlsResponse = {
|
||||
url: {
|
||||
keyword: longUrl.address.join(''),
|
||||
url: longUrlString,
|
||||
title: "example title",
|
||||
date: "2014-10-24 16:01:39",
|
||||
ip: "127.0.0.1"
|
||||
},
|
||||
status: "success",
|
||||
message: longUrlString + " added to database",
|
||||
title: "example title",
|
||||
shorturl: shortUrlString,
|
||||
statusCode: 200
|
||||
},
|
||||
clean = jsdom();
|
||||
|
||||
$('body').html('<div><div id="pastelink"></div></div>');
|
||||
$.PrivateBin.PasteStatus.init();
|
||||
$.PrivateBin.PasteStatus.createPasteNotification('', '');
|
||||
$.PrivateBin.PasteStatus.extractUrl(JSON.stringify(yourlsResponse, undefined, 4));
|
||||
|
||||
const result = $('#pasteurl')[0].href;
|
||||
clean();
|
||||
|
||||
return result === shortUrlString;
|
||||
}
|
||||
);
|
||||
jsc.property(
|
||||
'extracts and updates URLs found in YOURLS API XML response',
|
||||
common.jscSchemas(false),
|
||||
common.jscUrl(),
|
||||
common.jscUrl(false),
|
||||
function (schema, longUrl, shortUrl) {
|
||||
const [longUrlString, shortUrlString] = urlStrings(schema, longUrl, shortUrl),
|
||||
yourlsResponse = '<result>\n' +
|
||||
' <keyword>' + longUrl.address.join('') + '</keyword>\n' +
|
||||
' <shorturl>' + shortUrlString + '</shorturl>\n' +
|
||||
' <longurl>' + longUrlString + '</longurl>\n' +
|
||||
' <message>success</message>\n' +
|
||||
' <statusCode>200</statusCode>\n' +
|
||||
'</result>',
|
||||
clean = jsdom();
|
||||
|
||||
$('body').html('<div><div id="pastelink"></div></div>');
|
||||
$.PrivateBin.PasteStatus.init();
|
||||
$.PrivateBin.PasteStatus.createPasteNotification('', '');
|
||||
$.PrivateBin.PasteStatus.extractUrl(yourlsResponse);
|
||||
|
||||
const result = $('#pasteurl')[0].href;
|
||||
clean();
|
||||
|
||||
return result === shortUrlString;
|
||||
}
|
||||
);
|
||||
jsc.property(
|
||||
'extracts and updates URLs found in YOURLS proxy HTML response',
|
||||
common.jscSchemas(false),
|
||||
common.jscUrl(),
|
||||
common.jscUrl(false),
|
||||
function (schema, longUrl, shortUrl) {
|
||||
const [longUrlString, shortUrlString] = urlStrings(schema, longUrl, shortUrl),
|
||||
yourlsResponse = '<!DOCTYPE html>\n' +
|
||||
'<html lang="en">\n' +
|
||||
'\t<head>\n' +
|
||||
'\t\t<meta charset="utf-8" />\n' +
|
||||
'\t\t<meta http-equiv="Content-Security-Policy" content="default-src \'none\'; base-uri \'self\'; form-action \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' \'unsafe-eval\'; style-src \'self\'; font-src \'self\'; frame-ancestors \'none\'; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads">\n' +
|
||||
'\t\t<meta name="robots" content="noindex" />\n' +
|
||||
'\t\t<meta name="google" content="notranslate">\n' +
|
||||
'\t\t<title>PrivateBin</title>\n' +
|
||||
'\t</head>\n' +
|
||||
'\t<body>\n' +
|
||||
'\t\t<p>Your paste is <a id="pasteurl" href="' + shortUrlString + '">' + shortUrlString + '</a> <span id="copyhint">(Hit [Ctrl]+[c] to copy)</span></p>\n' +
|
||||
'\t</body>\n' +
|
||||
'</html>',
|
||||
clean = jsdom();
|
||||
|
||||
$('body').html('<div><div id="pastelink"></div></div>');
|
||||
$.PrivateBin.PasteStatus.init();
|
||||
$.PrivateBin.PasteStatus.createPasteNotification('', '');
|
||||
$.PrivateBin.PasteStatus.extractUrl(yourlsResponse);
|
||||
|
||||
const result = $('#pasteurl')[0].href;
|
||||
clean();
|
||||
|
||||
return result === shortUrlString;
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
describe('showRemainingTime', function () {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue