mtwarden 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +9 -0
- data/Rakefile +23 -0
- data/app/assets/javascripts/mtwarden/account/accounts.js +2 -0
- data/app/assets/javascripts/mtwarden/account/dashboard.js +2 -0
- data/app/assets/javascripts/mtwarden/account/sessions.js +2 -0
- data/app/assets/javascripts/mtwarden/account/users.js +2 -0
- data/app/assets/javascripts/mtwarden/accounts.js +2 -0
- data/app/assets/javascripts/mtwarden/application.js +13 -0
- data/app/assets/javascripts/mtwarden/dashboard.js +2 -0
- data/app/assets/stylesheets/mtwarden/account/accounts.css +4 -0
- data/app/assets/stylesheets/mtwarden/account/dashboard.css +4 -0
- data/app/assets/stylesheets/mtwarden/account/sessions.css +4 -0
- data/app/assets/stylesheets/mtwarden/account/users.css +4 -0
- data/app/assets/stylesheets/mtwarden/accounts.css +4 -0
- data/app/assets/stylesheets/mtwarden/application.css +15 -0
- data/app/assets/stylesheets/mtwarden/dashboard.css +4 -0
- data/app/controllers/mtwarden/account/accounts_controller.rb +67 -0
- data/app/controllers/mtwarden/account/dashboard_controller.rb +7 -0
- data/app/controllers/mtwarden/account/sessions_controller.rb +20 -0
- data/app/controllers/mtwarden/account/users_controller.rb +23 -0
- data/app/controllers/mtwarden/accounts_controller.rb +32 -0
- data/app/controllers/mtwarden/application_controller.rb +12 -0
- data/app/controllers/mtwarden/dashboard_controller.rb +6 -0
- data/app/extenders/controllers/application_controller_extender.rb +38 -0
- data/app/helpers/mtwarden/account/accounts_helper.rb +4 -0
- data/app/helpers/mtwarden/account/dashboard_helper.rb +4 -0
- data/app/helpers/mtwarden/account/sessions_helper.rb +4 -0
- data/app/helpers/mtwarden/account/users_helper.rb +4 -0
- data/app/helpers/mtwarden/accounts_helper.rb +4 -0
- data/app/helpers/mtwarden/application_helper.rb +4 -0
- data/app/helpers/mtwarden/dashboard_helper.rb +4 -0
- data/app/models/mtwarden/account.rb +39 -0
- data/app/models/mtwarden/member.rb +8 -0
- data/app/models/mtwarden/plan.rb +6 -0
- data/app/models/mtwarden/user.rb +7 -0
- data/app/views/layouts/mtwarden/application.html.erb +16 -0
- data/app/views/mtwarden/account/accounts/_existing_subscription.html.erb +3 -0
- data/app/views/mtwarden/account/accounts/_new_subscription.html.erb +38 -0
- data/app/views/mtwarden/account/accounts/edit.html.erb +17 -0
- data/app/views/mtwarden/account/accounts/plan.html.erb +15 -0
- data/app/views/mtwarden/account/dashboard/index.html.erb +1 -0
- data/app/views/mtwarden/account/sessions/new.html.erb +19 -0
- data/app/views/mtwarden/account/users/_form.html.erb +14 -0
- data/app/views/mtwarden/account/users/new.html.erb +6 -0
- data/app/views/mtwarden/accounts/new.html.erb +20 -0
- data/app/views/mtwarden/dashboard/index.html.erb +1 -0
- data/app/views/mtwarden/shared/_login.html.erb +7 -0
- data/config/initializers/braintree.rb +4 -0
- data/config/initializers/warden/strategies/password.rb +16 -0
- data/config/routes.rb +29 -0
- data/db/migrate/20140621030847_create_mtwarden_accounts.rb +9 -0
- data/db/migrate/20140621114149_add_owner_id_to_mtwarden_accounts.rb +5 -0
- data/db/migrate/20140621114231_create_mtwarden_users.rb +10 -0
- data/db/migrate/20140621114308_create_mtwarden_members.rb +10 -0
- data/db/migrate/20140621114417_add_subdomain_to_mtwarden_accounts.rb +6 -0
- data/db/migrate/20140829231923_create_mtwarden_plans.rb +11 -0
- data/db/migrate/20140830011033_add_plan_id_to_mtwarden_accounts.rb +5 -0
- data/db/migrate/20140830020346_add_braintree_subscription_id_to_mtwarden_accounts.rb +5 -0
- data/lib/mtwarden.rb +5 -0
- data/lib/mtwarden/braintree_plan_fetcher.rb +20 -0
- data/lib/mtwarden/constraints/subdomain_required.rb +9 -0
- data/lib/mtwarden/engine.rb +51 -0
- data/lib/mtwarden/scoped_to.rb +7 -0
- data/lib/mtwarden/testing_support/authentication_helpers.rb +17 -0
- data/lib/mtwarden/testing_support/factories/account_factory.rb +13 -0
- data/lib/mtwarden/testing_support/factories/user_factory.rb +7 -0
- data/lib/mtwarden/testing_support/subdomain_helpers.rb +14 -0
- data/lib/mtwarden/version.rb +3 -0
- data/lib/tasks/mtwarden_tasks.rake +7 -0
- metadata +297 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>CoastDigitalGroup Mtwarden Warden Edition</title>
|
5
|
+
<%= stylesheet_link_tag "mtwarden/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "mtwarden/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<% flash.each do |k,v| %>
|
11
|
+
<div class='flash <%= k %>'><%= v %></div>
|
12
|
+
<% end %>
|
13
|
+
<%= render "mtwarden/shared/login" %>
|
14
|
+
<%= yield %>
|
15
|
+
</body>
|
16
|
+
</html>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<% if @result && @result.message %>
|
2
|
+
<ul class="gateway_messages">
|
3
|
+
<% @result.message.split("\n").each do |message| %>
|
4
|
+
<li><%= message %></li>
|
5
|
+
<% end %>
|
6
|
+
</ul>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= form_for :customer,
|
10
|
+
:url => Braintree::TransparentRedirect.url,
|
11
|
+
:html => {:autocomplete => "off"} do |customer| -%>
|
12
|
+
<% tr_data = Braintree::TransparentRedirect.create_customer_data(
|
13
|
+
:redirect_url => mtwarden.subscribe_account_url(:plan_id => params[:plan_id]),
|
14
|
+
) %>
|
15
|
+
<%= hidden_field_tag "tr_data", tr_data %>
|
16
|
+
<%= customer.fields_for :credit_card do |cc| -%>
|
17
|
+
<p>
|
18
|
+
<%= cc.label :number, "Credit card number" %><br>
|
19
|
+
<%= cc.text_field :number %>
|
20
|
+
</p>
|
21
|
+
|
22
|
+
<p>
|
23
|
+
<%= cc.label :cardholder_name, "Name on card" %><br>
|
24
|
+
<%= cc.text_field :cardholder_name %>
|
25
|
+
</p>
|
26
|
+
|
27
|
+
<p>
|
28
|
+
<%= cc.label :expiration_date, "Expiration date" %><br>
|
29
|
+
<%= cc.text_field :expiration_date %>
|
30
|
+
</p>
|
31
|
+
|
32
|
+
<p>
|
33
|
+
<%= cc.label :cvv, "CVV" %><br>
|
34
|
+
<%= cc.text_field :cvv %>
|
35
|
+
</p>
|
36
|
+
<%= customer.submit "Change plan" %>
|
37
|
+
<% end %>
|
38
|
+
<% end %>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<h2>Edit Account</h2>
|
2
|
+
|
3
|
+
<%= form_for(current_account, :url => account_path) do |account| %>
|
4
|
+
<%= account.error_messages %>
|
5
|
+
<p>
|
6
|
+
<%= account.label :name %>
|
7
|
+
<%= account.text_field :name %>
|
8
|
+
</p>
|
9
|
+
|
10
|
+
<p>
|
11
|
+
<%= account.label :plan_id %>
|
12
|
+
<% plans = Mtwarden::Plan.all.map { |p| [p.name, p.id] } %>
|
13
|
+
<%= account.select :plan_id, plans %>
|
14
|
+
</p>
|
15
|
+
|
16
|
+
<%= account.submit "Update Account" %>
|
17
|
+
<% end %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class='plan-info'>
|
2
|
+
<p>
|
3
|
+
You are changing to the '<%= @plan.name %>' plan.
|
4
|
+
</p>
|
5
|
+
|
6
|
+
<p>
|
7
|
+
This plan costs <strong>$<%= @plan.price %></strong> per month.
|
8
|
+
</p>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<% if current_account.braintree_subscription_id.present? %>
|
12
|
+
<%= render "existing_subscription" %>
|
13
|
+
<% else %>
|
14
|
+
<%= render "new_subscription" %>
|
15
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
Your account's dashboard. Coming soon.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<h2>Sign in</h2>
|
2
|
+
|
3
|
+
<%= form_for @user, :url => sessions_url do |f| %>
|
4
|
+
<p>
|
5
|
+
<%= f.label :email %><br>
|
6
|
+
<%= f.email_field :email %>
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<p>
|
10
|
+
<%= f.label :password %><br>
|
11
|
+
<%= f.password_field :password %>
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<p>
|
15
|
+
<%= f.submit "Sign in" %>
|
16
|
+
</p>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<%= link_to "New User?", user_sign_up_url %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<p>
|
2
|
+
<%= user.label :email %><br>
|
3
|
+
<%= user.email_field :email %>
|
4
|
+
</p>
|
5
|
+
|
6
|
+
<p>
|
7
|
+
<%= user.label :password %><br>
|
8
|
+
<%= user.password_field :password %>
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p>
|
12
|
+
<%= user.label :password_confirmation %><br>
|
13
|
+
<%= user.password_field :password_confirmation %>
|
14
|
+
</p>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<h2>Sign Up</h2>
|
2
|
+
|
3
|
+
<%= form_for(@account) do |account| %>
|
4
|
+
<%= account.error_messages %>
|
5
|
+
<p>
|
6
|
+
<%= account.label :name %><br>
|
7
|
+
<%= account.text_field :name %>
|
8
|
+
</p>
|
9
|
+
|
10
|
+
<p>
|
11
|
+
<%= account.label :subdomain %><br>
|
12
|
+
<%= account.text_field :subdomain %>
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<%= account.fields_for :owner do |owner| %>
|
16
|
+
<%= render "mtwarden/account/users/form", :user => owner %>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<%= account.submit %>
|
20
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= link_to "Account Sign Up", sign_up_path %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Warden::Strategies.add(:password) do
|
2
|
+
def subdomain
|
3
|
+
ActionDispatch::Http::URL.extract_subdomains(request.host, 1)
|
4
|
+
end
|
5
|
+
|
6
|
+
def valid?
|
7
|
+
subdomain.present? && params["user"]
|
8
|
+
end
|
9
|
+
|
10
|
+
def authenticate!
|
11
|
+
return fail! unless account = Mtwarden::Account.find_by(subdomain: subdomain)
|
12
|
+
return fail! unless user = account.users.find_by(email: params["user"]["email"])
|
13
|
+
return fail! unless user.authenticate(params["user"]["password"])
|
14
|
+
success! user
|
15
|
+
end
|
16
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require "mtwarden/constraints/subdomain_required"
|
2
|
+
|
3
|
+
Mtwarden::Engine.routes.draw do
|
4
|
+
constraints(Mtwarden::Constraints::SubdomainRequired) do
|
5
|
+
scope :module => "account" do
|
6
|
+
root :to => "dashboard#index", :as => :account_root
|
7
|
+
get "/sign_in", :to => "sessions#new", :as => :sign_in
|
8
|
+
post "/sign_in", :to => "sessions#create", :as => :sessions
|
9
|
+
get "/sign_up", :to => "users#new", :as => :user_sign_up
|
10
|
+
post "/sign_up", :to => "users#create", :as => :do_user_sign_up
|
11
|
+
get "/account", :to => "accounts#edit", :as => :edit_account
|
12
|
+
patch "/account", :to => "accounts#update"
|
13
|
+
get "/account/plan/:plan_id",
|
14
|
+
:to => "accounts#plan",
|
15
|
+
:as => :plan_account
|
16
|
+
get "/account/subscribe",
|
17
|
+
:to => "accounts#subscribe",
|
18
|
+
:as => :subscribe_account
|
19
|
+
post "/account/confirm_plan",
|
20
|
+
:to => "accounts#confirm_plan",
|
21
|
+
:as => :confirm_plan_account
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
root "dashboard#index"
|
26
|
+
get "/sign_up", :to => "accounts#new", :as => :sign_up
|
27
|
+
post "/accounts", :to => "accounts#create", :as => :accounts
|
28
|
+
|
29
|
+
end
|
data/lib/mtwarden.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Mtwarden
|
2
|
+
class BraintreePlanFetcher
|
3
|
+
def self.store_locally
|
4
|
+
Braintree::Plan.all.each do |plan|
|
5
|
+
if local_plan = Mtwarden::Plan.find_by(braintree_id: plan.id)
|
6
|
+
local_plan.update_attributes({
|
7
|
+
:name => plan.name,
|
8
|
+
:price => plan.price
|
9
|
+
})
|
10
|
+
else
|
11
|
+
Mtwarden::Plan.create({
|
12
|
+
:name => plan.name,
|
13
|
+
:price => plan.price,
|
14
|
+
:braintree_id => plan.id
|
15
|
+
})
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "warden"
|
2
|
+
require "houser"
|
3
|
+
require 'gravtastic'
|
4
|
+
|
5
|
+
require "dynamic_form"
|
6
|
+
require "braintree"
|
7
|
+
|
8
|
+
module Mtwarden
|
9
|
+
class Engine < ::Rails::Engine
|
10
|
+
isolate_namespace Mtwarden
|
11
|
+
|
12
|
+
config.generators do |g|
|
13
|
+
g.test_framework :rspec, :view_specs => false
|
14
|
+
end
|
15
|
+
|
16
|
+
initializer "mtwarden.middleware.warden" do
|
17
|
+
Rails.application.config.middleware.use Warden::Manager do |manager|
|
18
|
+
manager.default_strategies :password
|
19
|
+
manager.serialize_into_session do |user|
|
20
|
+
user.id
|
21
|
+
end
|
22
|
+
|
23
|
+
manager.serialize_from_session do |id|
|
24
|
+
Mtwarden::User.find(id)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
initializer "mtwarden.middleware.fake_braintree_redirect" do
|
30
|
+
if Rails.env.test?
|
31
|
+
require "fake_braintree_redirect"
|
32
|
+
Rails.application.config.middleware.insert_before \
|
33
|
+
Warden::Manager,
|
34
|
+
FakeBraintreeRedirect
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
config.to_prepare do
|
39
|
+
root = Mtwarden::Engine.root
|
40
|
+
extenders_path = root + "app/extenders/**/*.rb"
|
41
|
+
Dir.glob(extenders_path) do |file|
|
42
|
+
Rails.configuration.cache_classes ? require(file) : load(file)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
initializer 'mtwarden.middleware.houser' do
|
47
|
+
Rails.application.config.middleware.use Houser::Middleware,
|
48
|
+
:class_name => 'Mtwarden::Account'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|