From d217418bbe8ca08b7a91b34eee4f4fda52d88230 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 18:01:00 -0700 Subject: [PATCH 01/11] Adds a bit of logging --- app/assets/javascripts/backbone/views/show_activity.js.coffee | 2 ++ app/assets/templates/user_notification.jst.eco | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/backbone/views/show_activity.js.coffee b/app/assets/javascripts/backbone/views/show_activity.js.coffee index 13e5abf1..2a2b43a4 100644 --- a/app/assets/javascripts/backbone/views/show_activity.js.coffee +++ b/app/assets/javascripts/backbone/views/show_activity.js.coffee @@ -6,6 +6,8 @@ class Kandan.Views.ShowActivity extends Backbone.View render: ()-> activity = @options.activity.toJSON() activity.created_at = Kandan.Helpers.Utils.time_to_string(new Date(activity.created_at)) + console.log("Rendering activity:") + console.log(activity) if activity.action != "message" @compiled_template = JST['user_notification']({activity: activity}) else diff --git a/app/assets/templates/user_notification.jst.eco b/app/assets/templates/user_notification.jst.eco index 84ad31e4..b5a6218e 100644 --- a/app/assets/templates/user_notification.jst.eco +++ b/app/assets/templates/user_notification.jst.eco @@ -5,7 +5,7 @@ Kandan bot - <%= @activity.user.first_name %> <%= @activity.action %>ed <%- "#{@activity.content}" if @activity.action == "upload" %> + <%= @activity.user.first_name || @activity.user.email %> <%= @activity.action %>ed <%- "#{@activity.content}" if @activity.action == "upload" %> From 43bb7aa712b94fe90ad207842cfc514b14d17458 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 18:13:42 -0700 Subject: [PATCH 02/11] Add user email to the initial load --- app/controllers/channels_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/channels_controller.rb b/app/controllers/channels_controller.rb index c7997b25..bc37a578 100644 --- a/app/controllers/channels_controller.rb +++ b/app/controllers/channels_controller.rb @@ -12,7 +12,7 @@ def index more_activities = (channel.activities.count > Kandan::Config.options[:per_page]) channel.activities.order('id DESC').includes(:user).page.each do |activity| activities.push activity.attributes.merge({ - :user => activity.user.as_json(:only => [:id, :ido_id, :first_name, :last_name, :gravatar_hash, :active, :locale]) + :user => activity.user.as_json(:only => [:id, :ido_id, :email, :first_name, :last_name, :gravatar_hash, :active, :locale]) }) end From 75990f841d55393fdc95f1f4039ec269c57b0381 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 18:17:14 -0700 Subject: [PATCH 03/11] Restrict faye broadcast messages to only the necessary fields --- app/models/activity_observer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/activity_observer.rb b/app/models/activity_observer.rb index 139452cc..41ac8ac4 100644 --- a/app/models/activity_observer.rb +++ b/app/models/activity_observer.rb @@ -11,7 +11,7 @@ def after_save(activity) def message_broadcast_data(activity) faye_channel = "/channels/#{activity.channel.to_param}" broadcast_data = activity.attributes.merge({ - :user => activity.user.attributes, + :user => activity.user.as_json(:only => [:id, :ido_id, :email, :first_name, :last_name, :gravatar_hash, :active, :locale]), :channel => activity.channel.attributes }) [faye_channel, broadcast_data] @@ -22,7 +22,7 @@ def upload_broadcast_data(activity) broadcast_data = { :event => "attachment#upload", :entity => activity.attributes.merge({ - :user => activity.user.attributes, + :user => activity.user.as_json(:only => [:id, :ido_id, :email, :first_name, :last_name, :gravatar_hash, :active, :locale]), :channel => activity.channel.attributes }), :extra => { From df9783e5923a4a0877908e356c05935f922ff7e3 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 18:27:52 -0700 Subject: [PATCH 04/11] Escape incoming messages before any processes to avoid any malicious hijinks --- app/assets/javascripts/backbone/views/show_activity.js.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/javascripts/backbone/views/show_activity.js.coffee b/app/assets/javascripts/backbone/views/show_activity.js.coffee index 2a2b43a4..3dadc61f 100644 --- a/app/assets/javascripts/backbone/views/show_activity.js.coffee +++ b/app/assets/javascripts/backbone/views/show_activity.js.coffee @@ -7,6 +7,7 @@ class Kandan.Views.ShowActivity extends Backbone.View activity = @options.activity.toJSON() activity.created_at = Kandan.Helpers.Utils.time_to_string(new Date(activity.created_at)) console.log("Rendering activity:") + activity.content = _.escape(activity.content) console.log(activity) if activity.action != "message" @compiled_template = JST['user_notification']({activity: activity}) From 3c619520ca0f828b1de5266ab09a3abeaee04051 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 19:15:54 -0700 Subject: [PATCH 05/11] Avoid double-escaping strings --- app/assets/javascripts/backbone/views/show_activity.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/backbone/views/show_activity.js.coffee b/app/assets/javascripts/backbone/views/show_activity.js.coffee index 3dadc61f..2df99500 100644 --- a/app/assets/javascripts/backbone/views/show_activity.js.coffee +++ b/app/assets/javascripts/backbone/views/show_activity.js.coffee @@ -16,7 +16,7 @@ class Kandan.Views.ShowActivity extends Backbone.View if modified_message != false @compiled_template = modified_message else - @compiled_template = Kandan.Helpers.Activities.build_from_message_template $.extend(activity, {content: _.escape(activity.content)}) + @compiled_template = Kandan.Helpers.Activities.build_from_message_template activity $(@el).data('activity_id', activity.id) $(@el).attr('id', "activity-#{activity.id}") From 32f05ecbb9546f00856dc233e1094f758d13a2fd Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 19:59:50 -0700 Subject: [PATCH 06/11] Updates the image embedding plugin --- .../backbone/plugins/image_embed.js.coffee | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/backbone/plugins/image_embed.js.coffee b/app/assets/javascripts/backbone/plugins/image_embed.js.coffee index 6d999bd6..cfd7c316 100644 --- a/app/assets/javascripts/backbone/plugins/image_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/image_embed.js.coffee @@ -1,21 +1,27 @@ class Kandan.Plugins.ImageEmbed - @image_regex: /^http.*\.(jpg|jpeg|gif|png)/i - + @image_regex: /http.*\.(jpg|jpeg|gif|png)/i @image_template: _.template '''
-
<%= name %>
+
<%= subtitle %>
''' @init: ()-> - Kandan.Modifiers.register @image_regex, (message, state)=> - file_name = message.content.split("/").pop() + Kandan.Modifiers.register @image_regex, (message, state) => + url = message.content.match(@image_regex)[0] + fileName = url.split("/").pop() + comment = $.trim(message.content.split(url).join("")) + subtitle = null + subtitle = comment if comment.length > 0 + subtitle ||= fileName + message.content = @image_template({ image_url: message.content, - name: file_name + subtitle: subtitle }) - return Kandan.Helpers.Activities.build_from_message_template(message) \ No newline at end of file + + return Kandan.Helpers.Activities.build_from_message_template(message) From 70dd9e30f15eb3a096fbd9ab9c12ce0f9462f6e2 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 20:02:17 -0700 Subject: [PATCH 07/11] Use the extracted url for image embedding --- app/assets/javascripts/backbone/plugins/image_embed.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/backbone/plugins/image_embed.js.coffee b/app/assets/javascripts/backbone/plugins/image_embed.js.coffee index cfd7c316..7d3ffd23 100644 --- a/app/assets/javascripts/backbone/plugins/image_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/image_embed.js.coffee @@ -20,7 +20,7 @@ class Kandan.Plugins.ImageEmbed subtitle ||= fileName message.content = @image_template({ - image_url: message.content, + image_url: url, subtitle: subtitle }) From 05c0fbeb27cb76705826f49d25fce97e62a1d64e Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 20:40:08 -0700 Subject: [PATCH 08/11] Use the escaped regex as a stopgap solution --- app/assets/javascripts/backbone/plugins/me_announce.js.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/backbone/plugins/me_announce.js.coffee b/app/assets/javascripts/backbone/plugins/me_announce.js.coffee index 52a04514..d45b0bfd 100644 --- a/app/assets/javascripts/backbone/plugins/me_announce.js.coffee +++ b/app/assets/javascripts/backbone/plugins/me_announce.js.coffee @@ -1,10 +1,10 @@ class Kandan.Plugins.MeAnnounce - @regex: /^\/me / + @regex: /^/me / @init: ()-> Kandan.Modifiers.register @regex, (message, state)=> message.content = message.content.replace @regex, "#{message.user.first_name} " return Kandan.Helpers.Activities.build_from_base_template(message) -# Kandan.Plugins.register "Kandan.Plugins.MeAnnounce" \ No newline at end of file +# Kandan.Plugins.register "Kandan.Plugins.MeAnnounce" From 7a9a93c8d0000ae262c85595cbd95076456d05ba Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 20:45:19 -0700 Subject: [PATCH 09/11] Fall back to email when first name isn't present in the /me command --- app/assets/javascripts/backbone/plugins/me_announce.js.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/backbone/plugins/me_announce.js.coffee b/app/assets/javascripts/backbone/plugins/me_announce.js.coffee index d45b0bfd..30c89737 100644 --- a/app/assets/javascripts/backbone/plugins/me_announce.js.coffee +++ b/app/assets/javascripts/backbone/plugins/me_announce.js.coffee @@ -3,7 +3,8 @@ class Kandan.Plugins.MeAnnounce @regex: /^/me / @init: ()-> - Kandan.Modifiers.register @regex, (message, state)=> + Kandan.Modifiers.register @regex, (message, state) => + actor = message.user.first_name || message.user.email message.content = message.content.replace @regex, "#{message.user.first_name} " return Kandan.Helpers.Activities.build_from_base_template(message) From 6b0da8935b537f0fafe0c4c3cc0bda394e3694bc Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 20:52:05 -0700 Subject: [PATCH 10/11] Fix the youtube regex to be more flexible --- .../javascripts/backbone/plugins/youtube_embed.js.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee b/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee index cf1d5236..de0e779a 100644 --- a/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee @@ -1,6 +1,6 @@ class Kandan.Plugins.YouTubeEmbed - @youtube_regex: /^http(s)?:\/\/www.youtube.com\/watch/i + @youtube_regex: /^http(s)?.+www.youtube.com.+watch/i @youtube_id_regex: /\Wv=([\w|\-]*)/ @youtube_embed_template: _.template ''' @@ -19,4 +19,4 @@ class Kandan.Plugins.YouTubeEmbed video_url: message.content, thumb_url: thumb_url }) - return Kandan.Helpers.Activities.build_from_message_template(message) \ No newline at end of file + return Kandan.Helpers.Activities.build_from_message_template(message) From cb14e84c828c1b1339c48fb03ba54d0a66481080 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 11 Apr 2012 21:04:33 -0700 Subject: [PATCH 11/11] Enhancements to the youtube embedder --- .../backbone/plugins/youtube_embed.js.coffee | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee b/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee index de0e779a..9baea9e3 100644 --- a/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee @@ -8,15 +8,32 @@ class Kandan.Plugins.YouTubeEmbed +
<%= subtitle %>
''' @init: ()-> - Kandan.Modifiers.register @youtube_regex, (message, state)=> + Kandan.Modifiers.register @youtube_regex, (message, state) => + comment = null + + # No spaces in message content indicates just a link + if message.content.indexOf(" ") == -1 + video_url = message.content + else + # Spaces indicate a subtitle + comment = $.trim(message.content.substr(message.content.indexOf(" ") + 1)); + video_url = message.content.split(" ")[0] + video_id = message.content.match(@youtube_id_regex)[1] thumb_url = "http://img.youtube.com/vi/#{ video_id }/0.jpg" + + subtitle = null + subtitle = "Youtube: #{comment}" if comment? and comment.length > 0 + subtitle ||= video_url + message.content = @youtube_embed_template({ - video_url: message.content, - thumb_url: thumb_url + video_url: video_url, + thumb_url: thumb_url, + subtitle: subtitle }) return Kandan.Helpers.Activities.build_from_message_template(message)