diff --git a/Gemfile b/Gemfile index 60d65653b..1ecd97ca0 100644 --- a/Gemfile +++ b/Gemfile @@ -46,6 +46,7 @@ gem 'radix62', '~> 1.0.1' gem 'streamio-ffmpeg' gem 'rubyzip', :require => "zip" gem 'coinbase' +gem 'stripe' # needed for looser jpeg header compat gem 'ruby-imagespec', :require => "image_spec", :git => "https://github.com/r888888888/ruby-imagespec.git", :branch => "exif-fixes" diff --git a/Gemfile.lock b/Gemfile.lock index 9b49d56b0..46677a3c2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -148,6 +148,7 @@ GEM net-ssh (2.8.0) net-ssh-gateway (1.2.0) net-ssh (>= 2.6.5) + netrc (0.10.2) newrelic_rpm (3.9.6.257) nokogiri (1.6.1) mini_portile (~> 0.5.0) @@ -187,6 +188,9 @@ GEM raindrops (0.13.0) rake (10.4.2) ref (1.0.5) + rest-client (1.7.2) + mime-types (>= 1.16, < 3.0) + netrc (~> 0.7) rmagick (2.13.3) ruby-prof (0.14.2) rubyzip (1.1.6) @@ -225,6 +229,10 @@ GEM sprockets (>= 2.8, < 4.0) statistics2 (0.54) streamio-ffmpeg (1.0.0) + stripe (1.18.0) + json (~> 1.8.1) + mime-types (>= 1.25, < 3.0) + rest-client (~> 1.4) term-ansicolor (1.3.0) tins (~> 1.0) therubyracer (0.12.1) @@ -301,6 +309,7 @@ DEPENDENCIES sprockets-rails statistics2 streamio-ffmpeg + stripe term-ansicolor therubyracer timecop diff --git a/app/assets/stylesheets/specific/users.css.scss b/app/assets/stylesheets/specific/users.css.scss index cf1922a56..4441bf657 100644 --- a/app/assets/stylesheets/specific/users.css.scss +++ b/app/assets/stylesheets/specific/users.css.scss @@ -95,6 +95,10 @@ div#c-users { display: inline; } + div.section { + margin-bottom: 2em; + } + div#feature-comparison { overflow: hidden; margin-bottom: 1em; diff --git a/app/controllers/user_upgrades_controller.rb b/app/controllers/user_upgrades_controller.rb index 67ce1cc61..7cafe8b7f 100644 --- a/app/controllers/user_upgrades_controller.rb +++ b/app/controllers/user_upgrades_controller.rb @@ -5,18 +5,11 @@ class UserUpgradesController < ApplicationController skip_before_action :verify_authenticity_token, only: [:create] def create - if params[:order][:status] == "completed" - user_id, level = decrypt_custom - member = User.find(user_id) - - if member.level < User::Levels::PLATINUM && level >= User::Levels::GOLD && level <= User::Levels::PLATINUM - CurrentUser.scoped(User.admins.first, "127.0.0.1") do - member.promote_to!(level, :skip_feedback => true) - end - end + if params[:stripeToken] + create_stripe + elsif params[:order] + create_coinbase end - - render :nothing => true end def new @@ -46,6 +39,53 @@ class UserUpgradesController < ApplicationController private + def create_stripe + @user = user + + if params[:desc] == "Upgrade to Gold" + level = User::Levels::GOLD + cost = 2000 + elsif params[:desc] == "Upgrade to Platinum" + level = User::Levels::PLATINUM + cost = 4000 + elsif params[:desc] == "Upgrade Gold to Platinum" && @user.level == User::Levels::GOLD + level = User::Levels::PLATINUM + cost = 2000 + else + raise "Invalid desc" + end + + begin + charge = Stripe::Charge.create( + :amount => cost, + :currency => "usd", + :card => params[:stripeToken], + :description => params[:desc] + ) + @user.promote_to!(level, :skip_feedback => true) + flash[:success] = true + rescue Stripe::CardError => e + flash[:error] = e.message + end + + redirect_to user_upgrade_path + end + + def create_coinbase + if params[:order][:status] == "completed" + user_id, level = decrypt_custom + member = User.find(user_id) + + if member.level < User::Levels::PLATINUM && level >= User::Levels::GOLD && level <= User::Levels::PLATINUM + CurrentUser.scoped(User.admins.first, "127.0.0.1") do + member.promote_to!(level, :skip_feedback => true) + end + end + end + + render :nothing => true + end + def decrypt_custom crypt.decrypt_and_verify(params[:order][:custom]).split(/,/).map(&:to_i) end diff --git a/app/helpers/user_upgrades_helper.rb b/app/helpers/user_upgrades_helper.rb index 960ba1977..d22252484 100644 --- a/app/helpers/user_upgrades_helper.rb +++ b/app/helpers/user_upgrades_helper.rb @@ -1,9 +1,10 @@ module UserUpgradesHelper - def stripe_button(desc, cost) + def stripe_button(desc, cost, user) html = %{
#{hidden_field_tag(:desc, desc)} + #{hidden_field_tag(:user_id, user.id)}