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,14 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
|
|
3
|
+
var _gaq = _gaq || [];
|
|
4
|
+
_gaq.push(['_setAccount', 'UA-28303744-1']);
|
|
5
|
+
_gaq.push(['_setDomainName', 'pwpush.com']);
|
|
6
|
+
_gaq.push(['_trackPageview']);
|
|
7
|
+
|
|
8
|
+
(function() {
|
|
9
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
|
10
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
|
11
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
|
12
|
+
})();
|
|
13
|
+
|
|
14
|
+
</script>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
!!!
|
|
2
|
+
%html
|
|
3
|
+
%head
|
|
4
|
+
%title PasswordPusher
|
|
5
|
+
= csrf_meta_tags
|
|
6
|
+
= oboe_rum_header rescue ""
|
|
7
|
+
= stylesheet_link_tag "application"
|
|
8
|
+
%link{ :rel => "shortcut icon", :href => asset_path("favicon.ico"), :type => "image/x-icon" }
|
|
9
|
+
%link{ :rel => "apple-touch-icon", :href => asset_path("apple-touch-icon-iphone.png") }
|
|
10
|
+
%link{ :rel => "apple-touch-icon", :sizes => "72x72", :href => asset_path("apple-touch-icon-ipad.png") }
|
|
11
|
+
%link{ :rel => "apple-touch-icon", :sizes => "114x114", :href => asset_path("apple-touch-icon-iphone4.png") }
|
|
12
|
+
%link{ :rel => "apple-touch-icon", :sizes => "144x144", :href => asset_path("apple-touch-icon-ipad3.png") }
|
|
13
|
+
:javascript
|
|
14
|
+
// Set up the yepnope (Modernizr.load) directives...
|
|
15
|
+
Modernizr.load([
|
|
16
|
+
{
|
|
17
|
+
// Test if Input Range is supported using Modernizr
|
|
18
|
+
test: Modernizr.inputtypes.range,
|
|
19
|
+
// If ranges are not supported, load the slider script and CSS file
|
|
20
|
+
nope: [
|
|
21
|
+
// The slider CSS file
|
|
22
|
+
"css!#{asset_path('fd-slider.css')}"
|
|
23
|
+
// Javascript file for slider
|
|
24
|
+
,"#{asset_path('fd-slider.js')}"
|
|
25
|
+
],
|
|
26
|
+
callback: function(id, testResult) {
|
|
27
|
+
// If the slider file has loaded then fire the onDomReady event
|
|
28
|
+
if("fdSlider" in window && typeof (fdSlider.onDomReady) != "undefined") {
|
|
29
|
+
try { fdSlider.onDomReady(); } catch(err) {};
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
]);
|
|
34
|
+
%body
|
|
35
|
+
.content
|
|
36
|
+
= link_to image_tag("forkme.png", :style => "position: absolute; top: 0; right: 0; border: 0; z-index: 1;", :alt => "Fork me on Github" ), "https://github.com/pglombardo/PasswordPusher"
|
|
37
|
+
= yield
|
|
38
|
+
|
|
39
|
+
= javascript_include_tag "application"
|
|
40
|
+
= render :partial => "layouts/ga" if Rails.env == "production"
|
|
41
|
+
= oboe_rum_footer rescue ""
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
|
|
2
|
+
.about_content
|
|
3
|
+
%div{ :style => 'float: left; font-size: .8em; margin-bottom: 50px;' }
|
|
4
|
+
= link_to '[ Back to front page ]', root_path
|
|
5
|
+
|
|
6
|
+
%p{ :style => 'clear: both;' }
|
|
7
|
+
%h1 About PasswordPusher
|
|
8
|
+
|
|
9
|
+
.about_content
|
|
10
|
+
%p
|
|
11
|
+
PasswordPusher is a Ruby application to communicate passwords over the web. Links to passwords expire after a certain number of views and/or time has passed. Hosted at
|
|
12
|
+
= succeed '.' do
|
|
13
|
+
= link_to "pwpush.com", "https://pwpush.com"
|
|
14
|
+
|
|
15
|
+
%p
|
|
16
|
+
I previously posted this project on
|
|
17
|
+
= link_to "Reddit", "http://www.reddit.com/r/sysadmin/comments/pfda0/do_you_email_out_passwords_i_wrote_this_utility/"
|
|
18
|
+
which provided some great feedback - most of which has been implemented.
|
|
19
|
+
|
|
20
|
+
%p
|
|
21
|
+
The source code to this site is
|
|
22
|
+
= succeed "." do
|
|
23
|
+
= link_to "on Github", "https://github.com/pglombardo/PasswordPusher"
|
|
24
|
+
It's opensource and free for anyone to use or modify. Use it internally at your organization, host it publicly or just use
|
|
25
|
+
= succeed "." do
|
|
26
|
+
= link_to "pwpush.com", "https://pwpush.com"
|
|
27
|
+
It's up to you.
|
|
28
|
+
|
|
29
|
+
%p
|
|
30
|
+
This is me (Peter Giacomo Lombardo) on
|
|
31
|
+
= link_to "LinkedIn", "http://it.linkedin.com/in/peterlombardo"
|
|
32
|
+
and
|
|
33
|
+
= succeed "." do
|
|
34
|
+
= link_to "Github", "https://github.com/pglombardo"
|
|
35
|
+
|
|
36
|
+
%p
|
|
37
|
+
For updates, you can
|
|
38
|
+
= succeed "," do
|
|
39
|
+
= link_to "follow me on Twitter", "https://twitter.com/pglombardo"
|
|
40
|
+
= link_to "Github", "https://github.com/pglombardo"
|
|
41
|
+
or on the
|
|
42
|
+
= succeed "." do
|
|
43
|
+
= link_to "Tumblr blog", "http://blog.gameface.in/"
|
|
44
|
+
|
|
45
|
+
%h1 Related
|
|
46
|
+
|
|
47
|
+
.about_content
|
|
48
|
+
%ul
|
|
49
|
+
%li
|
|
50
|
+
For
|
|
51
|
+
= link_to "Alfred app", "http://www.alfredapp.com/"
|
|
52
|
+
users on Mac, an
|
|
53
|
+
= link_to "workflow", "http://www.packal.org/workflow/passwordpusher"
|
|
54
|
+
to quickly push passwords.
|
|
55
|
+
|
|
56
|
+
%h1 Publicity
|
|
57
|
+
|
|
58
|
+
.about_content
|
|
59
|
+
%p
|
|
60
|
+
Random articles, comments and tweets about PasswordPusher...
|
|
61
|
+
%ol
|
|
62
|
+
%li
|
|
63
|
+
= link_to "How to share passwords securely", "http://envide.no/hvordan-dele-passord-pa-en-sikker-mate/"
|
|
64
|
+
(in Norwegian)
|
|
65
|
+
%li
|
|
66
|
+
= link_to "How to deploy PasswordPusher to CloudFoundry", "http://blog.cloudfoundry.gr.jp/2015/09/cf100apps-061-passwordpusher.html"
|
|
67
|
+
(in Japanese)
|
|
68
|
+
%li
|
|
69
|
+
PasswordPusher was included in
|
|
70
|
+
= link_to "Issue 23", "https://www.cronweekly.com/issue-23/"
|
|
71
|
+
of
|
|
72
|
+
= link_to "Cron Weekly", "https://www.cronweekly.com/"
|
|
73
|
+
%li
|
|
74
|
+
= succeed ":" do
|
|
75
|
+
= link_to "ThinkTechnica", "http://www.thinktechnica.com/"
|
|
76
|
+
= link_to "PasswordPusher", "http://www.thinktechnica.com/r/679/"
|
|
77
|
+
|
|
78
|
+
%li
|
|
79
|
+
= succeed ":" do
|
|
80
|
+
= link_to "TracceWeb", "http://www.tracceweb.com/"
|
|
81
|
+
(Italian)
|
|
82
|
+
= link_to "Invia Password o Messaggi in Modo Sicuro che si Autodistruggono: PasswordPusher", "http://www.tracceweb.com/5398/invia-password-o-messaggi-in-modo-sicuro-che-si-autodistruggono-passwordpusher"
|
|
83
|
+
|
|
84
|
+
%li
|
|
85
|
+
Mentions in a bunch of comments and Tweets: on
|
|
86
|
+
= succeed "," do
|
|
87
|
+
= link_to "HackerNews", "https://news.ycombinator.com/item?id=4237420"
|
|
88
|
+
= succeed "," do
|
|
89
|
+
= link_to "QandASystem", "http://www.qandasystem.info/security/best-practice-for-password-distribution/#comment-137020"
|
|
90
|
+
= succeed "," do
|
|
91
|
+
= link_to "WebDesignShock", "https://twitter.com/WebDesignShock/statuses/174198663701200897"
|
|
92
|
+
and
|
|
93
|
+
= link_to "Logicamp", "https://twitter.com/logicamp/statuses/224418623383535617"
|
|
94
|
+
|
|
95
|
+
%h1 Credits
|
|
96
|
+
|
|
97
|
+
.about_content
|
|
98
|
+
%p
|
|
99
|
+
Thanks to:
|
|
100
|
+
|
|
101
|
+
%ul
|
|
102
|
+
%li
|
|
103
|
+
Everyone on Reddit for all of
|
|
104
|
+
= link_to "the", "http://www.reddit.com/r/sysadmin/comments/pfda0/do_you_email_out_passwords_i_wrote_this_utility/"
|
|
105
|
+
= link_to "great", "http://www.reddit.com/r/web_design/comments/q841p/do_you_email_out_passwords_i_wrote_this_utility/"
|
|
106
|
+
= succeed '.' do
|
|
107
|
+
= link_to "feedback", "http://www.reddit.com/r/sysadmin/comments/tq39p/remember_passwordpusher_pwpushcom_its_now/"
|
|
108
|
+
|
|
109
|
+
%li
|
|
110
|
+
Reddit
|
|
111
|
+
= link_to "/r/freedesign", "http://www.reddit.com/r/freedesign"
|
|
112
|
+
artist
|
|
113
|
+
= link_to "JarvisAndPi", "http://www.reddit.com/user/JarvisAndPi"
|
|
114
|
+
for the favicons
|
|
115
|
+
|
|
116
|
+
%li
|
|
117
|
+
= link_to "zygat3r", "http://zygat3r.deviantart.com/"
|
|
118
|
+
for the
|
|
119
|
+
= link_to "Dark Wood Pack", "http://zygat3r.deviantart.com/art/Dark-Wood-58266349"
|
|
120
|
+
(page backgrounds).
|
|
121
|
+
|
|
122
|
+
%li
|
|
123
|
+
= link_to "Kasper", "https://github.com/kap0w"
|
|
124
|
+
for the
|
|
125
|
+
= succeed "." do
|
|
126
|
+
= link_to "JSON POST fix", "https://github.com/pglombardo/PasswordPusher/pull/3"
|
|
127
|
+
|
|
128
|
+
%h1 Other Related Projects
|
|
129
|
+
|
|
130
|
+
.about_content
|
|
131
|
+
%ul
|
|
132
|
+
%li= link_to "Agrippa", "http://getagrippa.com/"
|
|
133
|
+
%li
|
|
134
|
+
A Django spin-off project:
|
|
135
|
+
= link_to "projectgiraffe", "https://github.com/quasarj/projectgiraffe"
|
|
136
|
+
|
|
137
|
+
%li
|
|
138
|
+
= link_to "phanaster", "https://github.com/phanaster"
|
|
139
|
+
created a
|
|
140
|
+
= link_to "coupon pushing application", "https://github.com/phanaster/cpsh.me"
|
|
141
|
+
== (#{link_to "cpsh.me", "http://cpsh.me/"}) based off of PasswordPusher
|
|
142
|
+
|
|
143
|
+
%li
|
|
144
|
+
= link_to "bemosior", "https://github.com/bemosior"
|
|
145
|
+
put together a PHP port of PasswordPusher:
|
|
146
|
+
= link_to "PHPasswordPusher", "https://github.com/bemosior/PHPasswordPusher"
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
.about_content
|
|
150
|
+
%p
|
|
151
|
+
I also run
|
|
152
|
+
= succeed "." do
|
|
153
|
+
= link_to "Gameface", "http://gameface.in"
|
|
154
|
+
A site to showcase games, the people who play them and the characters they play.
|
|
155
|
+
|
|
156
|
+
.about_content
|
|
157
|
+
%div{ :style => 'float: left; font-size: .8em; margin-bottom: 50px;' }
|
|
158
|
+
= link_to '[ Back to front page ]', root_path
|
|
159
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
%h1 Listing passwords
|
|
2
|
+
|
|
3
|
+
%table
|
|
4
|
+
%tr
|
|
5
|
+
%th
|
|
6
|
+
%th
|
|
7
|
+
%th
|
|
8
|
+
|
|
9
|
+
- @passwords.each do |password|
|
|
10
|
+
%tr
|
|
11
|
+
%td= link_to 'Show', password
|
|
12
|
+
%td= link_to 'Edit', edit_password_path(password)
|
|
13
|
+
%td= link_to 'Destroy', password, :confirm => 'Are you sure?', :method => :delete
|
|
14
|
+
|
|
15
|
+
%br
|
|
16
|
+
|
|
17
|
+
= link_to 'New Password', new_password_path
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
|
|
2
|
+
= form_for @password do |f|
|
|
3
|
+
%p
|
|
4
|
+
%div.title
|
|
5
|
+
%span.title Password Pusher
|
|
6
|
+
%br
|
|
7
|
+
%span.tagline Go Ahead. Email Another Password.
|
|
8
|
+
%p.payload
|
|
9
|
+
= f.text_field(:payload, { :class => "password", :value => PAYLOAD_INITIAL_TEXT, :onfocus => "prepareTextField(this)", :onblur => "revertTextField(this)", :autocomplete => "off" })
|
|
10
|
+
%p
|
|
11
|
+
Delete password after:
|
|
12
|
+
%p.slider_box
|
|
13
|
+
= range_field_tag("password_expire_after_days", EXPIRE_AFTER_DAYS_DEFAULT, {:name => "password[expire_after_days]", :class => "slider", :min => EXPIRE_AFTER_DAYS_MIN, :max => EXPIRE_AFTER_DAYS_MAX, :step => "1", :onchange => "showDaysValue(this.value)"})
|
|
14
|
+
%span#daysrange
|
|
15
|
+
== #{EXPIRE_AFTER_DAYS_DEFAULT} Days
|
|
16
|
+
%p.slider_box
|
|
17
|
+
= range_field_tag("password_expire_after_views", EXPIRE_AFTER_VIEWS_DEFAULT, {:name => "password[expire_after_views]", :class => "slider", :min => EXPIRE_AFTER_VIEWS_MIN, :max => EXPIRE_AFTER_VIEWS_MAX, :step => "1", :onchange => "showViewsValue(this.value)"})
|
|
18
|
+
%span#viewsrange
|
|
19
|
+
== #{EXPIRE_AFTER_VIEWS_DEFAULT} Views
|
|
20
|
+
%br
|
|
21
|
+
%span.note
|
|
22
|
+
(whichever comes first)
|
|
23
|
+
- if DELETABLE_BY_VIEWER_PASSWORDS
|
|
24
|
+
%p.notes
|
|
25
|
+
= check_box_tag "password[deletable_by_viewer]", nil, DELETABLE_BY_VIEWER_DEFAULT
|
|
26
|
+
Allow viewers to optionally delete password before expiration
|
|
27
|
+
|
|
28
|
+
%p
|
|
29
|
+
= f.submit(:value => "Push it!")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
%p.notes
|
|
33
|
+
%p
|
|
34
|
+
%span
|
|
35
|
+
#cookie-save.cookie-save
|
|
36
|
+
%a{ :onclick => "saveExpirations()", :href => "#" } Save
|
|
37
|
+
these settings as
|
|
38
|
+
%i default
|
|
39
|
+
in a browser cookie.
|
|
40
|
+
%span.tip
|
|
41
|
+
* Tip: Only enter the password into the box. Other identifying information can compromise security.
|
|
42
|
+
%p
|
|
43
|
+
%span.note
|
|
44
|
+
All passwords are encrypted prior to storage and are available to only those with the direct link.
|
|
45
|
+
%br/
|
|
46
|
+
%span.note
|
|
47
|
+
Once expired, encrypted passwords are unequivocally deleted from the database.
|
|
48
|
+
|
|
49
|
+
%p.notes
|
|
50
|
+
New
|
|
51
|
+
= link_to "workflow", "http://www.packal.org/workflow/passwordpusher"
|
|
52
|
+
for Alfred users. Thanks to
|
|
53
|
+
= link_to "@psteinweber", "https://github.com/pglombardo/PasswordPusher/issues/29"
|
|
54
|
+
for the idea.
|
|
55
|
+
|
|
56
|
+
- if Rails.env == "production" or Rails.env == "development"
|
|
57
|
+
%p.notes
|
|
58
|
+
= link_to "About PasswordPusher", page_path('about')
|
|
59
|
+
\|
|
|
60
|
+
= link_to "Images, Logos and Icons", 'https://github.com/pglombardo/PasswordPusher/tree/master/app/assets/images'
|
|
61
|
+
%br/
|
|
62
|
+
Follow me on:
|
|
63
|
+
= succeed "," do
|
|
64
|
+
= link_to "@Twitter", "https://twitter.com/pglombardo"
|
|
65
|
+
= link_to "@Github", "https://github.com/pglombardo"
|
|
66
|
+
&
|
|
67
|
+
= link_to "@Tumblr", "http://blog.gameface.in/"
|
|
68
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
%div.content
|
|
2
|
+
- if @password.expired
|
|
3
|
+
%p
|
|
4
|
+
We apologize but...
|
|
5
|
+
%div.payload
|
|
6
|
+
This password has expired.
|
|
7
|
+
%p
|
|
8
|
+
- if @password.deleted
|
|
9
|
+
This password was manually deleted by one of its viewers.
|
|
10
|
+
- elsif @password.views_remaining == 0
|
|
11
|
+
== The password has hit its maximum view count: #{@password.expire_after_views}.
|
|
12
|
+
- elsif @password.days_remaining == 0
|
|
13
|
+
== The password has hit its maximum age: #{@password.expire_after_days} days.
|
|
14
|
+
|
|
15
|
+
- else
|
|
16
|
+
- if @first_view
|
|
17
|
+
.share_note
|
|
18
|
+
== This is your password. Use this link to share it:
|
|
19
|
+
%p.url
|
|
20
|
+
%input{ :value => "#{request.url}", :spellcheck => "false", :onfocus => '$(this).focus(); $(this).select();', :onclick => '$(this).select();' }
|
|
21
|
+
%span#clip_data{ :style => 'display: none;' }= request.url
|
|
22
|
+
%span#clippy{ :title => 'copy to clipboard' }
|
|
23
|
+
%span#clip_tip copy to clipboard
|
|
24
|
+
!= clippy(request.url)
|
|
25
|
+
:javascript
|
|
26
|
+
$('#clippy').mousedown(function (e){
|
|
27
|
+
$('#clip_tip').text('copied!');
|
|
28
|
+
});
|
|
29
|
+
$('#clippy').mouseout(function (e){
|
|
30
|
+
$('#clip_tip').text('copy to clipboard');
|
|
31
|
+
});
|
|
32
|
+
%br/
|
|
33
|
+
%span.note
|
|
34
|
+
This note won't be shown again for this password...
|
|
35
|
+
%br/
|
|
36
|
+
Don't believe me? Go ahead. Hit reload...
|
|
37
|
+
%p
|
|
38
|
+
Your password is...
|
|
39
|
+
|
|
40
|
+
%div.payload.spoiler<
|
|
41
|
+
= @payload
|
|
42
|
+
|
|
43
|
+
%p
|
|
44
|
+
- if @password.views_remaining == 0
|
|
45
|
+
== This password will be deleted in #{pluralize(@password.days_remaining, 'day')} or #{@password.views_remaining} more views (this is the last view).
|
|
46
|
+
- else
|
|
47
|
+
== This password will be deleted in #{pluralize(@password.days_remaining, 'day')}
|
|
48
|
+
== or #{pluralize(@password.views_remaining, 'more view')}.
|
|
49
|
+
- if @password.deletable_by_viewer
|
|
50
|
+
%p{ :style => 'font-size: .85em;' }
|
|
51
|
+
= link_to "Nah. I've got it. Delete it now.", password_path, :id => @password.url_token, :method => :delete, :confirm => 'This will delete the password forever. Are you sure?'
|
|
52
|
+
%div.footer_note
|
|
53
|
+
This
|
|
54
|
+
- if @password.expired
|
|
55
|
+
(unfortunately expired)
|
|
56
|
+
password is brought to you by
|
|
57
|
+
= link_to "Password Pusher", "/"
|
|
58
|
+
and viewers like you.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/ %a.auth_provider{:href => user_omniauth_authorize_path(:twitter)}
|
|
2
|
+
/ = image_tag "https://s3.amazonaws.com/gameface/images/authbuttons/twitter_64.png", :size => "64x64", :alt => "Twitter"
|
|
3
|
+
/ Twitter
|
|
4
|
+
%a.auth_provider{:href => user_omniauth_authorize_path(:google)}
|
|
5
|
+
= image_tag "https://s3.amazonaws.com/gameface/images/authbuttons/google_64.png", :size => "64x64", :alt => "Google"
|
|
6
|
+
Google
|
|
7
|
+
%a.auth_provider{:href => user_omniauth_authorize_path(:yahoo)}
|
|
8
|
+
= image_tag "https://s3.amazonaws.com/gameface/images/authbuttons/yahoo_64.png", :size => "64x64", :alt => "Yahoo"
|
|
9
|
+
Yahoo
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<%= form_for @view do |f| %>
|
|
2
|
+
<%= f.error_messages %>
|
|
3
|
+
<p>
|
|
4
|
+
<%= f.label :password_id %><br />
|
|
5
|
+
<%= f.number_field :password_id %>
|
|
6
|
+
</p>
|
|
7
|
+
<p>
|
|
8
|
+
<%= f.label :ip %><br />
|
|
9
|
+
<%= f.text_field :ip %>
|
|
10
|
+
</p>
|
|
11
|
+
<p>
|
|
12
|
+
<%= f.label :user_agent %><br />
|
|
13
|
+
<%= f.text_field :user_agent %>
|
|
14
|
+
</p>
|
|
15
|
+
<p><%= f.submit %></p>
|
|
16
|
+
<% end %>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<% title "Views" %>
|
|
2
|
+
|
|
3
|
+
<table>
|
|
4
|
+
<tr>
|
|
5
|
+
<th>Password</th>
|
|
6
|
+
<th>Ip</th>
|
|
7
|
+
<th>User Agent</th>
|
|
8
|
+
</tr>
|
|
9
|
+
<% for view in @views %>
|
|
10
|
+
<tr>
|
|
11
|
+
<td><%= view.password_id %></td>
|
|
12
|
+
<td><%= view.ip %></td>
|
|
13
|
+
<td><%= view.user_agent %></td>
|
|
14
|
+
<td><%= link_to "Show", view %></td>
|
|
15
|
+
<td><%= link_to "Edit", edit_view_path(view) %></td>
|
|
16
|
+
<td><%= link_to "Destroy", view, :confirm => 'Are you sure?', :method => :delete %></td>
|
|
17
|
+
</tr>
|
|
18
|
+
<% end %>
|
|
19
|
+
</table>
|
|
20
|
+
|
|
21
|
+
<p><%= link_to "New View", new_view_path %></p>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<% title "View" %>
|
|
2
|
+
|
|
3
|
+
<p>
|
|
4
|
+
<strong>Password:</strong>
|
|
5
|
+
<%= @view.password_id %>
|
|
6
|
+
</p>
|
|
7
|
+
<p>
|
|
8
|
+
<strong>Ip:</strong>
|
|
9
|
+
<%= @view.ip %>
|
|
10
|
+
</p>
|
|
11
|
+
<p>
|
|
12
|
+
<strong>User Agent:</strong>
|
|
13
|
+
<%= @view.user_agent %>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p>
|
|
17
|
+
<%= link_to "Edit", edit_view_path(@view) %> |
|
|
18
|
+
<%= link_to "Destroy", @view, :confirm => 'Are you sure?', :method => :delete %> |
|
|
19
|
+
<%= link_to "View All", views_path %>
|
|
20
|
+
</p>
|