diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index fb92c82e..9c5d54cf 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -39,6 +39,7 @@ def queue_job job_params['current_user'] = (current_user.attribs || {}).to_h job_params['action_controller.params'] = params + job_params['session_id'] = session['guid'] #TODO: make sure you can safely serialize the params JobResolver.find_jobs(params).each do |job| diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 80033467..90ee93c0 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -44,7 +44,6 @@ def private end :protected def login - request.env['warden'].logout if github_authenticated? :default github_authenticate! :private end diff --git a/app/controllers/login_controller.rb b/app/controllers/login_controller.rb index 9bdc3cd2..34036efd 100644 --- a/app/controllers/login_controller.rb +++ b/app/controllers/login_controller.rb @@ -5,14 +5,12 @@ def logout redirect_to "/" end def public - request.env['warden'].logout if github_authenticated? :private github_authenticate! :default @user = gh.user @emails = @user.emails.all redirect_to params[:redirect_to] || "/" end def private - request.env['warden'].logout if github_authenticated? :default github_authenticate! :private @user = gh.user @emails = @user.emails.all diff --git a/app/views/shared/_analytics.html.erb b/app/views/shared/_analytics.html.erb index 7712ba33..9bd90d21 100644 --- a/app/views/shared/_analytics.html.erb +++ b/app/views/shared/_analytics.html.erb @@ -1,12 +1,19 @@ diff --git a/config/application.rb b/config/application.rb index a9d184c6..a65b210a 100644 --- a/config/application.rb +++ b/config/application.rb @@ -10,6 +10,7 @@ Bundler.require(*Rails.groups) require File.expand_path('../../lib/core_extensions/string', __FILE__) +require File.expand_path('../../lib/hu_board/middleware', __FILE__) Octokit.api_endpoint = ENV["GITHUB_API_ENDPOINT"] if ENV["GITHUB_API_ENDPOINT"] Octokit.web_endpoint = ENV["GITHUB_WEB_ENDPOINT"] if ENV["GITHUB_WEB_ENDPOINT"] @@ -79,6 +80,7 @@ class Application < Rails::Application config.middleware.use Rack::Attack config.middleware.use PDFKit::Middleware, {print_media_type: true}, only: %r[^/settings] + config.middleware.use HuBoard::Middleware::Session # !!! This addresses a Rails Behaviour that coaxes empty arrays in the params hash into nils # see https://github.com/rails/rails/pull/13188 diff --git a/lib/hu_board/middleware.rb b/lib/hu_board/middleware.rb new file mode 100644 index 00000000..2111f0fb --- /dev/null +++ b/lib/hu_board/middleware.rb @@ -0,0 +1 @@ +require_relative 'middleware/session' diff --git a/lib/hu_board/middleware/session.rb b/lib/hu_board/middleware/session.rb new file mode 100644 index 00000000..15866017 --- /dev/null +++ b/lib/hu_board/middleware/session.rb @@ -0,0 +1,17 @@ +module HuBoard + module Middleware + class Session + def initialize(app) + @app = app + end + + def call(env) + if env['rack.session']['guid'].nil? + env['rack.session']['guid'] = SecureRandom.uuid + end + + @app.call(env) + end + end + end +end diff --git a/vendor/engines/saas/app/jobs/analytics/identify_user_job.rb b/vendor/engines/saas/app/jobs/analytics/identify_user_job.rb index ac80be6c..248ca643 100644 --- a/vendor/engines/saas/app/jobs/analytics/identify_user_job.rb +++ b/vendor/engines/saas/app/jobs/analytics/identify_user_job.rb @@ -5,6 +5,7 @@ class IdentifyUserJob < AnalyticsJob def payload(params) { user_id: params['current_user']['id'] || "Anonymous", + anonymous_id: params['session_id'], traits: params['data'] } end diff --git a/vendor/engines/saas/app/jobs/analytics/page_job.rb b/vendor/engines/saas/app/jobs/analytics/page_job.rb index 87cc4b6a..c14f609b 100644 --- a/vendor/engines/saas/app/jobs/analytics/page_job.rb +++ b/vendor/engines/saas/app/jobs/analytics/page_job.rb @@ -6,6 +6,7 @@ def payload(params) user = params['current_user'] ? params['current_user']['id'] : "Anonymous" { user_id: user, + anonymous_id: params['session_id'], name: params['url'], properties: { url: params['url'] } } diff --git a/vendor/engines/saas/app/jobs/base_login_job.rb b/vendor/engines/saas/app/jobs/base_login_job.rb index fec4c429..74ac4c90 100644 --- a/vendor/engines/saas/app/jobs/base_login_job.rb +++ b/vendor/engines/saas/app/jobs/base_login_job.rb @@ -32,7 +32,8 @@ def map_user(params) { 'current_user' => params['user'], - 'data' => params['user'] + 'data' => params['user'], + 'session_id' => params['session_id'] } end end diff --git a/vendor/engines/saas/lib/saas/engine.rb b/vendor/engines/saas/lib/saas/engine.rb index d21fcef9..3a162ace 100644 --- a/vendor/engines/saas/lib/saas/engine.rb +++ b/vendor/engines/saas/lib/saas/engine.rb @@ -26,7 +26,8 @@ def page_job auth_request = request.params['code'] && request.params['state'] if request.referer !~ /github\.com/ && !logged_in? && !auth_request Analytics::PageJob.perform_later({ - 'url' => "/login/#{params['action']}" + 'url' => "/login/#{params['action']}", + 'session_id' => request.session['guid'] }) end end