public static OpAttributes Sanitize(JToken dirtyAttrs) { var cleanAttrs = new OpAttributes(); if (dirtyAttrs == null || dirtyAttrs.Type != JTokenType.Object) { return(cleanAttrs); } var font = dirtyAttrs.GetStringValue("font"); if (!String.IsNullOrEmpty(font) && IsValidFontName(font)) { cleanAttrs.Font = font; } var size = dirtyAttrs.GetStringValue("size"); if (!String.IsNullOrEmpty(size) && IsValidSize(size)) { cleanAttrs.Size = size; } var link = dirtyAttrs.GetStringValue("link"); if (!String.IsNullOrEmpty(link)) { cleanAttrs.Link = UrlHelpers.Sanitize(link); } var target = dirtyAttrs.GetStringValue("target"); if (!String.IsNullOrEmpty(target) && IsValidTarget(target)) { cleanAttrs.Target = target; } cleanAttrs.Script = ScriptConverter.GetEnumValue( dirtyAttrs.GetStringValue("script")); cleanAttrs.List = ListConverter.GetEnumValue( dirtyAttrs.GetStringValue("list")); var header = dirtyAttrs.GetIntValue("header"); if (header.HasValue && header.Value > 0) { cleanAttrs.Header = Math.Min(header.Value, 6); } cleanAttrs.Align = AlignConverter.GetEnumValue( dirtyAttrs.GetStringValue("align")); cleanAttrs.Direction = DirectionConverter.GetEnumValue( dirtyAttrs.GetStringValue("direction")); var indent = dirtyAttrs.GetIntValue("indent"); if (indent.HasValue) { cleanAttrs.Indent = Math.Min((int)indent.Value, 30); } var width = dirtyAttrs.GetStringValue("width"); if (!String.IsNullOrEmpty(width) && IsValidWidth(width)) { cleanAttrs.Width = width; } cleanAttrs.Bold = dirtyAttrs.GetBoolValue("bold"); cleanAttrs.Italic = dirtyAttrs.GetBoolValue("italic"); cleanAttrs.Underline = dirtyAttrs.GetBoolValue("underline"); cleanAttrs.Strike = dirtyAttrs.GetBoolValue("strike"); cleanAttrs.Code = dirtyAttrs.GetBoolValue("code"); cleanAttrs.Blockquote = dirtyAttrs.GetBoolValue("blockquote"); cleanAttrs.CodeBlock = dirtyAttrs.GetBoolValue("code-block"); cleanAttrs.RenderAsBlock = dirtyAttrs.GetBoolValue("renderAsBlock"); cleanAttrs.Background = GetColour(dirtyAttrs.GetStringValue("background")); cleanAttrs.Color = GetColour(dirtyAttrs.GetStringValue("color")); var mentions = dirtyAttrs.GetBoolValue("mentions"); var mentionToken = dirtyAttrs["mention"]; if (mentionToken != null) { var mention = mentionToken.Value <JObject>(); if (mentions.HasValue && mentions.Value && mention != null) { var sanitizedMention = MentionSanitizer.Sanitize(mention); if (sanitizedMention.AnySet) { cleanAttrs.Mentions = true; cleanAttrs.Mention = sanitizedMention; } } } foreach (var kv in (JObject)dirtyAttrs) { if (s_sanitizedAttributes.Contains(kv.Key)) { continue; } if (cleanAttrs.CustomAttributes == null) { cleanAttrs.CustomAttributes = new Dictionary <string, JToken>(); } cleanAttrs.CustomAttributes.Add(kv.Key, kv.Value); } return(cleanAttrs); }
public IList <string> GetTags() { var attrs = _op.Attributes; // embeds if (!_op.IsText()) { return(new string[] { _op.IsVideo() ? "iframe" : _op.IsImage() ? "img" : "span" // formula }); } // blocks var positionTag = String.IsNullOrEmpty(_options.ParagraphTag) ? "p" : _options.ParagraphTag; if (attrs.Blockquote == true) { return(new string[] { "blockquote" }); } if (attrs.CodeBlock == true) { return(new string[] { "pre" }); } if (attrs.List.HasValue) { return(new string[] { _options.ListItemTag }); } if (attrs.Header > 0) { return(new string[] { "h" + attrs.Header.Value }); } if (attrs.Align.HasValue || attrs.Direction.HasValue || attrs.Indent.HasValue) { return(new string[] { positionTag }); } // inlines var result = new List <string>(); if (!String.IsNullOrEmpty(attrs.Link)) { result.Add("a"); } if (attrs.Mentions) { result.Add("a"); } if (attrs.Script.HasValue) { result.Add(ScriptConverter.GetTag(attrs.Script.Value)); } if (attrs.Bold == true) { result.Add("strong"); } if (attrs.Italic == true) { result.Add("em"); } if (attrs.Strike == true) { result.Add("s"); } if (attrs.Underline == true) { result.Add("u"); } if (attrs.Code == true) { result.Add("code"); } return(result); }