gennaro 0.2.1 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/bin/gennaro +1 -1
  3. data/lib/gennaro/gennaro.rb +1 -0
  4. data/lib/gennaro/version.rb +1 -1
  5. data/templates/authentication/Gemfile +1 -0
  6. data/templates/authentication/Rakefile +5 -1
  7. data/templates/authentication/app/controllers/application.rb +22 -0
  8. data/templates/authentication/app/controllers/users.rb +68 -48
  9. data/templates/authentication/app/helpers/application.rb +20 -0
  10. data/templates/authentication/app/helpers/cookie.rb +5 -8
  11. data/templates/authentication/app/helpers/user.rb +11 -1
  12. data/templates/authentication/app/models/user.rb +4 -28
  13. data/templates/authentication/app/views/user/login.erb +16 -0
  14. data/templates/authentication/app/views/user/logout.erb +9 -0
  15. data/templates/authentication/app/views/user/lost_password.erb +15 -0
  16. data/templates/authentication/app/views/user/password_recovery.erb +17 -0
  17. data/templates/authentication/app/views/user/signup.erb +17 -0
  18. data/templates/authentication/app/views/user/template/footer.rb +2 -0
  19. data/templates/authentication/app/views/user/template/header.erb +8 -0
  20. data/templates/authentication/config.ru +5 -0
  21. data/templates/authentication/views/user/login.erb +16 -0
  22. data/templates/authentication/views/user/logout.erb +9 -0
  23. data/templates/authentication/views/user/lost_password.erb +15 -0
  24. data/templates/authentication/views/user/new_password.erb +16 -0
  25. data/templates/authentication/views/user/password_recovery.erb +17 -0
  26. data/templates/authentication/views/user/signup.erb +17 -0
  27. data/templates/authentication/views/user/template/footer.erb +2 -0
  28. data/templates/authentication/views/user/template/header.erb +8 -0
  29. metadata +19 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4d5143a79ab2cf7e6e3ccb6dea61bd0b7290de0
4
- data.tar.gz: 462d31e7772aac3b15b27a2f7631b638f8101e7c
3
+ metadata.gz: 80405acaeb5e87ed31dc20a59b3cb045fb0b0636
4
+ data.tar.gz: b0354be72a53234219c5e458982514ea2b9d1549
5
5
  SHA512:
6
- metadata.gz: 7a5f52841341d2b93d7c48b14e0eb44811bb0ea4afa1cc25dd1e07483d5970f4f00086eb208145106f663f0e74a1e59714fce38d33c3ba76adb6eeecfc75f9d1
7
- data.tar.gz: 2b9cecbeca7b065ae60cbad34e2d54a7da2d399efd84c79a13d48732f605366b188d9e8b378ca2d82408c04fb6f8ce39d9f8aad52a8bee8f3cbc48f8f9b4f652
6
+ metadata.gz: d00251c816c985f2da759a2663ce5ce296c086c153e9975707333670e06f61e0ccc5021b68efeb11e63ec50e6388523dfd04c085180bcd238f7dd976cc8e5a2b
7
+ data.tar.gz: 78f08cfa769fece813ea53603a2353d2ee27b823a01c77a141e49f035aa115a36d203c9e83e4ad2e56b9ae58645e19121c59e4b66d254884bcc39911e6d596c6
data/bin/gennaro CHANGED
@@ -57,5 +57,5 @@ else
57
57
  gennaro = Gennaro.new template, options[:classname], options[:path], options[:force]
58
58
  gennaro.generate!
59
59
  gennaro.replace_tags!
60
- puts "All done. Execute 'cd #{gennaro.path} && bundle install && rake test'"
60
+ puts "All done. Execute 'cd #{gennaro.path} && bundle install && rake'"
61
61
  end
@@ -41,6 +41,7 @@ class Gennaro
41
41
  s = File.read f
42
42
  File.open(f, ?w) { |f|
43
43
  s.gsub! '${ClassName}', @classname
44
+ s.gsub! '${AppName}', @appname
44
45
  s.gsub! '${GenerateString}', get_random_string(36)
45
46
  f.write s
46
47
  }
@@ -10,6 +10,6 @@
10
10
 
11
11
  class Gennaro
12
12
  def self.version
13
- '0.2.1'
13
+ '0.3'
14
14
  end
15
15
  end
@@ -1,5 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'thin'
3
4
  gem 'sinatra'
4
5
  gem 'bcrypt-ruby'
5
6
  gem 'data_mapper'
@@ -1,11 +1,15 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'rake'
3
3
 
4
- task :default => :test
4
+ task :default => [ :test, :run ]
5
5
 
6
6
  task :test do
7
7
  FileUtils.cd 'spec' do
8
8
  sh 'rspec user_spec.rb --backtrace --color --format doc'
9
9
  end
10
10
  File.delete 'db/spec.db' if File.exists? 'db/spec.db'
11
+ end
12
+
13
+ task :run do
14
+ sh 'thin -R config.ru -p 4567 start'
11
15
  end
@@ -0,0 +1,22 @@
1
+ #--
2
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
3
+ # Version 2, December 2004
4
+ #
5
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
6
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
7
+ #
8
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
9
+ #++
10
+
11
+ class ${ClassName}
12
+ before do
13
+ @title = '${ClassName}'
14
+ @language = request.env['HTTP_ACCEPT_LANGUAGE']
15
+ @current_url = "http://#{request.env['HTTP_HOST']}#{request.env['REQUEST_URI']}"
16
+ @domain = "http://#{request.env['HTTP_HOST']}"
17
+ end
18
+
19
+ get '/' do
20
+ 'Hello, world!'
21
+ end
22
+ end
@@ -9,78 +9,98 @@
9
9
  #++
10
10
 
11
11
  class ${ClassName}
12
- post '/user/login/?' do
13
- if logged_in?
14
- return 'You are already logged in.'
15
- end
16
-
17
- if User.login params[:username], params[:password]
18
- 'Login successful.'
19
- else
20
- 'Login failed.'
21
- end
12
+ get '/user/login/?' do
13
+ erb :'user/login'
22
14
  end
23
15
 
24
- post '/user/logout/?' do
16
+ get '/user/logout/?' do
25
17
  if logged_in?
26
18
  current_user.logout!
27
- 'Logout successful.'
19
+ delete_login!
20
+ @success = 'Logout successful.'
28
21
  else
29
- 'You are not logged in.'
22
+ @error = 'You are not logged in.'
30
23
  end
24
+
25
+ erb :'user/logout'
31
26
  end
32
27
 
33
- post '/user/signup/?' do
34
- if logged_in?
35
- return 'You are already logged in.'
28
+ get '/user/signup/?' do
29
+ erb :'user/signup'
30
+ end
31
+
32
+ get '/user/lost_password/?' do
33
+ erb :'user/lost_password'
34
+ end
35
+
36
+ get '/user/password_recovery/?' do
37
+ erb :'user/password_recovery'
38
+ end
39
+
40
+ post '/user/login/?' do
41
+ if not fields? :username, :password
42
+ @error = 'You have to complete all the required fields.'
43
+ elsif logged_in?
44
+ @error = 'You are already logged in.'
45
+ else
46
+ session = User.login params[:username], params[:password]
47
+ if session
48
+ set_login! session
49
+ @success = 'Login successful.'
50
+ else
51
+ @error = 'Login failed.'
52
+ end
36
53
  end
37
54
 
38
- if User.exists? params[:username]
39
- 'The username you have chosen is already taken.'
55
+ erb :'user/login'
56
+ end
57
+
58
+ post '/user/signup/?' do
59
+ if not fields? :username, :email, :password
60
+ @error = 'You have to complete all the required fields.'
61
+ elsif logged_in?
62
+ @error = 'You are already logged in.'
63
+ elsif User.exists? params[:username]
64
+ @error = 'The username you have chosen is already taken.'
40
65
  else
41
- user = User.new params[:username], params[:email], params[:password], User.user
66
+ user = User.signup params[:username], params[:email], params[:password], User.user
42
67
  if user.errors.any?
43
- user.errors.first
68
+ @error = user.errors.first
44
69
  else
45
- 'Sign up successful.'
70
+ @success = 'Sign up successful.'
46
71
  end
47
72
  end
73
+
74
+ erb :'user/signup'
48
75
  end
49
76
 
50
77
  post '/user/lost_password/?' do
51
- if logged_in?
52
- return 'You are already logged in.'
53
- end
54
-
55
- if User.exists? params[:username]
56
- User.lost_password params[:username]
78
+ if not fields? :username
79
+ @error = 'You have to complete all the required fields.'
80
+ elsif logged_in?
81
+ @error = 'You are already logged in.'
82
+ elsif User.exists? params[:username]
83
+ passcode = User.lost_password params[:username]
84
+ # send a mail or what you want
85
+ @success = 'You should receive a mail with the instructions to recover your password.'
57
86
  else
58
- 'The given username doesn\'t exists.'
87
+ @error = 'The given username doesn\'t exists.'
59
88
  end
89
+
90
+ erb :'user/lost_password'
60
91
  end
61
92
 
62
93
  post '/user/password_recovery/?' do
63
- if logged_in?
64
- return 'You are already logged in.'
65
- end
66
-
67
- if User.password_recovery params[:username], params[:passcode], params[:password]
68
- 'Password set successful.'
94
+ if not fields? :username, :passcode, :password
95
+ @error = 'You have to complete all the required fields.'
96
+ elsif logged_in?
97
+ @error = 'You are already logged in.'
98
+ elsif User.password_recovery params[:username], params[:passcode], params[:password]
99
+ @success = 'Password set successful.'
69
100
  else
70
- 'Error setting the password.'
71
- end
72
- end
73
-
74
- post '/user/new_password/?' do
75
- unless logged_in?
76
- return 'You need to log in.'
101
+ @error = 'Error setting the password.'
77
102
  end
78
103
 
79
- user = current_user.new_password params[:curr_password], params[:password]
80
- if user
81
- 'Your new password has been set.'
82
- else
83
- 'Error setting your new password.'
84
- end
104
+ erb :'user/password_recovery'
85
105
  end
86
- end
106
+ end
@@ -0,0 +1,20 @@
1
+ #--
2
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
3
+ # Version 2, December 2004
4
+ #
5
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
6
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
7
+ #
8
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
9
+ #++
10
+
11
+ class ${ClassName}
12
+ helpers do
13
+ def fields?(*args)
14
+ args.each { |a|
15
+ return false unless params.include? a.to_s
16
+ }
17
+ true
18
+ end
19
+ end
20
+ end
@@ -18,19 +18,16 @@ class ${ClassName}
18
18
  }
19
19
  end
20
20
 
21
- def delete_cookie(key)
22
- response.set_cookie key, {
23
- :value => '',
24
- :expires => Time.now
25
- }
21
+ def get_cookie(key)
22
+ request.cookies[key]
26
23
  end
27
24
 
28
25
  def cookie_exists?(key)
29
- request.cookies.include? key
26
+ !!get_cookie(key)
30
27
  end
31
28
 
32
- def get_cookie(key)
33
- cookie_exists?(key) ? request.cookies[key] : nil
29
+ def delete_cookie(key)
30
+ set_cookie key, '', '/', Time.now
34
31
  end
35
32
  end
36
33
  end
@@ -12,7 +12,7 @@ class ${ClassName}
12
12
  helpers do
13
13
  def current_user
14
14
  guest = Guest.new
15
- return guest unless cookie_exists? 'userid'
15
+ return guest unless cookie_exists? 'sessid'
16
16
  User.first(:session => get_cookie('sessid')) || guest
17
17
  end
18
18
 
@@ -20,5 +20,15 @@ class ${ClassName}
20
20
  current_user.is_a? User
21
21
  end
22
22
  alias_method :logged?, :logged_in?
23
+
24
+ def set_login(session)
25
+ set_cookie 'sessid', session
26
+ end
27
+ alias_method :set_login!, :set_login
28
+
29
+ def delete_login
30
+ delete_cookie 'sessid'
31
+ end
32
+ alias_method :delete_login!, :delete_login
23
33
  end
24
34
  end
@@ -30,8 +30,9 @@ class User
30
30
  property :updated_at, DateTime
31
31
 
32
32
  def password=(password)
33
- self.salt = BCrypt::Engine.generate_salt
34
- self.salted_password = BCrypt::Engine.hash_secret password, self.salt
33
+ salt = BCrypt::Engine.generate_salt
34
+ self.salt = salt
35
+ self.salted_password = BCrypt::Engine.hash_secret password, salt
35
36
  end
36
37
 
37
38
  def founder?
@@ -74,11 +75,6 @@ class User
74
75
  end
75
76
  alias_method :logout!, :logout
76
77
 
77
- def new_password(curr_password, password)
78
- return false unless self.salted_password == BCrypt::Engine.hash_secret(curr_password, self.salt)
79
- self.password = password
80
- end
81
-
82
78
  class << self
83
79
  def banned
84
80
  -1
@@ -127,7 +123,7 @@ class User
127
123
  user = User.first(:username => username)
128
124
  return false unless user
129
125
  if user.salted_password == BCrypt::Engine.hash_secret(password, user.salt)
130
- user.update(:session => BCrypt::Engine.generate_salt)
126
+ return user.update(:session => BCrypt::Engine.generate_salt) ? user.session : false
131
127
  else
132
128
  false
133
129
  end
@@ -136,19 +132,6 @@ class User
136
132
  alias_method :signin, :authentication
137
133
  alias_method :authenticate, :authentication
138
134
 
139
- def logout(username)
140
- user = User.first(:username => username)
141
- return false unless user
142
- user.update(:session => '')
143
- user.session.empty?
144
- end
145
- alias_method :logout!, :logout
146
-
147
- def logged?(username, session)
148
- User.count(:username => username, :session => session) == 1
149
- end
150
- alias_method :logged_in?, :logged?
151
-
152
135
  def lost_password(username)
153
136
  user = User.first(:username => username)
154
137
  return false unless user
@@ -168,12 +151,5 @@ class User
168
151
  :password => password
169
152
  })
170
153
  end
171
-
172
- def new_password(username, curr_password, password)
173
- user = User.first(:username => username)
174
- return false unless user
175
- return false unless user.salted_password == BCrypt::Engine.hash_secret(curr_password, user.salt)
176
- user.update(:password => password)
177
- end
178
154
  end
179
155
  end
@@ -0,0 +1,16 @@
1
+ <%= erb :'template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <input type="password" placeholder="password" name="password"><br>
11
+ <%= csrf_tag %>
12
+ <input type="submit" value="Login">
13
+ </form>
14
+ <% end %>
15
+
16
+ <%= erb :'template/footer' %>
@@ -0,0 +1,9 @@
1
+ <%= erb :'template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% end %>
8
+
9
+ <%= erb :'template/footer' %>
@@ -0,0 +1,15 @@
1
+ <%= erb :'template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <%= csrf_tag %>
11
+ <input type="submit" value="Request">
12
+ </form>
13
+ <% end %>
14
+
15
+ <%= erb :'template/footer' %>
@@ -0,0 +1,17 @@
1
+ <%= erb :'template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <input type="password" placeholder="code" name="passcode"><br>
11
+ <input type="password" placeholder="new password" name="password"><br>
12
+ <%= csrf_tag %>
13
+ <input type="submit" value="Recover">
14
+ </form>
15
+ <% end %>
16
+
17
+ <%= erb :'template/footer' %>
@@ -0,0 +1,17 @@
1
+ <%= erb :'template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <input type="email" placeholder="email" name="email" ><br>
11
+ <input type="password" placeholder="password" name="password"><br>
12
+ <%= csrf_tag %>
13
+ <input type="submit" value="Sign up">
14
+ </form>
15
+ <% end %>
16
+
17
+ <%= erb :'template/footer' %>
@@ -0,0 +1,2 @@
1
+ </body>
2
+ </html>
@@ -0,0 +1,8 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
+ <meta name="robots" content="index, follow">
6
+ <title><%= @title %></title>
7
+ </head>
8
+ <body>
@@ -0,0 +1,5 @@
1
+ require 'bundler'
2
+ Bundler.require
3
+
4
+ require './example'
5
+ run ${ClassName}
@@ -0,0 +1,16 @@
1
+ <%= erb :'user/template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <input type="password" placeholder="password" name="password"><br>
11
+ <%= csrf_tag %>
12
+ <input type="submit" value="Login">
13
+ </form>
14
+ <% end %>
15
+
16
+ <%= erb :'user/template/footer' %>
@@ -0,0 +1,9 @@
1
+ <%= erb :'user/template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% end %>
8
+
9
+ <%= erb :'user/template/footer' %>
@@ -0,0 +1,15 @@
1
+ <%= erb :'user/template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <%= csrf_tag %>
11
+ <input type="submit" value="Request">
12
+ </form>
13
+ <% end %>
14
+
15
+ <%= erb :'user/template/footer' %>
@@ -0,0 +1,16 @@
1
+ <%= erb :'user/template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="password" placeholder="current password" name="curr_password"><br>
10
+ <input type="password" placeholder="new password" name="password" ><br>
11
+ <%= csrf_tag %>
12
+ <input type="submit" value="Send">
13
+ </form>
14
+ <% end %>
15
+
16
+ <%= erb :'user/template/footer' %>
@@ -0,0 +1,17 @@
1
+ <%= erb :'user/template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <input type="password" placeholder="code" name="passcode"><br>
11
+ <input type="password" placeholder="new password" name="password"><br>
12
+ <%= csrf_tag %>
13
+ <input type="submit" value="Recover">
14
+ </form>
15
+ <% end %>
16
+
17
+ <%= erb :'user/template/footer' %>
@@ -0,0 +1,17 @@
1
+ <%= erb :'user/template/header' %>
2
+
3
+ <% if defined? @error %>
4
+ <p class="error"><%= @error %></p>
5
+ <% elsif defined? @success %>
6
+ <p class="success"><%= @success %></p>
7
+ <% else %>
8
+ <form action="<%= @current_url %>" method="post">
9
+ <input type="text" placeholder="username" name="username"><br>
10
+ <input type="email" placeholder="email" name="email" ><br>
11
+ <input type="password" placeholder="password" name="password"><br>
12
+ <%= csrf_tag %>
13
+ <input type="submit" value="Sign up">
14
+ </form>
15
+ <% end %>
16
+
17
+ <%= erb :'user/template/footer' %>
@@ -0,0 +1,2 @@
1
+ </body>
2
+ </html>
@@ -0,0 +1,8 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
+ <meta name="robots" content="index, follow">
6
+ <title><%= @title %></title>
7
+ </head>
8
+ <body>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gennaro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Giovanni Capuano
@@ -50,16 +50,34 @@ files:
50
50
  - lib/gennaro/gennaro.rb
51
51
  - lib/gennaro/version.rb
52
52
  - lib/gennaro.rb
53
+ - templates/authentication/app/controllers/application.rb
53
54
  - templates/authentication/app/controllers/users.rb
55
+ - templates/authentication/app/helpers/application.rb
54
56
  - templates/authentication/app/helpers/cookie.rb
55
57
  - templates/authentication/app/helpers/csrf.rb
56
58
  - templates/authentication/app/helpers/user.rb
57
59
  - templates/authentication/app/models/guest.rb
58
60
  - templates/authentication/app/models/user.rb
61
+ - templates/authentication/app/views/user/login.erb
62
+ - templates/authentication/app/views/user/logout.erb
63
+ - templates/authentication/app/views/user/lost_password.erb
64
+ - templates/authentication/app/views/user/password_recovery.erb
65
+ - templates/authentication/app/views/user/signup.erb
66
+ - templates/authentication/app/views/user/template/footer.rb
67
+ - templates/authentication/app/views/user/template/header.erb
68
+ - templates/authentication/config.ru
59
69
  - templates/authentication/Gemfile
60
70
  - templates/authentication/Rakefile
61
71
  - templates/authentication/spec/spec.rb
62
72
  - templates/authentication/spec/user_spec.rb
73
+ - templates/authentication/views/user/login.erb
74
+ - templates/authentication/views/user/logout.erb
75
+ - templates/authentication/views/user/lost_password.erb
76
+ - templates/authentication/views/user/new_password.erb
77
+ - templates/authentication/views/user/password_recovery.erb
78
+ - templates/authentication/views/user/signup.erb
79
+ - templates/authentication/views/user/template/footer.erb
80
+ - templates/authentication/views/user/template/header.erb
63
81
  - templates/authentication/_class_name_.rb
64
82
  - spec/gennaro_spec.rb
65
83
  - bin/gennaro