From 73046066876d7f5146c8b1ef6827fa2a5f6ca608 Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 2 Dec 2015 15:16:41 +0100 Subject: [PATCH 01/26] bump travis-core --- Gemfile.lock | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 31c70b7b..71cb022d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,7 +50,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: 9a9f4caa2187734d34e98aa61ba5f4a61bc8a9f5 + revision: 6ce83e05afc07d412195d226b77a896e2b652146 specs: travis-core (0.0.1) actionmailer (~> 3.2.19) @@ -369,3 +369,6 @@ DEPENDENCIES travis-yaml! unicorn yard-sinatra! + +BUNDLED WITH + 1.10.6 From 6acf267a047f69d202590cc7166c3d17bc9d6e53 Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 2 Dec 2015 17:38:28 +0100 Subject: [PATCH 02/26] try to add a check for first_log_in but according to rkh it's possibly in the wrong place. What if there's no user?? --- lib/travis/api/app/endpoint/authorization.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 41b06e75..456ac0e8 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -194,6 +194,7 @@ class Travis::Api::App end end + def create_state state = SecureRandom.urlsafe_base64(16) redis.sadd('github:states', state) @@ -223,6 +224,16 @@ class Travis::Api::App super @user = ::User.find_by_github_id(data['id']) + check_first_login(@user) + # where is a user created if there is no user yet on our sytem + + end + + def check_first_login(user) + return if user.first_logged_in_at + puts "this is the first log in!!" + # user.update_attributes(first_logged_in_at: Time.now) + # #send event to customer.io end def info(attributes = {}) From f602ce09891c449178783df42cb444a06dfecc39 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 12:52:34 +0100 Subject: [PATCH 03/26] initial work: add check for frist log in --- lib/travis/api/app/endpoint/authorization.rb | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 456ac0e8..1084727e 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -95,6 +95,9 @@ class Travis::Api::App # * **redirect_uri**: URI to redirect to after handshake. get '/handshake' do handshake do |user, token, redirect_uri| + + check_first_login(@user) + if target_ok? redirect_uri content_type :html data = { user: user, token: token, uri: redirect_uri } @@ -156,6 +159,13 @@ class Travis::Api::App halt 403, "you are currently not allowed to perform this request. please contact support@travis-ci.com." end + def check_first_login(user) + return if user.first_logged_in_at + puts "this is the first log in!!" + # user.update_attributes(first_logged_in_at: Time.now) + # #send event to customer.io + end + def serialize_user(user) rendered = Travis::Api.data(user, version: :v2) rendered['user'].merge('token' => user.tokens.first.try(:token).to_s) @@ -224,18 +234,9 @@ class Travis::Api::App super @user = ::User.find_by_github_id(data['id']) - check_first_login(@user) - # where is a user created if there is no user yet on our sytem end - def check_first_login(user) - return if user.first_logged_in_at - puts "this is the first log in!!" - # user.update_attributes(first_logged_in_at: Time.now) - # #send event to customer.io - end - def info(attributes = {}) info = data.to_hash.slice('name', 'login', 'gravatar_id') info.merge! attributes.stringify_keys From 83b6bed1843e28016990e25211c1e5add1c0a09d Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 12:59:12 +0100 Subject: [PATCH 04/26] fix variable name --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 1084727e..710d84d1 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -96,7 +96,7 @@ class Travis::Api::App get '/handshake' do handshake do |user, token, redirect_uri| - check_first_login(@user) + check_first_login(user) if target_ok? redirect_uri content_type :html From a4bce14a73c9ad03d709312cd3ef0bad56363188 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 13:02:52 +0100 Subject: [PATCH 05/26] move method to handshake --- lib/travis/api/app/endpoint/authorization.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 710d84d1..e6081389 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -96,8 +96,6 @@ class Travis::Api::App get '/handshake' do handshake do |user, token, redirect_uri| - check_first_login(user) - if target_ok? redirect_uri content_type :html data = { user: user, token: token, uri: redirect_uri } @@ -195,6 +193,7 @@ class Travis::Api::App user = user_for_github_token(github_token) token = generate_token(user: user, app_id: 0) payload = params[:state].split(":::", 2)[1] + check_first_login(user) yield serialize_user(user), token, payload else values[:state] = create_state From 0ecbd8b2374c2a1d752d96fc8010e647f4fc8a30 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 15:04:50 +0100 Subject: [PATCH 06/26] add customerio gem and event --- Gemfile | 1 + Gemfile.lock | 8 ++++++++ lib/travis/api/app/endpoint/authorization.rb | 12 +++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 9334227c..ce0fe1b8 100644 --- a/Gemfile +++ b/Gemfile @@ -33,6 +33,7 @@ gem 'skylight', '~> 0.6.0.beta.1' gem 'stackprof' gem 'jemalloc' +gem 'customerio' group :test do gem 'rspec', '~> 2.13' diff --git a/Gemfile.lock b/Gemfile.lock index 71cb022d..24c64a46 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -157,6 +157,9 @@ GEM composite_primary_keys (5.0.14) activerecord (~> 3.2.0, >= 3.2.9) connection_pool (2.1.1) + customerio (0.6.1) + httparty (>= 0.5, < 0.12) + multi_json (~> 1.0) dalli (2.7.2) data_migrations (0.0.1) activerecord @@ -187,6 +190,9 @@ GEM hashr (0.0.22) hike (1.2.3) hitimes (1.2.3) + httparty (0.11.0) + multi_json (~> 1.0) + multi_xml (>= 0.5.2) httpclient (2.7.0.1) i18n (0.7.0) ice_nine (0.11.1) @@ -215,6 +221,7 @@ GEM mocha (0.14.0) metaclass (~> 0.0.1) multi_json (1.11.2) + multi_xml (0.5.5) multipart-post (2.0.0) net-http-persistent (2.9.4) net-http-pipeline (1.0.1) @@ -335,6 +342,7 @@ PLATFORMS DEPENDENCIES active_model_serializers bunny (~> 0.8.0) + customerio dalli database_cleaner (~> 0.8.0) factory_girl (~> 2.4.0) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index e6081389..2c8b8403 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -160,8 +160,18 @@ class Travis::Api::App def check_first_login(user) return if user.first_logged_in_at puts "this is the first log in!!" + # send event to customer.io + customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) + $customerio.identify( + :id => user.id, + :name => user.name, + :login => user.login, + :email => user.email, + :created_at => user.created_at.to_i, + :github_id => user.github_id, + :education => user.education + ) # user.update_attributes(first_logged_in_at: Time.now) - # #send event to customer.io end def serialize_user(user) From e1aee4a3b077ad97c9854ac84bfa5717cc52af20 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 15:13:26 +0100 Subject: [PATCH 07/26] add require for customerio --- lib/travis/api/app/endpoint/authorization.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 2c8b8403..08b89aef 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -2,6 +2,7 @@ require 'travis/api/app' require 'addressable/uri' require 'faraday' require 'securerandom' +require 'customerio' class Travis::Api::App class Endpoint From dcc92491f79f873c923e823fb332c576d89a394b Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 15:18:14 +0100 Subject: [PATCH 08/26] remove global variable syntax error --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 08b89aef..0de40030 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -163,7 +163,7 @@ class Travis::Api::App puts "this is the first log in!!" # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) - $customerio.identify( + customerio.identify( :id => user.id, :name => user.name, :login => user.login, From d587b766f328a05c92d623904763963326618ce5 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 15:25:21 +0100 Subject: [PATCH 09/26] create payload hash --- lib/travis/api/app/endpoint/authorization.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 0de40030..abc5b84f 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -163,15 +163,17 @@ class Travis::Api::App puts "this is the first log in!!" # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) - customerio.identify( + puts "customerio client set up" + payload = { :id => user.id, :name => user.name, :login => user.login, :email => user.email, :created_at => user.created_at.to_i, :github_id => user.github_id, - :education => user.education - ) + :education => user.education } + puts "about to identify" + payload.inspect + customerio.identify( payload ) ) # user.update_attributes(first_logged_in_at: Time.now) end From cc14ebac4890358a74105dbbcc72a17b2f4441f1 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 15:26:58 +0100 Subject: [PATCH 10/26] fix syntax error --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index abc5b84f..1b685491 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -173,7 +173,7 @@ class Travis::Api::App :github_id => user.github_id, :education => user.education } puts "about to identify" + payload.inspect - customerio.identify( payload ) ) + customerio.identify( payload ) # user.update_attributes(first_logged_in_at: Time.now) end From a3e83659f7368c4d200e3c57d10b096f40e80c4d Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 15:57:14 +0100 Subject: [PATCH 11/26] tidy up customerio code --- lib/travis/api/app/endpoint/authorization.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 1b685491..ef3603df 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -163,7 +163,6 @@ class Travis::Api::App puts "this is the first log in!!" # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) - puts "customerio client set up" payload = { :id => user.id, :name => user.name, @@ -172,8 +171,7 @@ class Travis::Api::App :created_at => user.created_at.to_i, :github_id => user.github_id, :education => user.education } - puts "about to identify" + payload.inspect - customerio.identify( payload ) + customerio.identify(payload) # user.update_attributes(first_logged_in_at: Time.now) end From 28fde8333ad392c9b97b8858017950e1f7b31c13 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 16:30:04 +0100 Subject: [PATCH 12/26] remove json --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index ef3603df..cab9813d 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -162,7 +162,7 @@ class Travis::Api::App return if user.first_logged_in_at puts "this is the first log in!!" # send event to customer.io - customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) + customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key) payload = { :id => user.id, :name => user.name, From 16817ff98e22d7868ff80d108b73a213c50090a6 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 16:35:53 +0100 Subject: [PATCH 13/26] trying json false --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index cab9813d..98fc0c82 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -162,7 +162,7 @@ class Travis::Api::App return if user.first_logged_in_at puts "this is the first log in!!" # send event to customer.io - customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key) + customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => false) payload = { :id => user.id, :name => user.name, From 98080beeaf6c310c19db84ed5a0468c4340e1b8e Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 3 Dec 2015 16:47:26 +0100 Subject: [PATCH 14/26] revert to json true --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 98fc0c82..ef3603df 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -162,7 +162,7 @@ class Travis::Api::App return if user.first_logged_in_at puts "this is the first log in!!" # send event to customer.io - customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => false) + customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) payload = { :id => user.id, :name => user.name, From a7fa8f6a6f439952642f81ce5a82969511672d9f Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 12:53:51 +0100 Subject: [PATCH 15/26] update first_log_in --- lib/travis/api/app/endpoint/authorization.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index ef3603df..483de03a 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -160,7 +160,10 @@ class Travis::Api::App def check_first_login(user) return if user.first_logged_in_at - puts "this is the first log in!!" + puts "******** This is the first log in for " + user.login + " **********" + # update user + timestamp = Time.now + user.update_attributes(first_logged_in_at: timestamp) # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) payload = { @@ -170,9 +173,9 @@ class Travis::Api::App :email => user.email, :created_at => user.created_at.to_i, :github_id => user.github_id, - :education => user.education } + :education => user.education, + :first_logged_in_at => timestamp.to_i} customerio.identify(payload) - # user.update_attributes(first_logged_in_at: Time.now) end def serialize_user(user) From a638aee0ffc4f7fe85d948e85af045845cad8786 Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 13:08:14 +0100 Subject: [PATCH 16/26] bump core, add log output --- Gemfile | 2 +- Gemfile.lock | 5 +++-- lib/travis/api/app/endpoint/authorization.rb | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index ce0fe1b8..3f463516 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ ruby '2.1.6' if ENV.key?('DYNO') gem 's3', github: 'travis-ci/s3' -gem 'travis-core', github: 'travis-ci/travis-core' +gem 'travis-core', github: 'travis-ci/travis-core', branch: 'cd-add-first-logged-in' gem 'travis-support', github: 'travis-ci/travis-support' gem 'travis-config', '~> 0.1.0' gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil diff --git a/Gemfile.lock b/Gemfile.lock index 24c64a46..cf97dc51 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,7 +50,8 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: 6ce83e05afc07d412195d226b77a896e2b652146 + revision: a89fdc039713ff20a0a62c0fcd35b03d042a23a8 + branch: cd-add-first-logged-in specs: travis-core (0.0.1) actionmailer (~> 3.2.19) @@ -322,7 +323,7 @@ GEM treetop (1.4.15) polyglot polyglot (>= 0.3.1) - tzinfo (0.3.45) + tzinfo (0.3.46) unicorn (4.8.3) kgio (~> 2.6) rack diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 483de03a..4a1470ad 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -163,6 +163,7 @@ class Travis::Api::App puts "******** This is the first log in for " + user.login + " **********" # update user timestamp = Time.now + puts "Updating first_logged_in_at with " + timestamp user.update_attributes(first_logged_in_at: timestamp) # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) @@ -175,6 +176,7 @@ class Travis::Api::App :github_id => user.github_id, :education => user.education, :first_logged_in_at => timestamp.to_i} + puts "Sending payload to Customer.io: " + payload customerio.identify(payload) end From d42e33799611c7834f74b91c019a53eb0c67c13d Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 13:14:14 +0100 Subject: [PATCH 17/26] convert timestamp to s --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 4a1470ad..7039328b 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -163,7 +163,7 @@ class Travis::Api::App puts "******** This is the first log in for " + user.login + " **********" # update user timestamp = Time.now - puts "Updating first_logged_in_at with " + timestamp + puts "Updating first_logged_in_at with " + timestamp.to_s user.update_attributes(first_logged_in_at: timestamp) # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) From 13e6959b213826b6a68cd161f5fcf23d4ef50589 Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 14:52:53 +0100 Subject: [PATCH 18/26] convert ahsh to string --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 7039328b..c2eb4ec1 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -176,7 +176,7 @@ class Travis::Api::App :github_id => user.github_id, :education => user.education, :first_logged_in_at => timestamp.to_i} - puts "Sending payload to Customer.io: " + payload + puts "Sending payload to Customer.io: " + payload.to_s customerio.identify(payload) end From e9533fb056cfd093c2629e223c8833ce2af322b3 Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 14:55:20 +0100 Subject: [PATCH 19/26] bump travis-core --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index cf97dc51..c2fd6333 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,7 +50,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: a89fdc039713ff20a0a62c0fcd35b03d042a23a8 + revision: f46605dd4e6beebdb767e6b832277e222dbf980b branch: cd-add-first-logged-in specs: travis-core (0.0.1) From 94c2edfbe1217998d4c068eed2ba537c7a95db93 Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 15:23:55 +0100 Subject: [PATCH 20/26] remove debug messages and add rescues --- lib/travis/api/app/endpoint/authorization.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index c2eb4ec1..7e7786c7 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -159,12 +159,11 @@ class Travis::Api::App end def check_first_login(user) - return if user.first_logged_in_at - puts "******** This is the first log in for " + user.login + " **********" + return unless Travis.config.customerio.site_id # update user - timestamp = Time.now - puts "Updating first_logged_in_at with " + timestamp.to_s - user.update_attributes(first_logged_in_at: timestamp) + unless user.first_logged_in_at + user.update_attributes(first_logged_in_at: Time.now) + end # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) payload = { @@ -175,9 +174,10 @@ class Travis::Api::App :created_at => user.created_at.to_i, :github_id => user.github_id, :education => user.education, - :first_logged_in_at => timestamp.to_i} - puts "Sending payload to Customer.io: " + payload.to_s + :first_logged_in_at => user.first_logged_in_at} customerio.identify(payload) + rescue StandardError => e + Travis.logger.error "Could not update Customer.io for User: #{user.id}:#{user.login} with message:#{e.message}" end def serialize_user(user) From 553700d402dda7518a49d4448ef5916e2049625a Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 16:10:44 +0100 Subject: [PATCH 21/26] add email to user --- lib/travis/api/app/endpoint/authorization.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 7e7786c7..5ae500aa 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -162,7 +162,8 @@ class Travis::Api::App return unless Travis.config.customerio.site_id # update user unless user.first_logged_in_at - user.update_attributes(first_logged_in_at: Time.now) + email = GH.with(token: user.github_oauth_token, client_id: nil) { GH['user/emails'] }.select { |e| e['primary'] }.first['email'] + user.update_attributes(email:, email, first_logged_in_at: Time.now) end # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) @@ -171,7 +172,7 @@ class Travis::Api::App :name => user.name, :login => user.login, :email => user.email, - :created_at => user.created_at.to_i, + :created_at => user.created_at, :github_id => user.github_id, :education => user.education, :first_logged_in_at => user.first_logged_in_at} From 8fc9ade6deb93edb2c9ed95424ccd279a3c13af4 Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 16:11:45 +0100 Subject: [PATCH 22/26] bump travis-core --- Gemfile | 2 +- Gemfile.lock | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 3f463516..ce0fe1b8 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ ruby '2.1.6' if ENV.key?('DYNO') gem 's3', github: 'travis-ci/s3' -gem 'travis-core', github: 'travis-ci/travis-core', branch: 'cd-add-first-logged-in' +gem 'travis-core', github: 'travis-ci/travis-core' gem 'travis-support', github: 'travis-ci/travis-support' gem 'travis-config', '~> 0.1.0' gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil diff --git a/Gemfile.lock b/Gemfile.lock index c2fd6333..d587bd84 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,8 +50,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: f46605dd4e6beebdb767e6b832277e222dbf980b - branch: cd-add-first-logged-in + revision: 90c2d1b67935f20fd117bc6d9bc02783312e27ba specs: travis-core (0.0.1) actionmailer (~> 3.2.19) From ff68df9fb5daec044d43d7ab54a3493c8abe1110 Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 16:13:52 +0100 Subject: [PATCH 23/26] fix syntax error --- lib/travis/api/app/endpoint/authorization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 5ae500aa..26ec2fa9 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -163,7 +163,7 @@ class Travis::Api::App # update user unless user.first_logged_in_at email = GH.with(token: user.github_oauth_token, client_id: nil) { GH['user/emails'] }.select { |e| e['primary'] }.first['email'] - user.update_attributes(email:, email, first_logged_in_at: Time.now) + user.update_attributes(email: email, first_logged_in_at: Time.now) end # send event to customer.io customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) From 8132258b2c84059f102b7125d782b94f58439f1f Mon Sep 17 00:00:00 2001 From: Josh Kalderimis Date: Fri, 4 Dec 2015 17:06:22 +0100 Subject: [PATCH 24/26] tiny updates to how we update the customer io info - alway fetch the primary email and don't save it to the user model as this may not match what is on github - move some bits into their own methods - high 5 @carlad for her awesome work --- lib/travis/api/app/endpoint/authorization.rb | 24 ++++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 26ec2fa9..7c0bcd3b 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -160,22 +160,23 @@ class Travis::Api::App def check_first_login(user) return unless Travis.config.customerio.site_id - # update user + + # update first login date if not set unless user.first_logged_in_at - email = GH.with(token: user.github_oauth_token, client_id: nil) { GH['user/emails'] }.select { |e| e['primary'] }.first['email'] - user.update_attributes(email: email, first_logged_in_at: Time.now) + user.update_attributes(first_logged_in_at: Time.now) end - # send event to customer.io - customerio = Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) + + # send event to customer.io payload = { :id => user.id, :name => user.name, :login => user.login, - :email => user.email, + :email => primary_email_for_user(user.github_oauth_token), :created_at => user.created_at, :github_id => user.github_id, :education => user.education, - :first_logged_in_at => user.first_logged_in_at} + :first_logged_in_at => user.first_logged_in_at + } customerio.identify(payload) rescue StandardError => e Travis.logger.error "Could not update Customer.io for User: #{user.id}:#{user.login} with message:#{e.message}" @@ -381,6 +382,15 @@ class Travis::Api::App def allowed_https_targets @allowed_https_targets ||= Travis.config.auth.target_origin.to_s.split(',') end + + def primary_email_for_user(oauth_token) + # check for the users primary email address (we don't store this info) + GH.with(token: oauth_token, client_id: nil) { GH['user/emails'] }.select { |e| e['primary'] }.first['email'] + end + + def customerio + Customerio::Client.new(Travis.config.customerio.site_id, Travis.config.customerio.api_key, :json => true) + end end end end From 82f280f5d3c7cbe36bac2f4a9d53dfad05b35fb8 Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 4 Dec 2015 17:11:18 +0100 Subject: [PATCH 25/26] convert timesptamps to i for better integration w customerio --- lib/travis/api/app/endpoint/authorization.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 7c0bcd3b..62e9d426 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -172,10 +172,10 @@ class Travis::Api::App :name => user.name, :login => user.login, :email => primary_email_for_user(user.github_oauth_token), - :created_at => user.created_at, + :created_at => user.created_at.to_i, :github_id => user.github_id, :education => user.education, - :first_logged_in_at => user.first_logged_in_at + :first_logged_in_at => user.first_logged_in_at.to_i } customerio.identify(payload) rescue StandardError => e From bbba45990df3616ea62b3055365e66feb4eb7140 Mon Sep 17 00:00:00 2001 From: Josh Kalderimis Date: Fri, 4 Dec 2015 17:31:06 +0100 Subject: [PATCH 26/26] a little method splitting action good times and high 5 @carlad --- lib/travis/api/app/endpoint/authorization.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/travis/api/app/endpoint/authorization.rb b/lib/travis/api/app/endpoint/authorization.rb index 62e9d426..441032c0 100644 --- a/lib/travis/api/app/endpoint/authorization.rb +++ b/lib/travis/api/app/endpoint/authorization.rb @@ -158,13 +158,15 @@ class Travis::Api::App halt 403, "you are currently not allowed to perform this request. please contact support@travis-ci.com." end - def check_first_login(user) - return unless Travis.config.customerio.site_id - - # update first login date if not set + # update first login date if not set + def update_first_login(user) unless user.first_logged_in_at user.update_attributes(first_logged_in_at: Time.now) end + end + + def update_customerio(user) + return unless Travis.config.customerio.site_id # send event to customer.io payload = { @@ -177,6 +179,7 @@ class Travis::Api::App :education => user.education, :first_logged_in_at => user.first_logged_in_at.to_i } + customerio.identify(payload) rescue StandardError => e Travis.logger.error "Could not update Customer.io for User: #{user.id}:#{user.login} with message:#{e.message}" @@ -211,7 +214,8 @@ class Travis::Api::App user = user_for_github_token(github_token) token = generate_token(user: user, app_id: 0) payload = params[:state].split(":::", 2)[1] - check_first_login(user) + update_first_login(user) + update_customerio(user) yield serialize_user(user), token, payload else values[:state] = create_state