From a9c304f1ef290e68fa9343c301bc4777b4bab9a3 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Mon, 3 Feb 2020 00:39:00 +0530 Subject: [PATCH] Feature: Twitter DM Integration (#451) An initial version of twitter integration Co-authored-by: Sojan Jose --- .env.example | 4 + .rubocop.yml | 3 + Gemfile | 3 + Gemfile.lock | 101 ++++++++++-------- app/controllers/api/v1/webhooks_controller.rb | 20 +++- .../dashboard/assets/images/Mask.png | Bin 0 -> 12998 bytes .../dashboard/assets/images/twitter-badge.png | Bin 0 -> 21985 bytes .../components/widgets/Thumbnail.vue | 7 ++ app/models/channel/twitter_profile.rb | 49 +++++++++ app/models/message.rb | 7 +- app/services/twitter/send_reply_service.rb | 24 +++++ config/initializers/twitter.rb | 8 ++ config/routes.rb | 3 + ...4190208_create_channel_twitter_profiles.rb | 12 +++ db/schema.rb | 14 ++- lib/webhooks/twitter.rb | 85 +++++++++++++++ spec/factories/channel/twitter_profiles.rb | 11 ++ .../twitter/twitter_message_create_event.rb | 37 +++++++ spec/lib/webhooks/twitter_spec.rb | 23 ++++ .../twitter/send_reply_service_spec.rb | 44 ++++++++ 20 files changed, 406 insertions(+), 49 deletions(-) create mode 100644 app/javascript/dashboard/assets/images/Mask.png create mode 100644 app/javascript/dashboard/assets/images/twitter-badge.png create mode 100644 app/models/channel/twitter_profile.rb create mode 100644 app/services/twitter/send_reply_service.rb create mode 100644 config/initializers/twitter.rb create mode 100644 db/migrate/20200124190208_create_channel_twitter_profiles.rb create mode 100644 lib/webhooks/twitter.rb create mode 100644 spec/factories/channel/twitter_profiles.rb create mode 100644 spec/factories/twitter/twitter_message_create_event.rb create mode 100644 spec/lib/webhooks/twitter_spec.rb create mode 100644 spec/services/twitter/send_reply_service_spec.rb diff --git a/.env.example b/.env.example index 599b1fb60..1b9cbb3e6 100644 --- a/.env.example +++ b/.env.example @@ -19,6 +19,10 @@ FB_VERIFY_TOKEN= FB_APP_SECRET= FB_APP_ID= +#twitter app +TWITTER_CONSUMER_KEY= +TWITTER_CONSUMER_SECRET= + #mail MAILER_SENDER_EMAIL=accounts@chatwoot.com SMTP_PORT=1025 diff --git a/.rubocop.yml b/.rubocop.yml index 09b36e576..a21f6eada 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -20,6 +20,9 @@ Style/GlobalVars: Exclude: - 'config/initializers/redis.rb' - 'lib/redis/alfred.rb' + - 'app/controllers/api/v1/webhooks_controller.rb' + - 'app/services/twitter/send_reply_service.rb' + - 'spec/services/twitter/send_reply_service_spec.rb' Metrics/BlockLength: Exclude: - spec/**/* diff --git a/Gemfile b/Gemfile index fd1d783e4..284e9bff7 100644 --- a/Gemfile +++ b/Gemfile @@ -61,6 +61,9 @@ gem 'chargebee' gem 'facebook-messenger' gem 'telegram-bot-ruby' gem 'twitter' +# twitty will handle subscription of twitter account events +gem 'twitty', git: 'https://github.com/chatwoot/twitty' + # facebook client gem 'koala' # Random name generator diff --git a/Gemfile.lock b/Gemfile.lock index cba93566b..3bf10b7ae 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,10 @@ +GIT + remote: https://github.com/chatwoot/twitty + revision: a005f8f6740fc8d2d3500701e1ab4ab0f1416c26 + specs: + twitty (0.1.0) + oauth + GEM remote: https://rubygems.org/ specs: @@ -66,15 +73,15 @@ GEM activerecord (>= 3.2, < 7.0) rake (>= 10.4, < 14.0) ast (2.4.0) - attr_extras (6.2.1) + attr_extras (6.2.2) aws-eventstream (1.0.3) - aws-partitions (1.262.0) - aws-sdk-core (3.86.0) + aws-partitions (1.268.0) + aws-sdk-core (3.89.1) aws-eventstream (~> 1.0, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.27.0) + aws-sdk-kms (1.28.0) aws-sdk-core (~> 3, >= 3.71.0) aws-sigv4 (~> 1.1) aws-sdk-s3 (1.60.1) @@ -101,10 +108,10 @@ GEM bootsnap (1.4.5) msgpack (~> 1.0) brakeman (4.7.2) - browser (2.7.1) + browser (3.0.3) buftok (0.2.0) builder (3.2.4) - bullet (6.0.2) + bullet (6.1.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) bundle-audit (0.1.0) @@ -112,8 +119,8 @@ GEM bundler-audit (0.6.1) bundler (>= 1.2.0, < 3) thor (~> 0.18) - byebug (11.0.1) - chargebee (2.7.1) + byebug (11.1.1) + chargebee (2.7.3) json_pure (~> 2.1) rest-client (>= 1.8, < 3.0) coderay (1.1.2) @@ -121,7 +128,7 @@ GEM descendants_tracker (~> 0.0.1) concurrent-ruby (1.1.5) connection_pool (2.2.2) - crass (1.0.5) + crass (1.0.6) declarative (0.0.10) declarative-option (0.1.0) descendants_tracker (0.0.4) @@ -156,14 +163,14 @@ GEM factory_bot_rails (5.1.1) factory_bot (~> 5.1.0) railties (>= 4.2.0) - faker (2.9.0) - i18n (>= 1.6, < 1.8) - faraday (0.17.1) + faker (2.10.1) + i18n (>= 1.6, < 2) + faraday (0.17.3) multipart-post (>= 1.2, < 3) - faraday_middleware (0.13.1) + faraday_middleware (0.14.0) faraday (>= 0.7.4, < 1.0) - ffi (1.11.3) - foreman (0.86.0) + ffi (1.12.1) + foreman (0.87.0) globalid (0.4.2) activesupport (>= 4.2.0) google-api-client (0.36.4) @@ -174,10 +181,12 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.0) signet (~> 0.12) - google-cloud-core (1.4.1) + google-cloud-core (1.5.0) google-cloud-env (~> 1.0) + google-cloud-errors (~> 1.0) google-cloud-env (1.3.0) faraday (~> 0.11) + google-cloud-errors (1.0.0) google-cloud-storage (1.25.1) addressable (~> 2.5) digest-crc (~> 0.4) @@ -202,13 +211,13 @@ GEM http-accept (1.7.0) http-cookie (1.0.3) domain_name (~> 0.5) - http-form_data (2.1.1) + http-form_data (2.2.0) http_parser.rb (0.6.0) httparty (0.17.3) mime-types (~> 3.0) multi_xml (>= 0.5.2) httpclient (2.8.3) - i18n (1.7.0) + i18n (1.8.2) concurrent-ruby (~> 1.0) ice_nine (0.11.2) inflecto (0.0.2) @@ -253,14 +262,14 @@ GEM memoizable (0.4.2) thread_safe (~> 0.3, >= 0.3.1) method_source (0.9.2) - mime-types (3.3) + mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2019.1009) mimemagic (0.3.3) - mini_magick (4.9.5) + mini_magick (4.10.1) mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.13.0) + minitest (5.14.0) mock_redis (0.22.0) msgpack (1.3.1) multi_json (1.14.1) @@ -272,28 +281,29 @@ GEM nio4r (2.5.2) nokogiri (1.10.7) mini_portile2 (~> 2.4.0) + oauth (0.5.4) orm_adapter (0.5.0) os (1.0.1) parallel (1.19.1) - parser (2.6.5.0) + parser (2.7.0.2) ast (~> 2.4.0) - pg (1.1.4) + pg (1.2.2) pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (4.0.1) + public_suffix (4.0.3) puma (4.3.1) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) - rack (2.0.8) - rack-cache (1.10.0) + rack (2.1.1) + rack-cache (1.11.0) rack (>= 0.4) - rack-cors (1.1.0) + rack-cors (1.1.1) rack (>= 2.0.0) - rack-protection (2.0.7) + rack-protection (2.0.8.1) rack rack-proxy (0.6.5) rack @@ -328,7 +338,7 @@ GEM rainbow (3.0.0) rake (13.0.1) rb-fsevent (0.10.3) - rb-inotify (0.10.0) + rb-inotify (0.10.1) ffi (~> 1.0) redis (4.1.3) redis-namespace (1.7.0) @@ -351,33 +361,33 @@ GEM mime-types (>= 1.16, < 4.0) netrc (~> 0.8) retriable (3.1.2) - rspec-core (3.9.0) - rspec-support (~> 3.9.0) + rspec-core (3.9.1) + rspec-support (~> 3.9.1) rspec-expectations (3.9.0) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) - rspec-mocks (3.9.0) + rspec-mocks (3.9.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) - rspec-rails (4.0.0.beta3) + rspec-rails (4.0.0.beta4) actionpack (>= 4.2) activesupport (>= 4.2) railties (>= 4.2) - rspec-core (~> 3.8) - rspec-expectations (~> 3.8) - rspec-mocks (~> 3.8) - rspec-support (~> 3.8) - rspec-support (3.9.0) - rubocop (0.78.0) + rspec-core (~> 3.9) + rspec-expectations (~> 3.9) + rspec-mocks (~> 3.9) + rspec-support (~> 3.9) + rspec-support (3.9.2) + rubocop (0.79.0) jaro_winkler (~> 1.5.1) parallel (~> 1.10) - parser (>= 2.6) + parser (>= 2.7.0.1) rainbow (>= 2.2.2, < 4.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 1.7) - rubocop-performance (1.5.1) + rubocop-performance (1.5.2) rubocop (>= 0.71.0) - rubocop-rails (2.4.0) + rubocop-rails (2.4.1) rack (>= 1.1) rubocop (>= 0.72.0) rubocop-rspec (1.37.1) @@ -388,7 +398,7 @@ GEM activesupport (>= 4) sentry-raven (2.13.0) faraday (>= 0.7.6, < 1.0) - shoulda-matchers (4.1.2) + shoulda-matchers (4.2.0) activesupport (>= 4.2.0) sidekiq (6.0.4) connection_pool (>= 2.2.2) @@ -437,7 +447,7 @@ GEM multipart-post (~> 2.0) naught (~> 1.0) simple_oauth (~> 0.3.0) - tzinfo (1.2.5) + tzinfo (1.2.6) thread_safe (~> 0.1) tzinfo-data (1.2019.3) tzinfo (>= 1.0.0) @@ -447,7 +457,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.7.6) - unicode-display_width (1.6.0) + unicode-display_width (1.6.1) uniform_notifier (1.13.0) valid_email2 (3.1.3) activemodel (>= 3.2) @@ -535,6 +545,7 @@ DEPENDENCIES telegram-bot-ruby time_diff twitter + twitty! tzinfo-data uglifier valid_email2 diff --git a/app/controllers/api/v1/webhooks_controller.rb b/app/controllers/api/v1/webhooks_controller.rb index 6ea63cf53..10bcfc25a 100644 --- a/app/controllers/api/v1/webhooks_controller.rb +++ b/app/controllers/api/v1/webhooks_controller.rb @@ -3,7 +3,7 @@ class Api::V1::WebhooksController < ApplicationController skip_before_action :set_current_user skip_before_action :check_subscription - before_action :login_from_basic_auth + before_action :login_from_basic_auth, only: [:chargebee] def chargebee chargebee_consumer.consume head :ok @@ -12,6 +12,18 @@ class Api::V1::WebhooksController < ApplicationController head :ok end + def twitter_crc + render json: { response_token: "sha256=#{$twitter.generate_crc(params[:crc_token])}" } + end + + def twitter_events + twitter_consumer.consume + head :ok + rescue StandardError => e + Raven.capture_exception(e) + head :ok + end + private def login_from_basic_auth @@ -21,6 +33,10 @@ class Api::V1::WebhooksController < ApplicationController end def chargebee_consumer - @consumer ||= ::Webhooks::Chargebee.new(params) + @chargebee_consumer ||= ::Webhooks::Chargebee.new(params) + end + + def twitter_consumer + @twitter_consumer ||= ::Webhooks::Twitter.new(params) end end diff --git a/app/javascript/dashboard/assets/images/Mask.png b/app/javascript/dashboard/assets/images/Mask.png new file mode 100644 index 0000000000000000000000000000000000000000..1894f1f76f9bbc163b45f8ba341a8b1efe90e886 GIT binary patch literal 12998 zcmYLw2RzjO|G2yE>X0HUR7kdrvl`+^NcP^YoJ|NJ>rO^OPFZK`_8i zB`f>?zVrG1e~*WIIIsEK&*$s;d0? zgVy1DuMQ)}eJO7y9eQM|f#|MuVsQ@-=t*bs+oVKkB!^V>4r?OVhJ)UwPEWhYEA-LZ zBqy=ULDt>zAy*Cfq-wCvEYpoGEnk%f7tHDpJkpx|HT4gs>eB+=YqH;ylbiP6?|J{3 z2E#y|BI{rOVz$}eb~#{hY-~(H(laI}n~opzNY8xYvYxURcmF7 zdn!X(?+?04X?`BHCA}GIimyJ{=+M{KSKd1O^O{jmcHroh#Zo9j0BVz4p)VmI4sL2{ z+CFpUO!x4{70b@@cs3V$x?r9>{_8fKyPvajEKgJQXW77amUxsb z<>}#JB$`UJdJ6kwfX0Te=XBY8u5W1QzrxCDl1WS}z2JFh5#2vDj8%`xD6W}ybFqJ+ z`?#|Em!qSjS9MLzHNkoYm+M;cAcdTuu_A{8w8E!134W>_s`g*5LKKLt+)Gfj7$YGw5G67w&U9 zhHCJk0-V#W-o5tmU-%NozAy5Io6c1P(fOhFiAFTo-`{`p;NYMoFXl@^)z1e>eY$0O zK0=}6XPC4GBJ))ydv{(d-4T(Jl4_nB9`=x#8_~J~o(Bh?XAed|>+9?Lbo0zIMC

;TTbyTG~lyj%c0H5VuYl()g`;lt-1> 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 +