fix: url base

This commit is contained in:
DIYgod
2019-08-28 15:50:05 +08:00
parent 84fdea3d1e
commit b2355436cc
3 changed files with 47 additions and 16 deletions
+10 -2
View File
@@ -38,6 +38,14 @@ module.exports = async (ctx, next) => {
ctx.state.data.item.forEach((item) => {
if (item.description) {
const $ = cheerio.load(item.description);
let baseUrl = item.link || ctx.state.data.link;
if (!baseUrl.match(/^https?:\/\//)) {
if (baseUrl.match(/^\/\//)) {
baseUrl = 'http:' + baseUrl;
} else {
baseUrl = 'http://' + baseUrl;
}
}
$('script').remove();
@@ -46,7 +54,7 @@ module.exports = async (ctx, next) => {
// absolute link
if (ctx.state.data.link) {
$ele.attr('href', new URL($ele.attr('href'), item.link || ctx.state.data.link).href);
$ele.attr('href', new URL($ele.attr('href'), baseUrl).href);
}
});
@@ -66,7 +74,7 @@ module.exports = async (ctx, next) => {
// absolute link
if (ctx.state.data.link) {
$ele.attr('src', new URL($ele.attr('src'), item.link || ctx.state.data.link).href);
$ele.attr('src', new URL($ele.attr('src'), baseUrl).href);
}
// referrerpolicy
+23 -6
View File
@@ -32,18 +32,35 @@ module.exports = async (ctx) => {
} else if (ctx.params.id === 'complicated') {
item.push({
title: `Complicated Title`,
description: `<script>alert(1);</script>
<a href="https://github.com/DIYgod/RSSHub/issues/0"></a>
<a href="/DIYgod/RSSHub/issues/0"></a>
description: `<a href="/DIYgod/RSSHub"></a>
<img src="/DIYgod/RSSHub.jpg">
<script>alert(1);</script>
<a href="http://mock.com/DIYgod/RSSHub"></a>
<img src="/DIYgod/RSSHub.jpg" data-src="/DIYgod/RSSHub0.jpg">
<img data-src="/DIYgod/RSSHub.jpg">
<img data-mock="/DIYgod/RSSHub.png">
<img mock="/DIYgod/RSSHub.gif">
<img src="https://github.com/DIYgod/DIYgod/RSSHub">
<img src="http://mock.com/DIYgod/DIYgod/RSSHub">
<img src="/DIYgod/RSSHub.jpg" onclick="alert(1);" onerror="alert(1);" onload="alert(1);">`,
pubDate: new Date(`2018-3-1`).toUTCString(),
link: `https://github.com/DIYgod/RSSHub/issues/0`,
author: `DIYgod0`,
link: `mock.com/DIYgod/RSSHub`,
author: `DIYgod`,
});
item.push({
title: `Complicated Title`,
description: `<a href="/DIYgod/RSSHub"></a>
<img src="/DIYgod/RSSHub.jpg">`,
pubDate: new Date(`2018-3-1`).toUTCString(),
link: `//mock.com/DIYgod/RSSHub`,
author: `DIYgod`,
});
item.push({
title: `Complicated Title`,
description: `<a href="/DIYgod/RSSHub"></a>
<img src="/DIYgod/RSSHub.jpg">`,
pubDate: new Date(`2018-3-1`).toUTCString(),
link: `https://mock.com/DIYgod/RSSHub`,
author: `DIYgod`,
});
}
+14 -8
View File
@@ -150,13 +150,19 @@ describe('complicated_description', () => {
const response = await request.get('/test/complicated');
expect(response.status).toBe(200);
const parsed = await parser.parseString(response.text);
expect(parsed.items[0].content).toBe(`<a href="https://github.com/DIYgod/RSSHub/issues/0"></a>
<a href="https://github.com/DIYgod/RSSHub/issues/0"></a>
<img src="https://github.com/DIYgod/RSSHub.jpg" data-src="/DIYgod/RSSHub0.jpg" referrerpolicy="no-referrer">
<img data-src="/DIYgod/RSSHub.jpg" src="https://github.com/DIYgod/RSSHub.jpg" referrerpolicy="no-referrer">
<img data-mock="/DIYgod/RSSHub.png" src="https://github.com/DIYgod/RSSHub.png" referrerpolicy="no-referrer">
<img mock="/DIYgod/RSSHub.gif" src="https://github.com/DIYgod/RSSHub.gif" referrerpolicy="no-referrer">
<img src="https://github.com/DIYgod/DIYgod/RSSHub" referrerpolicy="no-referrer">
<img src="https://github.com/DIYgod/RSSHub.jpg" referrerpolicy="no-referrer">`);
expect(parsed.items[0].content).toBe(`<a href="http://mock.com/DIYgod/RSSHub"></a>
<img src="http://mock.com/DIYgod/RSSHub.jpg" referrerpolicy="no-referrer">
<a href="http://mock.com/DIYgod/RSSHub"></a>
<img src="http://mock.com/DIYgod/RSSHub.jpg" data-src="/DIYgod/RSSHub0.jpg" referrerpolicy="no-referrer">
<img data-src="/DIYgod/RSSHub.jpg" src="http://mock.com/DIYgod/RSSHub.jpg" referrerpolicy="no-referrer">
<img data-mock="/DIYgod/RSSHub.png" src="http://mock.com/DIYgod/RSSHub.png" referrerpolicy="no-referrer">
<img mock="/DIYgod/RSSHub.gif" src="http://mock.com/DIYgod/RSSHub.gif" referrerpolicy="no-referrer">
<img src="http://mock.com/DIYgod/DIYgod/RSSHub" referrerpolicy="no-referrer">
<img src="http://mock.com/DIYgod/RSSHub.jpg" referrerpolicy="no-referrer">`);
expect(parsed.items[1].content).toBe(`<a href="http://mock.com/DIYgod/RSSHub"></a>
<img src="http://mock.com/DIYgod/RSSHub.jpg" referrerpolicy="no-referrer">`);
expect(parsed.items[2].content).toBe(`<a href="https://mock.com/DIYgod/RSSHub"></a>
<img src="https://mock.com/DIYgod/RSSHub.jpg" referrerpolicy="no-referrer">`);
});
});