import $ from "jquery";
export function sanitizeHtml(msg: string): string {
const $div = $("
").html(msg);
const whitelist = {
tags: "br,a,img,center,b,font",
attrs: ["href","color"],
href: ["http://","https://","ftp://","//"]
};
// remove all tags, attributes, and href protocols except some
enforceTagWhitelist($div, whitelist.tags);
enforceAttrWhitelist($div, whitelist.attrs);
enforceHrefWhitelist($div, whitelist.href);
return $div.html();
}
function enforceTagWhitelist($el: JQuery, tags: string): void {
$el.find("*").not(tags).each(function() {
$(this).replaceWith(this.innerHTML);
});
}
function enforceAttrWhitelist($el: JQuery, attrs: string[]): void {
$el.find("*").each(function() {
var attributes = this.attributes;
var i = attributes.length;
while( i-- ) {
var attr = attributes[i];
if( $.inArray(attr.name,attrs) === -1 )
this.removeAttributeNode(attr);
}
});
}
function enforceHrefWhitelist($el: JQuery, hrefs: string[]): void {
$el.find("[href]").each(function() {
const $_el = $(this);
const attributeValue = $_el.attr("href");
for (let protocol in hrefs) {
if (attributeValue.indexOf(hrefs[protocol]) === 0) {
$_el.attr("target", "_blank");
return;
}
}
$_el.removeAttr("href");
});
}