mirror of
https://github.com/PrivateBin/PrivateBin.git
synced 2025-05-15 12:52:25 -04:00
refactor URL generators
This commit is contained in:
parent
9fb7aee589
commit
37ee3b1c7c
2 changed files with 40 additions and 49 deletions
21
js/common.js
21
js/common.js
|
@ -131,3 +131,24 @@ exports.jscMimeTypes = function() {
|
||||||
exports.jscFormats = function() {
|
exports.jscFormats = function() {
|
||||||
return jsc.elements(formats);
|
return jsc.elements(formats);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// provides random URLs
|
||||||
|
exports.jscUrl = function(withFragment = true, withQuery = true) {
|
||||||
|
let url = {
|
||||||
|
schema: exports.jscSchemas(),
|
||||||
|
address: jsc.nearray(exports.jscA2zString()),
|
||||||
|
};
|
||||||
|
if (withFragment) {
|
||||||
|
url.fragment = jsc.string;
|
||||||
|
}
|
||||||
|
if(withQuery) {
|
||||||
|
url.query = jsc.array(exports.jscQueryString());
|
||||||
|
}
|
||||||
|
return jsc.record(url);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.urlToString = function (url) {
|
||||||
|
return url.schema + '://' + url.address.join('') + '/' + (url.query ? '?' +
|
||||||
|
encodeURI(url.query.join('').replace(/^&+|&+$/gm,'')) : '') +
|
||||||
|
(url.fragment ? '#' + encodeURI(url.fragment) : '');
|
||||||
|
};
|
|
@ -7,21 +7,11 @@ describe('PasteStatus', function () {
|
||||||
|
|
||||||
jsc.property(
|
jsc.property(
|
||||||
'creates a notification after a successfull paste upload',
|
'creates a notification after a successfull paste upload',
|
||||||
common.jscSchemas(),
|
common.jscUrl(),
|
||||||
jsc.nearray(common.jscA2zString()),
|
common.jscUrl(false),
|
||||||
jsc.array(common.jscQueryString()),
|
function (url1, url2) {
|
||||||
'string',
|
const expected1 = common.urlToString(url1),
|
||||||
common.jscSchemas(),
|
expected2 = common.urlToString(url2),
|
||||||
jsc.nearray(common.jscA2zString()),
|
|
||||||
jsc.array(common.jscQueryString()),
|
|
||||||
function (
|
|
||||||
schema1, address1, query1, fragment1,
|
|
||||||
schema2, address2, query2
|
|
||||||
) {
|
|
||||||
var expected1 = schema1 + '://' + address1.join('') + '/?' +
|
|
||||||
encodeURI(query1.join('').replace(/^&+|&+$/gm,'') + '#' + fragment1),
|
|
||||||
expected2 = schema2 + '://' + address2.join('') + '/?' +
|
|
||||||
encodeURI(query2.join('').replace(/^&+|&+$/gm,'')),
|
|
||||||
clean = jsdom();
|
clean = jsdom();
|
||||||
$('body').html('<div><div id="deletelink"></div><div id="pastelink"></div></div>');
|
$('body').html('<div><div id="deletelink"></div><div id="pastelink"></div></div>');
|
||||||
$.PrivateBin.PasteStatus.init();
|
$.PrivateBin.PasteStatus.init();
|
||||||
|
@ -41,25 +31,23 @@ describe('PasteStatus', function () {
|
||||||
'extracts and updates URLs found in given response',
|
'extracts and updates URLs found in given response',
|
||||||
jsc.elements(['http','https']),
|
jsc.elements(['http','https']),
|
||||||
'nestring',
|
'nestring',
|
||||||
jsc.nearray(common.jscA2zString()),
|
common.jscUrl(),
|
||||||
jsc.array(common.jscQueryString()),
|
function (schema, domain, url) {
|
||||||
jsc.array(common.jscAlnumString()),
|
|
||||||
'string',
|
|
||||||
function (schema, domain, tld, query, shortid, fragment) {
|
|
||||||
domain = domain.replace(/\P{Letter}|[\u00AA-\u00BA]/gu,'').toLowerCase();
|
domain = domain.replace(/\P{Letter}|[\u00AA-\u00BA]/gu,'').toLowerCase();
|
||||||
if (domain.length === 0) {
|
if (domain.length === 0) {
|
||||||
domain = 'a';
|
domain = 'a';
|
||||||
}
|
}
|
||||||
const expected = '.' + tld.join('') + '/' + (query.length > 0 ?
|
url.schema = schema;
|
||||||
('?' + encodeURI(query.join('').replace(/^&+|&+$/gm,'')) +
|
url.address.unshift('.');
|
||||||
shortid.join('')) : '') + (fragment.length > 0 ?
|
url.address = domain.split('').concat(url.address);
|
||||||
('#' + encodeURI(fragment)) : ''),
|
const urlString = common.urlToString(url),
|
||||||
|
expected = urlString.substring((schema + '://' + domain).length),
|
||||||
clean = jsdom();
|
clean = jsdom();
|
||||||
|
|
||||||
$('body').html('<div><div id="pastelink"></div></div>');
|
$('body').html('<div><div id="pastelink"></div></div>');
|
||||||
$.PrivateBin.PasteStatus.init();
|
$.PrivateBin.PasteStatus.init();
|
||||||
$.PrivateBin.PasteStatus.createPasteNotification('', '');
|
$.PrivateBin.PasteStatus.createPasteNotification('', '');
|
||||||
$.PrivateBin.PasteStatus.extractUrl(schema + '://' + domain + expected);
|
$.PrivateBin.PasteStatus.extractUrl(urlString);
|
||||||
|
|
||||||
const result = $('#pasteurl')[0].href;
|
const result = $('#pasteurl')[0].href;
|
||||||
clean();
|
clean();
|
||||||
|
@ -79,18 +67,9 @@ describe('PasteStatus', function () {
|
||||||
'shows burn after reading message or remaining time v1',
|
'shows burn after reading message or remaining time v1',
|
||||||
'bool',
|
'bool',
|
||||||
'nat',
|
'nat',
|
||||||
jsc.nearray(common.jscA2zString()),
|
common.jscUrl(),
|
||||||
jsc.nearray(common.jscA2zString()),
|
function (burnafterreading, remainingTime, url) {
|
||||||
jsc.nearray(common.jscQueryString()),
|
let clean = jsdom('', {url: common.urlToString(url)}),
|
||||||
'string',
|
|
||||||
function (
|
|
||||||
burnafterreading, remainingTime,
|
|
||||||
schema, address, query, fragment
|
|
||||||
) {
|
|
||||||
var clean = jsdom('', {
|
|
||||||
url: schema.join('') + '://' + address.join('') +
|
|
||||||
'/?' + query.join('') + '#' + fragment
|
|
||||||
}),
|
|
||||||
result;
|
result;
|
||||||
$('body').html('<div id="remainingtime" class="hidden"></div>');
|
$('body').html('<div id="remainingtime" class="hidden"></div>');
|
||||||
$.PrivateBin.PasteStatus.init();
|
$.PrivateBin.PasteStatus.init();
|
||||||
|
@ -117,18 +96,9 @@ describe('PasteStatus', function () {
|
||||||
'shows burn after reading message or remaining time v2',
|
'shows burn after reading message or remaining time v2',
|
||||||
'bool',
|
'bool',
|
||||||
'nat',
|
'nat',
|
||||||
jsc.nearray(common.jscA2zString()),
|
common.jscUrl(),
|
||||||
jsc.nearray(common.jscA2zString()),
|
function (burnafterreading, remainingTime, url) {
|
||||||
jsc.nearray(common.jscQueryString()),
|
let clean = jsdom('', {url: common.urlToString(url)}),
|
||||||
'string',
|
|
||||||
function (
|
|
||||||
burnafterreading, remainingTime,
|
|
||||||
schema, address, query, fragment
|
|
||||||
) {
|
|
||||||
var clean = jsdom('', {
|
|
||||||
url: schema.join('') + '://' + address.join('') +
|
|
||||||
'/?' + query.join('') + '#' + fragment
|
|
||||||
}),
|
|
||||||
result;
|
result;
|
||||||
$('body').html('<div id="remainingtime" class="hidden"></div>');
|
$('body').html('<div id="remainingtime" class="hidden"></div>');
|
||||||
$.PrivateBin.PasteStatus.init();
|
$.PrivateBin.PasteStatus.init();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue