diff --git a/assets/js/controllers.js b/assets/js/controllers.js index 77bb09c..a1c9be5 100644 --- a/assets/js/controllers.js +++ b/assets/js/controllers.js @@ -404,6 +404,26 @@ mailhogApp.controller('MailCtrl', function ($scope, $http, $sce, $timeout) { return content; } + + $scope.formatMessagePlain = function(message) { + var body = $scope.getMessagePlain(message); + var escaped = $scope.escapeHtml(body); + var formatted = escaped.replace(/(https?:\/\/)([-[\]A-Za-z0-9._~:/?#@!$()*+,;=%]|&|')+/g, '$&'); + return $sce.trustAsHtml(formatted); + } + + $scope.escapeHtml = function(html) { + var entityMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + return html.replace(/[&<>"']/g, function (s) { + return entityMap[s]; + }); + } $scope.getMessagePlain = function(message) { if (message.Content.Headers && message.Content.Headers["Content-Type"] && message.Content.Headers["Content-Type"][0].match("text/plain")) { @@ -414,7 +434,7 @@ mailhogApp.controller('MailCtrl', function ($scope, $http, $sce, $timeout) { return $scope.tryDecode(l); } return message.Content.Body; - } + } $scope.findMatchingMIME = function(part, mime) { // TODO cache results diff --git a/assets/templates/index.html b/assets/templates/index.html index 51f57c6..ce43481 100644 --- a/assets/templates/index.html +++ b/assets/templates/index.html @@ -186,7 +186,7 @@
-
{{ getMessagePlain(preview) }}
+
{{ getSource(preview) }}