VRFS-1020 fix share token design
This commit is contained in:
parent
3f9bb9bdad
commit
bc305cac5e
|
|
@ -1,5 +1,5 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
little-plugger (1.1.3)
|
||||
logging (1.7.2)
|
||||
|
|
|
|||
|
|
@ -98,4 +98,5 @@ invited_users_facebook_support.sql
|
|||
first_recording_at.sql
|
||||
share_token.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/recorded_track"
|
||||
require "jam_ruby/models/recorded_track_observer"
|
||||
require "jam_ruby/models/share_token"
|
||||
require "jam_ruby/models/mix"
|
||||
require "jam_ruby/models/claimed_recording"
|
||||
require "jam_ruby/models/crash_dump"
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ module JamRuby
|
|||
validates :genre, presence: true
|
||||
validates_uniqueness_of :recording_id, :scope => :user_id
|
||||
|
||||
|
||||
belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :claimed_recordings
|
||||
belongs_to :user, :class_name => "JamRuby::User", :inverse_of => :claimed_recordings
|
||||
belongs_to :genre, :class_name => "JamRuby::Genre"
|
||||
has_many :recorded_tracks, :through => :recording, :class_name => "JamRuby::RecordedTrack"
|
||||
has_many :playing_sessions, :class_name => "JamRuby::MusicSession"
|
||||
has_one :share_token, :class_name => "JamRuby::ShareToken", :as => :shareable
|
||||
|
||||
before_create :generate_share_token
|
||||
|
||||
|
|
@ -54,12 +54,16 @@ module JamRuby
|
|||
private
|
||||
|
||||
def generate_share_token
|
||||
self.share_token = loop do
|
||||
token = loop do
|
||||
token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false)
|
||||
token = remove_non_alpha_num(token)
|
||||
token.upcase!
|
||||
break token unless MusicSessionHistory.exists?(share_token: token)
|
||||
break token unless ShareToken.exists?(token: token)
|
||||
end
|
||||
|
||||
self.share_token = ShareToken.new
|
||||
self.share_token.token = token
|
||||
self.share_token.shareable_type = "recording"
|
||||
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 :comments, :class_name => "JamRuby::MusicSessionComment", :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
|
||||
|
||||
|
|
@ -155,12 +156,16 @@ module JamRuby
|
|||
|
||||
private
|
||||
def generate_share_token
|
||||
self.share_token = loop do
|
||||
token = loop do
|
||||
token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false)
|
||||
token = remove_non_alpha_num(token)
|
||||
token.upcase!
|
||||
break token unless MusicSessionHistory.exists?(share_token: token)
|
||||
break token unless ShareToken.exists?(token: token)
|
||||
end
|
||||
|
||||
self.share_token = ShareToken.new
|
||||
self.share_token.token = token
|
||||
self.share_token.shareable_type = "session"
|
||||
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);
|
||||
|
||||
$("#txtRecordingComment").val("Enter a comment...");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,8 +28,6 @@
|
|||
});
|
||||
|
||||
$(".landing-comment-scroller").prepend(commentHtml);
|
||||
|
||||
$("#txtSessionComment").val("Enter a comment...");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,4 +43,15 @@ class SpikesController < ApplicationController
|
|||
|
||||
render :layout => 'web'
|
||||
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
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@
|
|||
<td valign="top" width="48%">
|
||||
<div class="ml10">
|
||||
<h3>Share a Link:</h3><br />
|
||||
<% unless share_token.blank? %>
|
||||
<%= "#{root_url}#{share_token}" %>
|
||||
<% unless true %>
|
||||
<%= "#{root_url}" %>
|
||||
<% end %><br/><br/>
|
||||
<div class="right"><a class="button-orange">COPY LINK</a></div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@
|
|||
|
||||
<%= 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 %>
|
||||
<script type="text/javascript">
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<%= image_tag "shared/avatar_generic.png", {:alt => ""} %>
|
||||
</div>
|
||||
<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>
|
||||
<br clear="all" />
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ SampleApp::Application.routes.draw do
|
|||
match '/facebook_invite', to: 'spikes#facebook_invite'
|
||||
match '/gmail_contacts', to: 'spikes#gmail_contacts'
|
||||
match '/listen_in', to: 'spikes#listen_in'
|
||||
match '/:id', to: 'spikes#shareable_resolver'
|
||||
|
||||
# password reset
|
||||
match '/request_reset_password' => 'users#request_reset_password', :via => :get
|
||||
|
|
|
|||
Loading…
Reference in New Issue