orats 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +231 -58
- data/lib/orats/cli.rb +63 -25
- data/lib/orats/commands/common.rb +47 -22
- data/lib/orats/commands/{outdated → diff}/compare.rb +5 -4
- data/lib/orats/commands/diff/exec.rb +86 -0
- data/lib/orats/commands/{outdated → diff}/parse.rb +5 -1
- data/lib/orats/commands/inventory.rb +121 -0
- data/lib/orats/commands/{play.rb → playbook.rb} +5 -5
- data/lib/orats/commands/project/exec.rb +74 -0
- data/lib/orats/commands/{new → project}/rails.rb +57 -81
- data/lib/orats/commands/{new → project}/server.rb +6 -4
- data/lib/orats/templates/auth.rb +26 -481
- data/lib/orats/templates/base.rb +74 -716
- data/lib/orats/templates/includes/common/LICENSE +22 -0
- data/lib/orats/templates/includes/new/rails/.env +43 -0
- data/lib/orats/templates/includes/{Gemfile → new/rails/Gemfile} +1 -1
- data/lib/orats/templates/includes/new/rails/Procfile +3 -0
- data/lib/orats/templates/includes/new/rails/README.md +3 -0
- data/lib/orats/templates/includes/{app → new/rails/app}/assets/favicon/favicon_base.png +0 -0
- data/lib/orats/templates/includes/new/rails/app/helpers/application_helper.rb +53 -0
- data/lib/orats/templates/includes/new/rails/app/models/account.rb +40 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/confirmations/new.html.erb +26 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/reset_password_instructions.html.erb +10 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/unlock_instructions.html.erb +8 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/passwords/edit.html.erb +28 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/passwords/new.html.erb +26 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/registrations/edit.html.erb +51 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/registrations/new.html.erb +31 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/sessions/new.html.erb +39 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/shared/_links.html.erb +38 -0
- data/lib/orats/templates/includes/new/rails/app/views/devise/unlocks/new.html.erb +26 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_disqus_comments_snippet.html.erb +19 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_disqus_count_snippet.html.erb +12 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_flash.html.erb +10 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_footer.html.erb +2 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_google_analytics_snippet.html.erb +13 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_google_analytics_tracker.html.erb +4 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation.html.erb +18 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation_auth.html.erb +15 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation_links.html.erb +3 -0
- data/lib/orats/templates/includes/new/rails/app/views/layouts/application.html.erb +48 -0
- data/lib/orats/templates/includes/new/rails/app/views/pages/home.html.erb +81 -0
- data/lib/orats/templates/includes/new/rails/config/database.yml +19 -0
- data/lib/orats/templates/includes/new/rails/config/environments/staging.rb +5 -0
- data/lib/orats/templates/includes/new/rails/config/initializers/devise_async.rb +1 -0
- data/lib/orats/templates/includes/new/rails/config/initializers/mini_profiler.rb +4 -0
- data/lib/orats/templates/includes/new/rails/config/initializers/sidekiq.rb +16 -0
- data/lib/orats/templates/includes/new/rails/config/puma.rb +25 -0
- data/lib/orats/templates/includes/new/rails/config/secrets.yml +12 -0
- data/lib/orats/templates/includes/new/rails/config/sidekiq.yml +5 -0
- data/lib/orats/templates/includes/new/rails/config/sitemap.rb +20 -0
- data/lib/orats/templates/includes/new/rails/config/whenever.rb +7 -0
- data/lib/orats/templates/includes/new/rails/lib/backup/config.rb +116 -0
- data/lib/orats/templates/includes/new/rails/lib/backup/models/backup.rb +55 -0
- data/lib/orats/templates/includes/new/rails/lib/tasks/orats/backup.rake +18 -0
- data/lib/orats/templates/includes/new/rails/lib/tasks/orats/favicon.rake +48 -0
- data/lib/orats/templates/includes/new/rails/public/404.html +13 -0
- data/lib/orats/templates/includes/new/rails/public/422.html +13 -0
- data/lib/orats/templates/includes/new/rails/public/500.html +13 -0
- data/lib/orats/templates/includes/new/rails/public/502.html +13 -0
- data/lib/orats/templates/includes/new/rails/test/fixtures/accounts.yml +27 -0
- data/lib/orats/templates/includes/new/rails/test/models/account_test.rb +46 -0
- data/lib/orats/templates/includes/{Galaxyfile → playbook/Galaxyfile} +0 -0
- data/lib/orats/templates/includes/playbook/site.yml +53 -0
- data/lib/orats/templates/playbook.rb +115 -0
- data/lib/orats/version.rb +1 -1
- data/test/integration/cli_test.rb +122 -75
- data/test/test_helper.rb +16 -8
- metadata +63 -14
- data/lib/orats/commands/new/ansible.rb +0 -98
- data/lib/orats/commands/new/exec.rb +0 -60
- data/lib/orats/commands/outdated/exec.rb +0 -46
- data/lib/orats/templates/play.rb +0 -185
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) Time.now.year author_name author_email
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
'Software'), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,43 @@
|
|
1
|
+
RAILS_ENV: development
|
2
|
+
|
3
|
+
PROJECT_PATH: /home/yourname/dev/testproj
|
4
|
+
TIME_ZONE: Eastern Time (US & Canada)
|
5
|
+
DEFAULT_LOCALE: en
|
6
|
+
|
7
|
+
GOOGLE_ANALYTICS_UA: ""
|
8
|
+
DISQUS_SHORT_NAME: ""
|
9
|
+
S3_ACCESS_KEY_ID: ""
|
10
|
+
S3_SECRET_ACCESS_KEY: ""
|
11
|
+
S3_REGION: ""
|
12
|
+
|
13
|
+
TOKEN_RAILS_SECRET: generate_token
|
14
|
+
|
15
|
+
SMTP_ADDRESS: smtp.gmail.com
|
16
|
+
SMTP_PORT: 587 # 465 if you use ssl
|
17
|
+
SMTP_DOMAIN: gmail.com
|
18
|
+
SMTP_USERNAME: app_name@gmail.com
|
19
|
+
SMTP_PASSWORD: thebestpassword
|
20
|
+
SMTP_AUTH: plain
|
21
|
+
SMTP_ENCRYPTION: starttls
|
22
|
+
|
23
|
+
ACTION_MAILER_HOST: localhost:3000
|
24
|
+
ACTION_MAILER_DEFAULT_FROM: info@app_name.com
|
25
|
+
ACTION_MAILER_DEFAULT_TO: me@app_name.com
|
26
|
+
|
27
|
+
DATABASE_NAME: app_name
|
28
|
+
DATABASE_HOST: localhost
|
29
|
+
DATABASE_POOL: 25
|
30
|
+
DATABASE_TIMEOUT: 5000
|
31
|
+
DATABASE_USERNAME: postgres
|
32
|
+
DATABASE_PASSWORD: supersecrets
|
33
|
+
|
34
|
+
CACHE_HOST: localhost
|
35
|
+
CACHE_PORT: 6379
|
36
|
+
CACHE_DATABASE: 0
|
37
|
+
CACHE_PASSWORD: ""
|
38
|
+
|
39
|
+
PUMA_THREADS_MIN: 0
|
40
|
+
PUMA_THREADS_MAX: 1
|
41
|
+
PUMA_WORKERS: 0
|
42
|
+
|
43
|
+
SIDEKIQ_CONCURRENCY: 25
|
File without changes
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module ApplicationHelper
|
2
|
+
def title(page_title)
|
3
|
+
content_for(:title) { page_title }
|
4
|
+
end
|
5
|
+
|
6
|
+
def meta_description(page_meta_description)
|
7
|
+
content_for(:meta_description) { page_meta_description }
|
8
|
+
end
|
9
|
+
|
10
|
+
def heading(page_heading)
|
11
|
+
content_for(:heading) { page_heading }
|
12
|
+
end
|
13
|
+
|
14
|
+
def link_to_all_favicons
|
15
|
+
'<link href="speeddial-160x160.png" rel="icon" type="image/png" />
|
16
|
+
<link href="apple-touch-icon-228x228-precomposed.png" rel="apple-touch-icon-precomposed" sizes="228x228" type="image/png" />
|
17
|
+
<link href="apple-touch-icon-152x152-precomposed.png" rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" />
|
18
|
+
<link href="apple-touch-icon-144x144-precomposed.png" rel="apple-touch-icon-precomposed" sizes="144x144" type="image/png" />
|
19
|
+
<link href="apple-touch-icon-120x120-precomposed.png" rel="apple-touch-icon-precomposed" sizes="120x120" type="image/png" />
|
20
|
+
<link href="apple-touch-icon-114x114-precomposed.png" rel="apple-touch-icon-precomposed" sizes="114x114" type="image/png" />
|
21
|
+
<link href="apple-touch-icon-76x76-precomposed.png" rel="apple-touch-icon-precomposed" sizes="76x76" type="image/png" />
|
22
|
+
<link href="apple-touch-icon-72x72-precomposed.png" rel="apple-touch-icon-precomposed" sizes="72x72" type="image/png" />
|
23
|
+
<link href="apple-touch-icon-60x60-precomposed.png" rel="apple-touch-icon-precomposed" sizes="60x60" type="image/png" />
|
24
|
+
<link href="apple-touch-icon-57x57-precomposed.png" rel="apple-touch-icon-precomposed" sizes="57x57" type="image/png" />
|
25
|
+
<link href="favicon-196x196.png" rel="icon" sizes="196x196" type="image/png" />
|
26
|
+
<link href="favicon-160x160.png" rel="icon" sizes="160x160" type="image/png" />
|
27
|
+
<link href="favicon-96x96.png" rel="icon" sizes="96x96" type="image/png" />
|
28
|
+
<link href="favicon-64x64.png" rel="icon" sizes="64x64" type="image/png" />
|
29
|
+
<link href="favicon-32x32.png" rel="icon" sizes="32x32" type="image/png" />
|
30
|
+
<link href="favicon-24x24.png" rel="icon" sizes="24x24" type="image/png" />
|
31
|
+
<link href="favicon-16x16.png" rel="icon" sizes="16x16" type="image/png" />
|
32
|
+
<link href="favicon.ico" rel="icon" type="image/x-icon" />
|
33
|
+
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />'.html_safe
|
34
|
+
end
|
35
|
+
|
36
|
+
def humanize_boolean(input)
|
37
|
+
input ||= ''
|
38
|
+
case input.to_s.downcase
|
39
|
+
when 't', 'true'
|
40
|
+
'Yes'
|
41
|
+
else
|
42
|
+
'No'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def css_for_boolean(input)
|
47
|
+
if input
|
48
|
+
'success'
|
49
|
+
else
|
50
|
+
'danger'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Account < ActiveRecord::Base
|
2
|
+
ROLES = %w[admin guest]
|
3
|
+
|
4
|
+
devise :database_authenticatable, :registerable, :recoverable, :rememberable,
|
5
|
+
:trackable, :timeoutable, :lockable, :validatable, :async
|
6
|
+
|
7
|
+
before_validation :ensure_password, on: :create
|
8
|
+
|
9
|
+
after_save :invalidate_cache
|
10
|
+
|
11
|
+
validates :role, inclusion: {in: ROLES}
|
12
|
+
|
13
|
+
def self.serialize_from_session(key, salt)
|
14
|
+
# store the current_account in the cache so we do not perform a db lookup on each authenticated page
|
15
|
+
single_key = key.is_a?(Array) ? key.first : key
|
16
|
+
|
17
|
+
Rails.cache.fetch("account:#{single_key}") do
|
18
|
+
Account.where(id: single_key).entries.first
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.generate_password(length = 10)
|
23
|
+
Devise.friendly_token.first(length)
|
24
|
+
end
|
25
|
+
|
26
|
+
def is?(role_check)
|
27
|
+
role.to_sym == role_check
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def ensure_password
|
33
|
+
# only generate a password if it does not exist
|
34
|
+
self.password ||= Account.generate_password
|
35
|
+
end
|
36
|
+
|
37
|
+
def invalidate_cache
|
38
|
+
Rails.cache.delete("account:#{id}")
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<%
|
2
|
+
title 'Confirm'
|
3
|
+
meta_description '...'
|
4
|
+
heading 'Confirm'
|
5
|
+
%>
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-sm-4">
|
9
|
+
<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: {method: :post}) do |f| %>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= f.label :email %>
|
12
|
+
<%= f.email_field :email, class: 'form-control', maxlength: 254, autofocus: true,
|
13
|
+
data: {
|
14
|
+
'rule-required' => 'true',
|
15
|
+
'rule-maxlength' => '254'
|
16
|
+
} %>
|
17
|
+
</div>
|
18
|
+
<%= button_tag type: 'submit', class: 'btn btn-primary' do %>
|
19
|
+
Send
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
<div class="col-sm-6 col-sm-offset-2">
|
24
|
+
<%= render 'devise/shared/links' %>
|
25
|
+
</div>
|
26
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
2
|
+
|
3
|
+
<p>Someone has requested a link to change your password. You can do this through
|
4
|
+
the link below.</p>
|
5
|
+
|
6
|
+
<p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
|
7
|
+
|
8
|
+
<p>If you didn't request this, please ignore this email.</p>
|
9
|
+
<p>Your password won't change until you access the link above and create a new
|
10
|
+
one.</p>
|
data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/unlock_instructions.html.erb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
2
|
+
|
3
|
+
<p>Your account has been locked due to an excessive number of unsuccessful sign
|
4
|
+
in attempts.</p>
|
5
|
+
|
6
|
+
<p>Click the link below to unlock your account:</p>
|
7
|
+
|
8
|
+
<p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %></p>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<%
|
2
|
+
title 'Change your password'
|
3
|
+
meta_description '...'
|
4
|
+
heading 'Change your password'
|
5
|
+
%>
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-sm-4">
|
9
|
+
<%= form_for resource, as: resource_name, url: password_path(resource_name), html: {method: :put} do |f| %>
|
10
|
+
<%= f.hidden_field :reset_password_token %>
|
11
|
+
<div class="form-group">
|
12
|
+
<%= f.label :password, 'New password' %>
|
13
|
+
<%= f.password_field :password, maxlength: 128, class: 'form-control', autofocus: true,
|
14
|
+
data: {
|
15
|
+
'rule-required' => 'true',
|
16
|
+
'rule-minlength' => '8',
|
17
|
+
'rule-maxlength' => '128'
|
18
|
+
} %>
|
19
|
+
</div>
|
20
|
+
<%= button_tag type: 'submit', class: 'btn btn-primary' do %>
|
21
|
+
Send
|
22
|
+
<% end %>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
<div class="col-sm-6 col-sm-offset-2">
|
26
|
+
<%= render 'devise/shared/links' %>
|
27
|
+
</div>
|
28
|
+
</div>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<%
|
2
|
+
title 'Forgot your password?'
|
3
|
+
meta_description '...'
|
4
|
+
heading 'Forgot your password?'
|
5
|
+
%>
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-sm-4">
|
9
|
+
<%= form_for resource, as: resource_name, url: password_path(resource_name), html: {method: :post} do |f| %>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= f.label :email %>
|
12
|
+
<%= f.email_field :email, class: 'form-control', autofocus: true, maxlength: 254,
|
13
|
+
data: {
|
14
|
+
'rule-required' => 'true',
|
15
|
+
'rule-maxlength' => '254'
|
16
|
+
} %>
|
17
|
+
</div>
|
18
|
+
<%= button_tag type: 'submit', class: 'btn btn-primary' do %>
|
19
|
+
Send
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
<div class="col-sm-6 col-sm-offset-2">
|
24
|
+
<%= render 'devise/shared/links' %>
|
25
|
+
</div>
|
26
|
+
</div>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<%
|
2
|
+
title 'Edit your account'
|
3
|
+
meta_description '...'
|
4
|
+
heading 'Edit your account'
|
5
|
+
%>
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-sm-6">
|
9
|
+
<%= form_for resource, as: resource_name, url: registration_path(resource_name), html: {method: :patch} do |f| %>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= f.label :current_password %>
|
12
|
+
<span class="help-block form-help-adjust-margin">
|
13
|
+
<small>
|
14
|
+
Supply your current password to make any changes
|
15
|
+
</small>
|
16
|
+
</span>
|
17
|
+
<%= f.password_field :current_password, maxlength: 128, class: 'form-control',
|
18
|
+
data: {
|
19
|
+
'rule-required' => 'true',
|
20
|
+
'rule-minlength' => '8',
|
21
|
+
'rule-maxlength' => '128'
|
22
|
+
} %>
|
23
|
+
</div>
|
24
|
+
<div class="form-group">
|
25
|
+
<%= f.label :email %>
|
26
|
+
<%= f.email_field :email, class: 'form-control', maxlength: 254, autofocus: true %>
|
27
|
+
</div>
|
28
|
+
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
|
29
|
+
<h3>Currently waiting confirmation
|
30
|
+
for: <%= resource.unconfirmed_email %></h3>
|
31
|
+
<% end %>
|
32
|
+
<div class="form-group">
|
33
|
+
<%= f.label :password %>
|
34
|
+
<span class="help-block form-help-adjust-margin">
|
35
|
+
<small>
|
36
|
+
Leave this blank if you do not want to change it
|
37
|
+
</small>
|
38
|
+
</span>
|
39
|
+
<%= f.password_field :password, class: 'form-control' %>
|
40
|
+
</div>
|
41
|
+
<%= button_tag type: 'submit', class: 'btn btn-primary' do %>
|
42
|
+
Save
|
43
|
+
<% end %>
|
44
|
+
<% end %>
|
45
|
+
</div>
|
46
|
+
<div class="col-sm-6">
|
47
|
+
<p>
|
48
|
+
Unhappy? <%= button_to 'Cancel my account', registration_path(resource_name), method: :delete %>
|
49
|
+
</p>
|
50
|
+
</div>
|
51
|
+
</div>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<%
|
2
|
+
title 'Register a new account'
|
3
|
+
meta_description '...'
|
4
|
+
heading 'Register a new account'
|
5
|
+
%>
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-sm-4">
|
9
|
+
<%= form_for resource, as: resource_name, url: registration_path(resource_name) do |f| %>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= f.label :email %>
|
12
|
+
<%= f.email_field :email, class: 'form-control', maxlength: 254, autofocus: true %>
|
13
|
+
</div>
|
14
|
+
<div class="form-group">
|
15
|
+
<%= f.label :password %>
|
16
|
+
<%= f.password_field :password, maxlength: 128, class: 'form-control',
|
17
|
+
data: {
|
18
|
+
'rule-required' => 'true',
|
19
|
+
'rule-minlength' => '8',
|
20
|
+
'rule-maxlength' => '128'
|
21
|
+
} %>
|
22
|
+
</div>
|
23
|
+
<%= button_tag type: 'submit', class: 'btn btn-primary' do %>
|
24
|
+
Register
|
25
|
+
<% end %>
|
26
|
+
<% end %>
|
27
|
+
</div>
|
28
|
+
<div class="col-sm-6 col-sm-offset-2">
|
29
|
+
<%= render 'devise/shared/links' %>
|
30
|
+
</div>
|
31
|
+
</div>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<%
|
2
|
+
title 'Sign in'
|
3
|
+
meta_description '...'
|
4
|
+
heading 'Sign in'
|
5
|
+
%>
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-sm-4">
|
9
|
+
<%= form_for resource, as: resource_name, url: session_path(resource_name) do |f| %>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= f.label :email %>
|
12
|
+
<%= f.email_field :email, maxlength: 254, class: 'form-control', autofocus: true %>
|
13
|
+
</div>
|
14
|
+
<div class="form-group">
|
15
|
+
<%= f.label :password %>
|
16
|
+
<%= f.password_field :password, maxlength: 128, class: 'form-control',
|
17
|
+
data: {
|
18
|
+
'rule-required' => 'true',
|
19
|
+
'rule-minlength' => '8',
|
20
|
+
'rule-maxlength' => '128'
|
21
|
+
} %>
|
22
|
+
</div>
|
23
|
+
<% if devise_mapping.rememberable? -%>
|
24
|
+
<div class="checkbox">
|
25
|
+
<%= f.label :remember_me do %>
|
26
|
+
<%= f.check_box :remember_me %> Stay signed in
|
27
|
+
<% end %>
|
28
|
+
</div>
|
29
|
+
<% end -%>
|
30
|
+
<%= button_tag type: 'submit', class: 'btn btn-primary' do %>
|
31
|
+
Sign in
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
34
|
+
</div>
|
35
|
+
<div class="col-sm-6 col-sm-offset-2">
|
36
|
+
<h4 class="success-color">Having trouble accessing your account?</h4>
|
37
|
+
<%= render 'devise/shared/links' %>
|
38
|
+
</div>
|
39
|
+
</div>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<%= content_tag(:h4, 'Or do something else') if controller_name != 'sessions' %>
|
2
|
+
<ul>
|
3
|
+
<%- if controller_name != 'sessions' %>
|
4
|
+
<li>
|
5
|
+
<%= link_to 'Sign in', new_session_path(resource_name) %>
|
6
|
+
</li>
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
|
10
|
+
<li>
|
11
|
+
<%= link_to 'Sign up', new_registration_path(resource_name) %>
|
12
|
+
</li>
|
13
|
+
<% end -%>
|
14
|
+
|
15
|
+
<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
|
16
|
+
<li>
|
17
|
+
<%= link_to 'Forgot your password?', new_password_path(resource_name) %>
|
18
|
+
</li>
|
19
|
+
<% end -%>
|
20
|
+
|
21
|
+
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
|
22
|
+
<li>
|
23
|
+
<%= link_to 'Re-send confirmation instructions?', new_confirmation_path(resource_name) %>
|
24
|
+
</li>
|
25
|
+
<% end -%>
|
26
|
+
|
27
|
+
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
|
28
|
+
<li>
|
29
|
+
<%= link_to 'Are you locked out of your account?', new_unlock_path(resource_name) %>
|
30
|
+
</li>
|
31
|
+
<% end -%>
|
32
|
+
|
33
|
+
<%- if devise_mapping.omniauthable? %>
|
34
|
+
<%- resource_class.omniauth_providers.each do |provider| %>
|
35
|
+
<li><%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %></li>
|
36
|
+
<% end -%>
|
37
|
+
<% end -%>
|
38
|
+
</ul>
|