pwpush 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/Capfile +8 -0
- data/Gemfile +51 -0
- data/Gemfile.lock +224 -0
- data/LICENSE.txt +674 -0
- data/Procfile +3 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/TODO +21 -0
- data/app.json +21 -0
- data/app/assets/flash/clippy.swf +0 -0
- data/app/assets/flash/github-clippy.swf +0 -0
- data/app/assets/images/apple-touch-icon-ipad.png +0 -0
- data/app/assets/images/apple-touch-icon-ipad3.png +0 -0
- data/app/assets/images/apple-touch-icon-iphone.png +0 -0
- data/app/assets/images/apple-touch-icon-iphone4.png +0 -0
- data/app/assets/images/black_wood.jpg +0 -0
- data/app/assets/images/broken_noise.png +0 -0
- data/app/assets/images/button_down.png +0 -0
- data/app/assets/images/button_over.png +0 -0
- data/app/assets/images/button_up.png +0 -0
- data/app/assets/images/concrete_wall_3.png +0 -0
- data/app/assets/images/favicon.ico +0 -0
- data/app/assets/images/forkme.png +0 -0
- data/app/assets/images/outlets.png +0 -0
- data/app/assets/images/pwpush_favicon.jpg +0 -0
- data/app/assets/images/pwpush_logo.png +0 -0
- data/app/assets/images/rails.png +0 -0
- data/app/assets/javascripts/api.js.coffee +4 -0
- data/app/assets/javascripts/application.js +52 -0
- data/app/assets/javascripts/errors.js.coffee +3 -0
- data/app/assets/javascripts/fd-slider.js +1299 -0
- data/app/assets/javascripts/jquery-cookie.js +117 -0
- data/app/assets/javascripts/jquery.noty.js +520 -0
- data/app/assets/javascripts/layouts/top.js +34 -0
- data/app/assets/javascripts/passwords.js +62 -0
- data/app/assets/javascripts/spoiler.js +101 -0
- data/app/assets/javascripts/themes/default.js +156 -0
- data/app/assets/stylesheets/api.css.scss +3 -0
- data/app/assets/stylesheets/application.css +7 -0
- data/app/assets/stylesheets/errors.css.scss +3 -0
- data/app/assets/stylesheets/fd-slider.css +650 -0
- data/app/assets/stylesheets/global.css.scss +52 -0
- data/app/assets/stylesheets/passwords.css.scss +114 -0
- data/app/assets/stylesheets/users.css.scss +11 -0
- data/app/controllers/api_controller.rb +30 -0
- data/app/controllers/application_controller.rb +23 -0
- data/app/controllers/errors_controller.rb +7 -0
- data/app/controllers/passwords_controller.rb +153 -0
- data/app/controllers/users/omniauth_callbacks_controller.rb +71 -0
- data/app/controllers/views_controller.rb +11 -0
- data/app/helpers/api_helper.rb +2 -0
- data/app/helpers/application_helper.rb +31 -0
- data/app/helpers/errors_helper.rb +2 -0
- data/app/helpers/passwords_helper.rb +2 -0
- data/app/helpers/views_helper.rb +2 -0
- data/app/mailers/.gitkeep +0 -0
- data/app/models/.gitkeep +0 -0
- data/app/models/password.rb +51 -0
- data/app/models/user.rb +20 -0
- data/app/models/view.rb +4 -0
- data/app/views/api/config.html.haml +2 -0
- data/app/views/api/create.html.haml +2 -0
- data/app/views/api/generate.html.haml +2 -0
- data/app/views/api/list.html.haml +2 -0
- data/app/views/devise/confirmations/new.html.erb +12 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +16 -0
- data/app/views/devise/passwords/new.html.erb +12 -0
- data/app/views/devise/registrations/edit.html.erb +25 -0
- data/app/views/devise/registrations/new.html.haml +50 -0
- data/app/views/devise/sessions/new.html.haml +51 -0
- data/app/views/devise/shared/_links.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +12 -0
- data/app/views/errors/error_404.html.haml +21 -0
- data/app/views/errors/error_500.html.haml +21 -0
- data/app/views/layouts/_ga.html.erb +14 -0
- data/app/views/layouts/application.html.haml +41 -0
- data/app/views/pages/about.html.haml +159 -0
- data/app/views/passwords/edit.html.haml +7 -0
- data/app/views/passwords/index.html.haml +17 -0
- data/app/views/passwords/new.html.haml +68 -0
- data/app/views/passwords/show.html.haml +58 -0
- data/app/views/shared/_auth_providers.html.haml +9 -0
- data/app/views/shared/_messages.html.haml +4 -0
- data/app/views/views/_form.html.erb +16 -0
- data/app/views/views/edit.html.erb +8 -0
- data/app/views/views/index.html.erb +21 -0
- data/app/views/views/new.html.erb +5 -0
- data/app/views/views/show.html.erb +20 -0
- data/bin/bundle +13 -0
- data/config.ru +4 -0
- data/config/application.rb +51 -0
- data/config/boot.rb +6 -0
- data/config/capistrano_database_yml.rb +158 -0
- data/config/database.yml +19 -0
- data/config/deploy.rb +140 -0
- data/config/deploy/database.yml.erb +52 -0
- data/config/deploy/local_cap_config.rb.example +54 -0
- data/config/environment.rb +42 -0
- data/config/environments/development.rb +30 -0
- data/config/environments/engineyard.rb +60 -0
- data/config/environments/private.rb +60 -0
- data/config/environments/production.rb +60 -0
- data/config/environments/test.rb +39 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/devise.rb +211 -0
- data/config/initializers/inflections.rb +10 -0
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/secret_token.rb +7 -0
- data/config/initializers/session_store.rb +8 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/devise.en.yml +58 -0
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +16 -0
- data/config/unicorn.rb +22 -0
- data/db/migrate/20111128183630_create_passwords.rb +12 -0
- data/db/migrate/20111228183300_create_views.rb +16 -0
- data/db/migrate/20120102210558_devise_create_users.rb +54 -0
- data/db/migrate/20120102210559_create_rails_admin_histories_table.rb +18 -0
- data/db/migrate/20120102220933_add_admin_to_user.rb +9 -0
- data/db/migrate/20120129211750_add_lockable_to_users.rb +10 -0
- data/db/migrate/20120220172426_add_user_to_password.rb +11 -0
- data/db/migrate/20121105144421_add_deleted_to_password.rb +5 -0
- data/db/migrate/20150323145847_add_first_view_flag.rb +9 -0
- data/db/migrate/20160214205926_add_deletable_to_password.rb +5 -0
- data/db/schema.rb +78 -0
- data/db/seeds.rb +7 -0
- data/log/.gitkeep +0 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/robots.txt +3 -0
- data/script/rails +6 -0
- metadata +226 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module ApplicationHelper
|
|
2
|
+
def clippy(text, bgcolor='#cccccc')
|
|
3
|
+
html = <<-EOF
|
|
4
|
+
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
|
|
5
|
+
width="14"
|
|
6
|
+
height="14"
|
|
7
|
+
class="clippy"
|
|
8
|
+
id="clippy" >
|
|
9
|
+
<param name="movie" value="#{asset_path('github-clippy.swf')}"/>
|
|
10
|
+
<param name="allowScriptAccess" value="always" />
|
|
11
|
+
<param name="quality" value="high" />
|
|
12
|
+
<param name="scale" value="noscale" />
|
|
13
|
+
<param NAME="FlashVars" value="id=clip_data&copied=copied!&copyto=copy to clipboard">
|
|
14
|
+
<param name="bgcolor" value="#000000">
|
|
15
|
+
<param name="wmode" value="opaque">
|
|
16
|
+
<embed src="#{asset_path('github-clippy.swf')}"
|
|
17
|
+
width="14"
|
|
18
|
+
height="14"
|
|
19
|
+
name="clippy"
|
|
20
|
+
quality="high"
|
|
21
|
+
allowScriptAccess="always"
|
|
22
|
+
type="application/x-shockwave-flash"
|
|
23
|
+
pluginspage="http://www.macromedia.com/go/getflashplayer"
|
|
24
|
+
FlashVars="id=clip_data&copied=copied!&copyto=copy to clipboard"
|
|
25
|
+
bgcolor="#000000"
|
|
26
|
+
wmode="opaque"
|
|
27
|
+
/>
|
|
28
|
+
</object>
|
|
29
|
+
EOF
|
|
30
|
+
end
|
|
31
|
+
end
|
|
File without changes
|
data/app/models/.gitkeep
ADDED
|
File without changes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
class Password < ActiveRecord::Base
|
|
2
|
+
attr_accessible :payload, :expire_after_days, :expire_after_views, :deletable_by_viewer
|
|
3
|
+
has_many :views, :dependent => :destroy
|
|
4
|
+
|
|
5
|
+
def to_param
|
|
6
|
+
self.url_token.to_s
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def days_old
|
|
10
|
+
(Time.now.to_datetime - self.created_at.to_datetime).to_i
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def days_remaining
|
|
14
|
+
[(self.expire_after_days - self.days_old), 0].max
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def views_remaining
|
|
18
|
+
[(self.expire_after_views - self.views.count), 0].max
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# validate!
|
|
23
|
+
#
|
|
24
|
+
# Run basic validations on the password. Expire the password
|
|
25
|
+
# if it's limits have been reached (time or views)
|
|
26
|
+
#
|
|
27
|
+
def validate!
|
|
28
|
+
return if expired
|
|
29
|
+
|
|
30
|
+
# Range checking
|
|
31
|
+
self.expire_after_days ||= EXPIRE_AFTER_DAYS_DEFAULT
|
|
32
|
+
self.expire_after_views ||= EXPIRE_AFTER_VIEWS_DEFAULT
|
|
33
|
+
|
|
34
|
+
unless self.expire_after_days.between?(EXPIRE_AFTER_DAYS_MIN, EXPIRE_AFTER_DAYS_MAX)
|
|
35
|
+
self.expire_after_days = EXPIRE_AFTER_DAYS_DEFAULT
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
unless self.expire_after_views.between?(EXPIRE_AFTER_VIEWS_MIN, EXPIRE_AFTER_VIEWS_MAX)
|
|
39
|
+
self.expire_after_views = EXPIRE_AFTER_VIEWS_DEFAULT
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
unless self.new_record?
|
|
43
|
+
if (self.days_old >= self.expire_after_days) or (self.views.count >= self.expire_after_views)
|
|
44
|
+
# This password has hit max age or max views - expire it
|
|
45
|
+
self.expired = true
|
|
46
|
+
self.payload = nil
|
|
47
|
+
self.save
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
data/app/models/user.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class User < ActiveRecord::Base
|
|
2
|
+
# Include default devise modules. Others available are:
|
|
3
|
+
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
|
|
4
|
+
# devise :database_authenticatable, :registerable,
|
|
5
|
+
# :recoverable, :rememberable, :trackable, :validatable
|
|
6
|
+
devise :database_authenticatable, :omniauthable, :lockable,
|
|
7
|
+
:recoverable, :rememberable, :trackable, :validatable, :registerable
|
|
8
|
+
|
|
9
|
+
# Setup accessible (or protected) attributes for your model
|
|
10
|
+
attr_accessible :email, :password, :password_confirmation, :remember_me
|
|
11
|
+
|
|
12
|
+
def self.find_for_open_id(access_token, signed_in_resource=nil)
|
|
13
|
+
data = access_token.info
|
|
14
|
+
if user = User.where(:email => data["email"]).first
|
|
15
|
+
user
|
|
16
|
+
else
|
|
17
|
+
User.create!(:email => data["email"], :password => Devise.friendly_token[0,20])
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/app/models/view.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<h2>Resend confirmation instructions</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div><%= f.label :email %><br />
|
|
7
|
+
<%= f.email_field :email %></div>
|
|
8
|
+
|
|
9
|
+
<div><%= f.submit "Resend confirmation instructions" %></div>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<%= render :partial => "devise/shared/links" %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
|
2
|
+
|
|
3
|
+
<p>Someone has requested a link to change your password, and you can do this through the link below.</p>
|
|
4
|
+
|
|
5
|
+
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
|
|
6
|
+
|
|
7
|
+
<p>If you didn't request this, please ignore this email.</p>
|
|
8
|
+
<p>Your password won't change until you access the link above and create a new one.</p>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
|
2
|
+
|
|
3
|
+
<p>Your account has been locked due to an excessive amount of unsuccessful sign in attempts.</p>
|
|
4
|
+
|
|
5
|
+
<p>Click the link below to unlock your account:</p>
|
|
6
|
+
|
|
7
|
+
<p><%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %></p>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<h2>Change your password</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
<%= f.hidden_field :reset_password_token %>
|
|
6
|
+
|
|
7
|
+
<div><%= f.label :password, "New password" %><br />
|
|
8
|
+
<%= f.password_field :password %></div>
|
|
9
|
+
|
|
10
|
+
<div><%= f.label :password_confirmation, "Confirm new password" %><br />
|
|
11
|
+
<%= f.password_field :password_confirmation %></div>
|
|
12
|
+
|
|
13
|
+
<div><%= f.submit "Change my password" %></div>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<%= render :partial => "devise/shared/links" %>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<h2>Forgot your password?</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div><%= f.label :email %><br />
|
|
7
|
+
<%= f.email_field :email %></div>
|
|
8
|
+
|
|
9
|
+
<div><%= f.submit "Send me reset password instructions" %></div>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<%= render :partial => "devise/shared/links" %>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<h2>Edit <%= resource_name.to_s.humanize %></h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div><%= f.label :email %><br />
|
|
7
|
+
<%= f.email_field :email %></div>
|
|
8
|
+
|
|
9
|
+
<div><%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
|
|
10
|
+
<%= f.password_field :password %></div>
|
|
11
|
+
|
|
12
|
+
<div><%= f.label :password_confirmation %><br />
|
|
13
|
+
<%= f.password_field :password_confirmation %></div>
|
|
14
|
+
|
|
15
|
+
<div><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
|
|
16
|
+
<%= f.password_field :current_password %></div>
|
|
17
|
+
|
|
18
|
+
<div><%= f.submit "Update" %></div>
|
|
19
|
+
<% end %>
|
|
20
|
+
|
|
21
|
+
<h3>Cancel my account</h3>
|
|
22
|
+
|
|
23
|
+
<p>Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :confirm => "Are you sure?", :method => :delete %>.</p>
|
|
24
|
+
|
|
25
|
+
<%= link_to "Back", :back %>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
|
|
2
|
+
.login_box
|
|
3
|
+
= render :partial => 'shared/messages'
|
|
4
|
+
- if params.has_key?(:message)
|
|
5
|
+
- if params[:message] == 'invalid_credentials'
|
|
6
|
+
%p{ :class => "flash error" }== Invalid credentials provided. Try again?
|
|
7
|
+
- else
|
|
8
|
+
%p{ :class => "flash error" }= params[:message]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
%p{ :style => "font-family: 'Didact Gothic', sans-serif; font-size: 1.5em; clear: both;" }
|
|
12
|
+
One-click Sign Up with these services...
|
|
13
|
+
|
|
14
|
+
%div{ :style => 'auth_providers_area' }
|
|
15
|
+
%p
|
|
16
|
+
= render :partial => 'shared/auth_providers'
|
|
17
|
+
|
|
18
|
+
%p{ :style => "font-family: 'Didact Gothic', sans-serif; font-size: 1.5em; clear: both;" }
|
|
19
|
+
or do it old school...
|
|
20
|
+
|
|
21
|
+
= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f|
|
|
22
|
+
%table.sign_up
|
|
23
|
+
%tr
|
|
24
|
+
%td
|
|
25
|
+
%p
|
|
26
|
+
= f.label :email
|
|
27
|
+
%br/
|
|
28
|
+
= f.text_field :email
|
|
29
|
+
%td
|
|
30
|
+
%p
|
|
31
|
+
= f.label :password
|
|
32
|
+
%br/
|
|
33
|
+
= f.password_field :password
|
|
34
|
+
%tr
|
|
35
|
+
%td.full_row{ :colspan => 2 }
|
|
36
|
+
- if devise_mapping.rememberable?
|
|
37
|
+
= f.check_box :remember_me
|
|
38
|
+
= f.label :remember_me
|
|
39
|
+
%tr
|
|
40
|
+
%td.full_row{ :colspan => 2 }
|
|
41
|
+
%p= submit_tag "Sign Up", :disable_with => "Please wait..."
|
|
42
|
+
|
|
43
|
+
%div{ :style => 'clear: both;' }
|
|
44
|
+
|
|
45
|
+
%p{ :style => "font-family: 'Didact Gothic', sans-serif; font-size: 90%; clear: both;" }
|
|
46
|
+
= link_to "Forgot your password?", new_user_password_path()
|
|
47
|
+
\|
|
|
48
|
+
= link_to "Already have an account?", new_user_session_path()
|
|
49
|
+
|
|
50
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
.login_box
|
|
3
|
+
= render :partial => 'shared/messages'
|
|
4
|
+
- if params.has_key?(:message)
|
|
5
|
+
- if params[:message] == 'invalid_credentials'
|
|
6
|
+
%p{ :class => "flash error" }== Invalid credentials provided. Try again?
|
|
7
|
+
- else
|
|
8
|
+
%p{ :class => "flash error" }= params[:message]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
%p{ :style => "font-family: 'Didact Gothic', sans-serif; font-size: 1.5em; clear: both;" }
|
|
12
|
+
Login with one of these services...
|
|
13
|
+
|
|
14
|
+
%div{ :style => '' }
|
|
15
|
+
%p
|
|
16
|
+
= render :partial => 'shared/auth_providers'
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
%p{ :style => "font-family: 'Didact Gothic', sans-serif; font-size: 1.5em; clear: both;" }
|
|
20
|
+
or do it old school..
|
|
21
|
+
|
|
22
|
+
= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f|
|
|
23
|
+
%table.sign_up
|
|
24
|
+
%tr
|
|
25
|
+
%td
|
|
26
|
+
%p
|
|
27
|
+
= f.label :email
|
|
28
|
+
%br/
|
|
29
|
+
= f.text_field :email
|
|
30
|
+
%td
|
|
31
|
+
%p
|
|
32
|
+
= f.label :password
|
|
33
|
+
%br/
|
|
34
|
+
= f.password_field :password
|
|
35
|
+
%tr
|
|
36
|
+
%td.full_row{ :colspan => 2 }
|
|
37
|
+
- if devise_mapping.rememberable?
|
|
38
|
+
= f.check_box :remember_me
|
|
39
|
+
= f.label :remember_me
|
|
40
|
+
%tr
|
|
41
|
+
%td.full_row{ :colspan => 2 }
|
|
42
|
+
%p= submit_tag "Sign In", :disable_with => "Please wait..."
|
|
43
|
+
|
|
44
|
+
%div{ :style => 'clear: both;' }
|
|
45
|
+
|
|
46
|
+
%p{ :style => "font-family: 'Didact Gothic', sans-serif; font-size: 90%; clear: both;" }
|
|
47
|
+
= link_to "Forgot your password?", new_user_password_path()
|
|
48
|
+
\|
|
|
49
|
+
= link_to "Need to create an account?", new_user_registration_path()
|
|
50
|
+
|
|
51
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<%- if controller_name != 'sessions' %>
|
|
2
|
+
<%= link_to "Login", new_session_path(resource_name) %><br />
|
|
3
|
+
<% end -%>
|
|
4
|
+
|
|
5
|
+
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
|
|
6
|
+
<%= link_to "Register", new_registration_path(resource_name) %><br />
|
|
7
|
+
<% end -%>
|
|
8
|
+
|
|
9
|
+
<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
|
|
10
|
+
<%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
|
|
11
|
+
<% end -%>
|
|
12
|
+
|
|
13
|
+
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
|
|
14
|
+
<%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
|
|
15
|
+
<% end -%>
|
|
16
|
+
|
|
17
|
+
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
|
|
18
|
+
<%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
|
|
19
|
+
<% end -%>
|
|
20
|
+
|
|
21
|
+
<%- if devise_mapping.omniauthable? %>
|
|
22
|
+
<%- resource_class.omniauth_providers.each do |provider| %>
|
|
23
|
+
<%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
|
|
24
|
+
<% end -%>
|
|
25
|
+
<% end -%>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<h2>Resend unlock instructions</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div><%= f.label :email %><br />
|
|
7
|
+
<%= f.email_field :email %></div>
|
|
8
|
+
|
|
9
|
+
<div><%= f.submit "Resend unlock instructions" %></div>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<%= render :partial => "devise/shared/links" %>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
%p
|
|
2
|
+
.spacer{ :style => 'height: 100px;' }
|
|
3
|
+
|
|
4
|
+
%h1 #404
|
|
5
|
+
|
|
6
|
+
%p
|
|
7
|
+
Unfortunately we couldn't find that password. The link you followed may be bad
|
|
8
|
+
%br/
|
|
9
|
+
or we just screwed up.
|
|
10
|
+
|
|
11
|
+
%p
|
|
12
|
+
Double check that the link you followed is correct and is what appears in your URL bar.
|
|
13
|
+
|
|
14
|
+
.spacer{ :style => 'height: 100px;' }
|
|
15
|
+
|
|
16
|
+
- if Rails.env == "production" or Rails.env == "development"
|
|
17
|
+
%p.notes
|
|
18
|
+
%p= link_to "Back to the front page.", "/"
|
|
19
|
+
%p
|
|
20
|
+
== ...or if you think this page is in error, you could always log
|
|
21
|
+
= link_to "an issue on Github.", "https://github.com/pglombardo/PasswordPusher/issues?state=open", :target => "_blank"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.spacer{ :style => 'height: 100px;' }
|
|
2
|
+
|
|
3
|
+
%h1 #500
|
|
4
|
+
|
|
5
|
+
%p
|
|
6
|
+
Something went bad. That thing you did...it's broken.
|
|
7
|
+
|
|
8
|
+
%p
|
|
9
|
+
Try again if you like but I have my doubts.
|
|
10
|
+
|
|
11
|
+
%p
|
|
12
|
+
I'll get an email about this and take a look soon...
|
|
13
|
+
|
|
14
|
+
.spacer{ :style => 'height: 100px;' }
|
|
15
|
+
|
|
16
|
+
- if Rails.env == "production" or Rails.env == "development"
|
|
17
|
+
%p.notes
|
|
18
|
+
%p= link_to "Back to the front page.", "/"
|
|
19
|
+
%p
|
|
20
|
+
== ...or if this is driving you nuts, you could always log
|
|
21
|
+
= link_to "an issue on Github.", "https://github.com/pglombardo/PasswordPusher/issues?state=open", :target => "_blank"
|