pwpush 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|