498 incorrect short url #552

Merged
bones7242 merged 4 commits from 498-incorrect-short-url into master 2018-08-03 17:05:47 +02:00
6 changed files with 9 additions and 100 deletions
Showing only changes of commit d2eaaae759 - Show all commits

View file

@ -3,7 +3,7 @@ import * as actions from '../constants/show_action_types';
import { onRequestError, onNewChannelRequest, onNewAssetRequest } from '../actions/show'; import { onRequestError, onNewChannelRequest, onNewAssetRequest } from '../actions/show';
import { newAssetRequest } from '../sagas/show_asset'; import { newAssetRequest } from '../sagas/show_asset';
import { newChannelRequest } from '../sagas/show_channel'; import { newChannelRequest } from '../sagas/show_channel';
import lbryUri from '../utils/lbryUri'; import lbryUri from '../../../utils/lbryUri';
function * parseAndUpdateIdentifierAndClaim (modifier, claim) { function * parseAndUpdateIdentifierAndClaim (modifier, claim) {
// this is a request for an asset // this is a request for an asset

View file

@ -1,85 +0,0 @@
module.exports = {
REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,
REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,
REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,
CHANNEL_CHAR : '@',
parseIdentifier : function (identifier) {
const componentsRegex = new RegExp(
'([^:$#/]*)' + // value (stops at the first separator or end)
'([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
);
const [proto, value, modifierSeperator, modifier] = componentsRegex // eslint-disable-line no-unused-vars
.exec(identifier)
.map(match => match || null);
// Validate and process name
if (!value) {
throw new Error(`Check your URL. No channel name provided before "${modifierSeperator}"`);
}
const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);
const channelName = isChannel ? value : null;
let claimId;
if (isChannel) {
if (!channelName) {
throw new Error('Check your URL. No channel name after "@".');
}
const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);
if (nameBadChars) {
throw new Error(`Check your URL. Invalid characters in channel name: "${nameBadChars.join(', ')}".`);
}
} else {
claimId = value;
}
// Validate and process modifier
let channelClaimId;
if (modifierSeperator) {
if (!modifier) {
throw new Error(`Check your URL. No modifier provided after separator "${modifierSeperator}"`);
}
if (modifierSeperator === ':') {
channelClaimId = modifier;
} else {
throw new Error(`Check your URL. The "${modifierSeperator}" modifier is not currently supported`);
}
}
return {
isChannel,
channelName,
channelClaimId: channelClaimId || null,
claimId : claimId || null,
};
},
parseClaim: function (name) {
const componentsRegex = new RegExp(
'([^:$#/.]*)' + // name (stops at the first extension)
'([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)
);
const [proto, claimName, extensionSeperator, extension] = componentsRegex // eslint-disable-line no-unused-vars
.exec(name)
.map(match => match || null);
// Validate and process name
if (!claimName) {
throw new Error('Check your URL. No claim name provided before "."');
}
const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);
if (nameBadChars) {
throw new Error(`Check your URL. Invalid characters in claim name: "${nameBadChars.join(', ')}".`);
}
// Validate and process extension
if (extensionSeperator) {
if (!extension) {
throw new Error(`Check your URL. No file extension provided after separator "${extensionSeperator}".`);
}
if (extensionSeperator !== '.') {
throw new Error(`Check your URL. The "${extensionSeperator}" separator is not supported in the claim name.`);
}
}
return {
claimName,
extension: extension || null,
};
},
};

View file

@ -1,5 +1,5 @@
const logger = require('winston'); const logger = require('winston');
const lbryUri = require('../../utils/lbryUri'); const lbryUri = require('../../../../utils/lbryUri');
const getOEmbedDataForChannel = require('./getOEmbedDataForChannel'); const getOEmbedDataForChannel = require('./getOEmbedDataForChannel');
const getOEmbedDataForAsset = require('./getOEmbedDataForAsset'); const getOEmbedDataForAsset = require('./getOEmbedDataForAsset');

View file

@ -3,7 +3,7 @@ const logger = require('winston');
const { sendGAServeEvent } = require('../../../utils/googleAnalytics'); const { sendGAServeEvent } = require('../../../utils/googleAnalytics');
const handleShowRender = require('../../../render/build/handleShowRender.js'); const handleShowRender = require('../../../render/build/handleShowRender.js');
const lbryUri = require('../../utils/lbryUri.js'); const lbryUri = require('../../../../utils/lbryUri.js');
const determineRequestType = require('../utils/determineRequestType.js'); const determineRequestType = require('../utils/determineRequestType.js');
const getClaimIdAndServeAsset = require('../utils/getClaimIdAndServeAsset.js'); const getClaimIdAndServeAsset = require('../utils/getClaimIdAndServeAsset.js');

View file

@ -3,7 +3,7 @@ const logger = require('winston');
const { sendGAServeEvent } = require('../../../utils/googleAnalytics'); const { sendGAServeEvent } = require('../../../utils/googleAnalytics');
const handleShowRender = require('../../../render/build/handleShowRender.js'); const handleShowRender = require('../../../render/build/handleShowRender.js');
const lbryUri = require('../../utils/lbryUri.js'); const lbryUri = require('../../../../utils/lbryUri.js');
const determineRequestType = require('../utils/determineRequestType.js'); const determineRequestType = require('../utils/determineRequestType.js');
const getClaimIdAndServeAsset = require('../utils/getClaimIdAndServeAsset.js'); const getClaimIdAndServeAsset = require('../utils/getClaimIdAndServeAsset.js');

View file

@ -1,20 +1,16 @@
const logger = require('winston');
module.exports = { module.exports = {
REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g, REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,
REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g, REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,
REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/, REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,
CHANNEL_CHAR : '@', CHANNEL_CHAR : '@',
parseIdentifier : function (identifier) { parseIdentifier : function (identifier) {
logger.debug('parsing identifier:', identifier);
const componentsRegex = new RegExp( const componentsRegex = new RegExp(
'([^:$#/]*)' + // value (stops at the first separator or end) '([^:$#/]*)' + // value (stops at the first separator or end)
'([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
); );
const [proto, value, modifierSeperator, modifier] = componentsRegex const [, value, modifierSeperator, modifier] = componentsRegex
.exec(identifier) .exec(identifier)
.map(match => match || null); .map(match => match || null);
logger.debug(`${proto}, ${value}, ${modifierSeperator}, ${modifier}`);
// Validate and process name // Validate and process name
skhameneh commented 2018-08-03 01:31:38 +02:00 (Migrated from github.com)
Review

Remove extra comma

Remove extra comma
if (!value) { if (!value) {
@ -56,15 +52,13 @@ module.exports = {
}; };
}, },
parseClaim: function (claim) { parseClaim: function (claim) {
logger.debug('parsing name:', claim);
const componentsRegex = new RegExp( const componentsRegex = new RegExp(
'([^:$#/.]*)' + // name (stops at the first modifier) '([^:$#/.]*)' + // name (stops at the first modifier)
'([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
); );
const [proto, claimName, modifierSeperator, modifier] = componentsRegex const [, claimName, modifierSeperator, modifier] = componentsRegex
.exec(claim) .exec(claim)
.map(match => match || null); .map(match => match || null);
logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);
// Validate and process name // Validate and process name
if (!claimName) { if (!claimName) {
@ -86,18 +80,18 @@ module.exports = {
// return results // return results
return { return {
claimName, claimName,
extension: modifier || null,
skhameneh commented 2018-08-03 01:31:25 +02:00 (Migrated from github.com)
Review

Remove the extra comma

Remove the extra comma
bones7242 commented 2018-08-03 01:35:53 +02:00 (Migrated from github.com)
Review

I think it is necessary in order to ignore the first value when destructuring the returned array, right? Otherwise claimName becomes the proto.. etc.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

I think it is necessary in order to ignore the first value when destructuring the returned array, right? Otherwise claimName becomes the proto.. etc. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
}; };
}, },
parseModifier: function (claim) { parseModifier: function (claim) {
logger.debug('parsing modifier:', claim);
const componentsRegex = new RegExp( const componentsRegex = new RegExp(
'([^:$#/.]*)' + // name (stops at the first modifier) '([^:$#/.]*)' + // name (stops at the first modifier)
'([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
); );
const [proto, claimName, modifierSeperator, modifier] = componentsRegex const [ , , modifierSeperator ] = componentsRegex
.exec(claim) .exec(claim)
.map(match => match || null); .map(match => match || null);
logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);
// Validate and process modifier // Validate and process modifier
let hasFileExtension = false; let hasFileExtension = false;
if (modifierSeperator) { if (modifierSeperator) {