VRFS-1020 fix share token design
This commit is contained in:
parent
3f9bb9bdad
commit
bc305cac5e
|
|
@ -1,5 +1,5 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: http://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
little-plugger (1.1.3)
|
little-plugger (1.1.3)
|
||||||
logging (1.7.2)
|
logging (1.7.2)
|
||||||
|
|
|
||||||
|
|
@ -98,4 +98,5 @@ invited_users_facebook_support.sql
|
||||||
first_recording_at.sql
|
first_recording_at.sql
|
||||||
share_token.sql
|
share_token.sql
|
||||||
facebook_signup.sql
|
facebook_signup.sql
|
||||||
audiomixer_mp3.sql
|
audiomixer_mp3.sql
|
||||||
|
share_token_2.sql
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
alter table music_sessions_history drop column share_token;
|
||||||
|
alter table claimed_recordings drop column share_token;
|
||||||
|
|
||||||
|
CREATE TABLE share_tokens
|
||||||
|
(
|
||||||
|
id character varying(64) NOT NULL DEFAULT uuid_generate_v4(),
|
||||||
|
token varchar(15) NOT NULL,
|
||||||
|
shareable_id varchar(64) NOT NULL,
|
||||||
|
shareable_type varchar(50) NOT NULL,
|
||||||
|
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||||
|
updated_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||||
|
CONSTRAINT token_uniqkey UNIQUE (token),
|
||||||
|
CONSTRAINT share_tokens_pkey PRIMARY KEY (id)
|
||||||
|
);
|
||||||
|
|
@ -94,6 +94,7 @@ require "jam_ruby/models/recording_liker"
|
||||||
require "jam_ruby/models/recording_play"
|
require "jam_ruby/models/recording_play"
|
||||||
require "jam_ruby/models/recorded_track"
|
require "jam_ruby/models/recorded_track"
|
||||||
require "jam_ruby/models/recorded_track_observer"
|
require "jam_ruby/models/recorded_track_observer"
|
||||||
|
require "jam_ruby/models/share_token"
|
||||||
require "jam_ruby/models/mix"
|
require "jam_ruby/models/mix"
|
||||||
require "jam_ruby/models/claimed_recording"
|
require "jam_ruby/models/claimed_recording"
|
||||||
require "jam_ruby/models/crash_dump"
|
require "jam_ruby/models/crash_dump"
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,12 @@ module JamRuby
|
||||||
validates :genre, presence: true
|
validates :genre, presence: true
|
||||||
validates_uniqueness_of :recording_id, :scope => :user_id
|
validates_uniqueness_of :recording_id, :scope => :user_id
|
||||||
|
|
||||||
|
|
||||||
belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :claimed_recordings
|
belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :claimed_recordings
|
||||||
belongs_to :user, :class_name => "JamRuby::User", :inverse_of => :claimed_recordings
|
belongs_to :user, :class_name => "JamRuby::User", :inverse_of => :claimed_recordings
|
||||||
belongs_to :genre, :class_name => "JamRuby::Genre"
|
belongs_to :genre, :class_name => "JamRuby::Genre"
|
||||||
has_many :recorded_tracks, :through => :recording, :class_name => "JamRuby::RecordedTrack"
|
has_many :recorded_tracks, :through => :recording, :class_name => "JamRuby::RecordedTrack"
|
||||||
has_many :playing_sessions, :class_name => "JamRuby::MusicSession"
|
has_many :playing_sessions, :class_name => "JamRuby::MusicSession"
|
||||||
|
has_one :share_token, :class_name => "JamRuby::ShareToken", :as => :shareable
|
||||||
|
|
||||||
before_create :generate_share_token
|
before_create :generate_share_token
|
||||||
|
|
||||||
|
|
@ -54,12 +54,16 @@ module JamRuby
|
||||||
private
|
private
|
||||||
|
|
||||||
def generate_share_token
|
def generate_share_token
|
||||||
self.share_token = loop do
|
token = loop do
|
||||||
token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false)
|
token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false)
|
||||||
token = remove_non_alpha_num(token)
|
token = remove_non_alpha_num(token)
|
||||||
token.upcase!
|
token.upcase!
|
||||||
break token unless MusicSessionHistory.exists?(share_token: token)
|
break token unless ShareToken.exists?(token: token)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
self.share_token = ShareToken.new
|
||||||
|
self.share_token.token = token
|
||||||
|
self.share_token.shareable_type = "recording"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ module JamRuby
|
||||||
has_many :music_session_user_histories, :class_name => "JamRuby::MusicSessionUserHistory", :foreign_key => "music_session_id"
|
has_many :music_session_user_histories, :class_name => "JamRuby::MusicSessionUserHistory", :foreign_key => "music_session_id"
|
||||||
has_many :comments, :class_name => "JamRuby::MusicSessionComment", :foreign_key => "music_session_id"
|
has_many :comments, :class_name => "JamRuby::MusicSessionComment", :foreign_key => "music_session_id"
|
||||||
has_many :likes, :class_name => "JamRuby::MusicSessionLiker", :foreign_key => "music_session_id"
|
has_many :likes, :class_name => "JamRuby::MusicSessionLiker", :foreign_key => "music_session_id"
|
||||||
|
has_one :share_token, :class_name => "JamRuby::ShareToken", :as => :shareable
|
||||||
|
|
||||||
before_create :generate_share_token
|
before_create :generate_share_token
|
||||||
|
|
||||||
|
|
@ -155,12 +156,16 @@ module JamRuby
|
||||||
|
|
||||||
private
|
private
|
||||||
def generate_share_token
|
def generate_share_token
|
||||||
self.share_token = loop do
|
token = loop do
|
||||||
token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false)
|
token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false)
|
||||||
token = remove_non_alpha_num(token)
|
token = remove_non_alpha_num(token)
|
||||||
token.upcase!
|
token.upcase!
|
||||||
break token unless MusicSessionHistory.exists?(share_token: token)
|
break token unless ShareToken.exists?(token: token)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
self.share_token = ShareToken.new
|
||||||
|
self.share_token.token = token
|
||||||
|
self.share_token.shareable_type = "session"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
module JamRuby
|
||||||
|
class ShareToken < ActiveRecord::Base
|
||||||
|
belongs_to :shareable, :polymorphic => true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -36,8 +36,6 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
$(".landing-comment-scroller").prepend(commentHtml);
|
$(".landing-comment-scroller").prepend(commentHtml);
|
||||||
|
|
||||||
$("#txtRecordingComment").val("Enter a comment...");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,6 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
$(".landing-comment-scroller").prepend(commentHtml);
|
$(".landing-comment-scroller").prepend(commentHtml);
|
||||||
|
|
||||||
$("#txtSessionComment").val("Enter a comment...");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,4 +43,15 @@ class SpikesController < ApplicationController
|
||||||
|
|
||||||
render :layout => 'web'
|
render :layout => 'web'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def shareable_resolver
|
||||||
|
share_token = ShareToken.find_by_token(params[:id])
|
||||||
|
# TODO: clean this up later to truly use polymorphic associations
|
||||||
|
if share_token.shareable_type == "session"
|
||||||
|
msh = MusicSessionHistory.find(share_token.shareable_id)
|
||||||
|
redirect_to "/sessions/#{msh.music_session_id}"
|
||||||
|
else
|
||||||
|
redirect_to "/recordings/#{share_token.shareable_id}"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@
|
||||||
<td valign="top" width="48%">
|
<td valign="top" width="48%">
|
||||||
<div class="ml10">
|
<div class="ml10">
|
||||||
<h3>Share a Link:</h3><br />
|
<h3>Share a Link:</h3><br />
|
||||||
<% unless share_token.blank? %>
|
<% unless true %>
|
||||||
<%= "#{root_url}#{share_token}" %>
|
<%= "#{root_url}" %>
|
||||||
<% end %><br/><br/>
|
<% end %><br/><br/>
|
||||||
<div class="right"><a class="button-orange">COPY LINK</a></div>
|
<div class="right"><a class="button-orange">COPY LINK</a></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
|
|
||||||
<%= javascript_include_tag "web/sessions" %>
|
<%= javascript_include_tag "web/sessions" %>
|
||||||
|
|
||||||
<%= render :partial => "clients/shareDialog", :locals => {:session => @music_session, :share_token => @music_session.share_token} %>
|
<%= render :partial => "clients/shareDialog", :locals => {:session => @music_session} %>
|
||||||
|
|
||||||
<% content_for :extra_js do %>
|
<% content_for :extra_js do %>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<%= image_tag "shared/avatar_generic.png", {:alt => ""} %>
|
<%= image_tag "shared/avatar_generic.png", {:alt => ""} %>
|
||||||
</div>
|
</div>
|
||||||
<div class="left w80 p10">
|
<div class="left w80 p10">
|
||||||
<textarea id="<%= id %>" class="w100 p5 f15" rows="2" onfocus="$(this).html('')" onblur="if($(this).html() == ''){$(this).html('Enter a comment...')}">Enter a comment...</textarea>
|
<textarea id="<%= id %>" class="w100 p5 f15" rows="2" placeholder="Enter a comment..."></textarea>
|
||||||
</div>
|
</div>
|
||||||
<br clear="all" />
|
<br clear="all" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ SampleApp::Application.routes.draw do
|
||||||
match '/facebook_invite', to: 'spikes#facebook_invite'
|
match '/facebook_invite', to: 'spikes#facebook_invite'
|
||||||
match '/gmail_contacts', to: 'spikes#gmail_contacts'
|
match '/gmail_contacts', to: 'spikes#gmail_contacts'
|
||||||
match '/listen_in', to: 'spikes#listen_in'
|
match '/listen_in', to: 'spikes#listen_in'
|
||||||
|
match '/:id', to: 'spikes#shareable_resolver'
|
||||||
|
|
||||||
# password reset
|
# password reset
|
||||||
match '/request_reset_password' => 'users#request_reset_password', :via => :get
|
match '/request_reset_password' => 'users#request_reset_password', :via => :get
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue