From 8393506f52764a36be4085656c9b052e971dfffd Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 18 Dec 2020 17:22:12 -0600 Subject: [PATCH] connection policy --- admin/app/admin/generic_state.rb | 2 +- admin/app/admin/jam_ruby_users.rb | 2 +- admin/app/views/admin/generic_states/_form.html.erb | 1 + admin/config/initializers/jam_ruby_generic_state.rb | 7 +++++++ db/up/find_sessions_2020.sql | 4 +++- pb/src/client_container.proto | 1 + ruby/lib/jam_ruby/message_factory.rb | 5 +++-- ruby/lib/jam_ruby/models/generic_state.rb | 7 ++++++- web/app/assets/javascripts/JamServer.js | 9 +++++++++ websocket-gateway/lib/jam_websockets/router.rb | 4 +++- 10 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 admin/config/initializers/jam_ruby_generic_state.rb diff --git a/admin/app/admin/generic_state.rb b/admin/app/admin/generic_state.rb index 3e5f2ae4c..3190556fe 100644 --- a/admin/app/admin/generic_state.rb +++ b/admin/app/admin/generic_state.rb @@ -3,7 +3,7 @@ ActiveAdmin.register JamRuby::GenericState, :as => 'GenericState' do config.clear_action_items! filter :env - permit_params :top_message, :event_page_top_logo_url + permit_params :top_message, :event_page_top_logo_url, :connection_policy actions :all, :except => [:destroy] diff --git a/admin/app/admin/jam_ruby_users.rb b/admin/app/admin/jam_ruby_users.rb index d7f988505..9d6493943 100644 --- a/admin/app/admin/jam_ruby_users.rb +++ b/admin/app/admin/jam_ruby_users.rb @@ -397,7 +397,7 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do table_for user.purchased_jam_tracks.unscope(:order).order('original_artist asc', 'name asc') do column "Artist", :original_artist column "Name", :name - column "Can Download", :can_download, as: :boolean, hint: 'Can download is the 2.99 value (have download rights)' + column "Can Download", :can_download column "Version", :version column "ID", :id end diff --git a/admin/app/views/admin/generic_states/_form.html.erb b/admin/app/views/admin/generic_states/_form.html.erb index 908f4bc21..9db471d2b 100644 --- a/admin/app/views/admin/generic_states/_form.html.erb +++ b/admin/app/views/admin/generic_states/_form.html.erb @@ -2,6 +2,7 @@ <%= f.semantic_errors *f.object.errors.keys %> <%= f.inputs do %> <%= f.input(:top_message, :input_html => {:maxlength => 10000, :rows=>10, :class => 'autogrow'}) %> + <%= f.input(:connection_policy, :input_html => {:maxlength => 100000, :rows=>10, :class => 'autogrow'}) %> <%= f.input(:event_page_top_logo_url, :input_html => {:maxlength => 200}, :hint => '/assets/logo.png') %> <% end %> <%= f.actions %> diff --git a/admin/config/initializers/jam_ruby_generic_state.rb b/admin/config/initializers/jam_ruby_generic_state.rb new file mode 100644 index 000000000..b7909dead --- /dev/null +++ b/admin/config/initializers/jam_ruby_generic_state.rb @@ -0,0 +1,7 @@ +class JamRuby::GenericState + before_validation do + if self.connection_policy == '' + self.connection_policy = nil + end + end +end \ No newline at end of file diff --git a/db/up/find_sessions_2020.sql b/db/up/find_sessions_2020.sql index d426e29cc..2cc011f1c 100644 --- a/db/up/find_sessions_2020.sql +++ b/db/up/find_sessions_2020.sql @@ -142,4 +142,6 @@ UPDATE users set stored_credit_card = true where recurly_code is not null; CREATE INDEX msuh_user_id ON music_sessions_user_history USING btree (user_id); CREATE INDEX msuh_created_at ON music_sessions_user_history USING btree (created_at); -CREATE INDEX bands_musicians_user_id_idx ON bands_musicians USING btree (user_id); \ No newline at end of file +CREATE INDEX bands_musicians_user_id_idx ON bands_musicians USING btree (user_id); + +ALTER TABLE generic_state ADD COLUMN connection_policy VARCHAR; \ No newline at end of file diff --git a/pb/src/client_container.proto b/pb/src/client_container.proto index f6fa58c98..ecc6ac06a 100644 --- a/pb/src/client_container.proto +++ b/pb/src/client_container.proto @@ -287,6 +287,7 @@ message LoginAck { optional int32 client_id_int = 11; repeated Ars arses = 12; optional SiteSubscription subscription = 13; + optional string connection_policy = 14; } message ConnectAck { diff --git a/ruby/lib/jam_ruby/message_factory.rb b/ruby/lib/jam_ruby/message_factory.rb index f94aaa957..d8ccfc5db 100644 --- a/ruby/lib/jam_ruby/message_factory.rb +++ b/ruby/lib/jam_ruby/message_factory.rb @@ -84,7 +84,7 @@ module JamRuby ) end # create a login ack (login was successful) - def login_ack(public_ip, client_id, token, heartbeat_interval, music_session_id, reconnected, user_id, connection_expire_time, username, client_id_int, client_update_data = nil, arses = [], subscription=nil) + def login_ack(public_ip, client_id, token, heartbeat_interval, music_session_id, reconnected, user_id, connection_expire_time, username, client_id_int, client_update_data = nil, arses = [], subscription=nil, connection_policy = nil) client_update = Jampb::ClientUpdate.new( product: client_update_data[:product], version: client_update_data[:version], @@ -119,7 +119,8 @@ module JamRuby broadcasting_type: subscription[:broadcasting_type], max_players: subscription[:max_players], pro_audio: subscription[:pro_audio] - ) + ), + :connection_policy => connection_policy ) Jampb::ClientMessage.new( diff --git a/ruby/lib/jam_ruby/models/generic_state.rb b/ruby/lib/jam_ruby/models/generic_state.rb index 7ba706336..2ef708430 100644 --- a/ruby/lib/jam_ruby/models/generic_state.rb +++ b/ruby/lib/jam_ruby/models/generic_state.rb @@ -3,11 +3,12 @@ module JamRuby class GenericState < ActiveRecord::Base - attr_accessible :top_message, :event_page_top_logo_url, as: :admin + attr_accessible :top_message, :event_page_top_logo_url, :connection_policy, as: :admin self.table_name = 'generic_state' validates :env, :inclusion => {:in => ['development', 'staging', 'production', 'test']} + validates :connection_policy, json: true def self.env GenericState.singleton.env @@ -42,6 +43,10 @@ module JamRuby GenericState.singleton.event_page_top_logo_url end + def self.connection_policy + GenericState.connection_policy + end + def self.singleton GenericState.find('default') end diff --git a/web/app/assets/javascripts/JamServer.js b/web/app/assets/javascripts/JamServer.js index 54b7e1c6b..a23989315 100644 --- a/web/app/assets/javascripts/JamServer.js +++ b/web/app/assets/javascripts/JamServer.js @@ -245,6 +245,15 @@ // tell the backend that we have logged in try { var msg = {user_id: payload.user_id, token: payload.token, username: payload.username, arses: payload.arses, client_id_int: payload.client_id_int, subscription: payload.subscription} + if(payload.connection_policy) { + try { + msg.policy= JSON.parse(payload.connection_policy) + } + catch(e) { + msg.policy = null + console.log("unable to parse connection policy", e) + } + } console.log("logged with new msg", msg) context.jamClient.OnLoggedIn(msg); // ACTS AS CONTINUATION } diff --git a/websocket-gateway/lib/jam_websockets/router.rb b/websocket-gateway/lib/jam_websockets/router.rb index 553e0a79b..e219874f0 100644 --- a/websocket-gateway/lib/jam_websockets/router.rb +++ b/websocket-gateway/lib/jam_websockets/router.rb @@ -980,7 +980,8 @@ module JamWebsockets connection.client_id_int, client_update, arses, - user.subscription_rules(false)) + user.subscription_rules(false), + @stored_policy) stats_logged_in send_to_client(client, login_ack) @@ -1371,6 +1372,7 @@ module JamWebsockets stored_ars_raw = Ars.active_arses(true) stored_ars_beta_raw = Ars.active_arses(false) + @stored_policy = GenericState.singleton.connection_policy stored_ars = [] stored_ars_beta = []