h-data: Sanitize html during Podcast/Episode parsing.

This commit is contained in:
Jordan Petridis 2018-04-03 17:13:57 +03:00
parent 7ba834ee8d
commit 3d98600126
7 changed files with 11 additions and 12 deletions

4
Cargo.lock generated
View File

@ -696,7 +696,6 @@ dependencies = [
name = "hammond-gtk" name = "hammond-gtk"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"ammonia 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"chrono 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -741,8 +740,9 @@ dependencies = [
[[package]] [[package]]
name = "html2pango" name = "html2pango"
version = "0.1.0" version = "0.1.0"
source = "git+https://gitlab.gnome.org/danigm/html2pango#2e55f7587a2e7d75cf3ceed814fd473d60384dd2" source = "git+https://gitlab.gnome.org/danigm/html2pango#6dda855642d7d3cac0f1873106f2c93dc55ef293"
dependencies = [ dependencies = [
"ammonia 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
] ]

View File

@ -39,6 +39,7 @@ extern crate lazy_static;
#[macro_use] #[macro_use]
extern crate log; extern crate log;
extern crate ammonia;
extern crate chrono; extern crate chrono;
extern crate futures; extern crate futures;
extern crate futures_cpupool; extern crate futures_cpupool;

View File

@ -1,3 +1,4 @@
use ammonia;
use diesel; use diesel;
use diesel::prelude::*; use diesel::prelude::*;
use rfc822_sanitizer::parse_from_rfc2822_with_fallback as parse_rfc822; use rfc822_sanitizer::parse_from_rfc2822_with_fallback as parse_rfc822;
@ -230,7 +231,7 @@ impl NewEpisodeMinimal {
pub(crate) fn into_new_episode(self, item: &rss::Item) -> NewEpisode { pub(crate) fn into_new_episode(self, item: &rss::Item) -> NewEpisode {
let length = || -> Option<i32> { item.enclosure().map(|x| x.length().parse().ok())? }(); let length = || -> Option<i32> { item.enclosure().map(|x| x.length().parse().ok())? }();
let description = item.description().map(|s| s.to_owned()); let description = item.description().map(|s| ammonia::clean(s));
NewEpisodeBuilder::default() NewEpisodeBuilder::default()
.title(self.title) .title(self.title)
@ -404,7 +405,7 @@ mod tests {
static ref EXPECTED_LUP_1: NewEpisode = { static ref EXPECTED_LUP_1: NewEpisode = {
let descr = "Audit your network with a couple of easy commands on Kali Linux. Chris \ let descr = "Audit your network with a couple of easy commands on Kali Linux. Chris \
decides to blow off a little steam by attacking his IoT devices, Wes has \ decides to blow off a little steam by attacking his IoT devices, Wes has \
the scope on Equifax blaming open source & the Beard just saved the \ the scope on Equifax blaming open source &amp; the Beard just saved the \
show. Its a really packed episode!"; show. Its a really packed episode!";
NewEpisodeBuilder::default() NewEpisodeBuilder::default()
@ -427,7 +428,7 @@ mod tests {
concerns. But as the project takes on a new level of relevance, decisions for \ concerns. But as the project takes on a new level of relevance, decisions for \
the next version of Gnome have us worried about the future.</p>\n\n<p>Plus we \ the next version of Gnome have us worried about the future.</p>\n\n<p>Plus we \
chat with Wimpy about the Ubuntu Rally in NYC, Microsofts sneaky move to turn \ chat with Wimpy about the Ubuntu Rally in NYC, Microsofts sneaky move to turn \
Windows 10 into the ULTIMATE LINUX RUNTIME, community news & more!</p>"; Windows 10 into the ULTIMATE LINUX RUNTIME, community news &amp; more!</p>";
NewEpisodeBuilder::default() NewEpisodeBuilder::default()
.title("Gnome Does it Again | LUP 213") .title("Gnome Does it Again | LUP 213")

View File

@ -1,3 +1,4 @@
use ammonia;
use diesel; use diesel;
use diesel::prelude::*; use diesel::prelude::*;
use rss; use rss;
@ -88,7 +89,7 @@ impl NewPodcast {
pub(crate) fn new(chan: &rss::Channel, source_id: i32) -> NewPodcast { pub(crate) fn new(chan: &rss::Channel, source_id: i32) -> NewPodcast {
let title = chan.title().trim(); let title = chan.title().trim();
let description = chan.description().trim(); let description = ammonia::clean(chan.description().trim());
let link = url_cleaner(chan.link()); let link = url_cleaner(chan.link());
let itunes_img = chan.itunes_ext() let itunes_img = chan.itunes_ext()
.and_then(|s| s.image()) .and_then(|s| s.image())

View File

@ -6,7 +6,6 @@ version = "0.1.0"
workspace = "../" workspace = "../"
[dependencies] [dependencies]
ammonia = "1.1.0"
chrono = "0.4.1" chrono = "0.4.1"
gdk = "0.8.0" gdk = "0.8.0"
gdk-pixbuf = "0.4.0" gdk-pixbuf = "0.4.0"

View File

@ -23,7 +23,6 @@ extern crate log;
#[macro_use] #[macro_use]
extern crate pretty_assertions; extern crate pretty_assertions;
extern crate ammonia;
extern crate chrono; extern crate chrono;
extern crate hammond_data; extern crate hammond_data;
extern crate hammond_downloader; extern crate hammond_downloader;

View File

@ -1,9 +1,8 @@
use failure::Error; use failure::Error;
// use glib; // use glib;
use ammonia;
use gtk; use gtk;
use gtk::prelude::*; use gtk::prelude::*;
use html2pango::markup as html_to_pango_markup; use html2pango::markup_from_raw;
use open; use open;
use hammond_data::Podcast; use hammond_data::Podcast;
@ -118,8 +117,7 @@ impl ShowWidget {
/// Set the descripton text. /// Set the descripton text.
fn set_description(&self, text: &str) { fn set_description(&self, text: &str) {
self.description self.description.set_markup(&markup_from_raw(text));
.set_markup(&ammonia::clean(&html_to_pango_markup(text)));
} }
/// Set scrolled window vertical adjustment. /// Set scrolled window vertical adjustment.