morpho 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/api/concerns/morpho/grape/jwt_authentication.rb +2 -2
- data/app/api/morpho/entities/error.rb +8 -0
- data/app/assets/stylesheets/morpho/application.css +1 -74
- data/app/controllers/morpho/activations_controller.rb +2 -2
- data/app/models/morpho/user.rb +1 -1
- data/app/views/morpho/activations/failure.html.erb +17 -0
- data/app/views/morpho/activations/new.html.erb +4 -4
- data/app/views/morpho/activations/success.html.erb +17 -0
- data/app/views/morpho/passwords/edit.html.erb +5 -5
- data/app/views/morpho/passwords/new.html.erb +4 -4
- data/app/views/morpho/sessions/new.html.erb +5 -5
- data/app/views/morpho/unlocks/new.html.erb +4 -4
- data/app/views/morpho/users/new.html.erb +6 -6
- data/config/locales/morpho.es.yml +88 -1
- data/lib/morpho.rb +1 -0
- data/lib/morpho/cipher.rb +13 -0
- data/lib/morpho/configurations/auth.rb +2 -1
- data/lib/morpho/loader.rb +1 -0
- data/lib/morpho/version.rb +1 -1
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0338ac8728b7b68d4573d522582176ef24120d8ee32b166a4b47a4cc2c31a80
|
4
|
+
data.tar.gz: f1b00da0632ea3ec3f63c60cbdb01b378b404fdbb6c24696c10cfea8291a29d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11778c465a75f168c1a1a8db55ca70d3b9d70b8f61d0dd69743fcfccfc3e7c3951d9d29c287587ad7ee2e1cadb1d3059f990a0dd51f709e63c060feb9813abd4
|
7
|
+
data.tar.gz: 1674597483b4ea9c1098dd92936796a394c790a2403e9702ae3225949862109cf8d54411540411fb3a0753940ace36a724dd1ce30a02080506f3a797705661ce
|
@@ -55,12 +55,12 @@ module Morpho
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def jwt_encode(payload)
|
58
|
-
|
58
|
+
Morpho::Cipher.jwt_encode(payload)
|
59
59
|
end
|
60
60
|
|
61
61
|
def jwt_decode(token)
|
62
62
|
begin
|
63
|
-
return
|
63
|
+
return Morpho::Cipher.jwt_decode(token)
|
64
64
|
rescue
|
65
65
|
nil
|
66
66
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module Morpho
|
2
|
+
module Entities
|
3
|
+
class Error < ::Grape::Entity
|
4
|
+
expose :message, documentation: { type: 'string', desc: 'Error standard message', required: true }
|
5
|
+
expose :errors, safe: true, documentation: { type: 'string', desc: 'Error message details', is_array: true }
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
@@ -12,77 +12,4 @@
|
|
12
12
|
*
|
13
13
|
*= require_self
|
14
14
|
*/
|
15
|
-
@import 'https://fonts.googleapis.com/css?family=Raleway:400,300,600';
|
16
|
-
@import 'https://cdn.jsdelivr.net/npm/skeleton-css@2.0.4/css/normalize.css';
|
17
|
-
@import 'https://cdn.jsdelivr.net/npm/skeleton-css@2.0.4/css/skeleton.css';
|
18
|
-
|
19
|
-
body {
|
20
|
-
padding: 2em 1em;
|
21
|
-
}
|
22
|
-
|
23
|
-
.alert {
|
24
|
-
display: block;
|
25
|
-
padding: 1em;
|
26
|
-
border-left: 5px solid;
|
27
|
-
margin-bottom: 1em;
|
28
|
-
}
|
29
|
-
|
30
|
-
.alert-success {
|
31
|
-
background-color: #D5F5E3;
|
32
|
-
border-left-color: #2ECC71;
|
33
|
-
color: #2ECC71;
|
34
|
-
}
|
35
|
-
|
36
|
-
.alert-info {
|
37
|
-
background-color: #D6EAF8;
|
38
|
-
border-left-color: #3498DB;
|
39
|
-
color: #3498DB;
|
40
|
-
}
|
41
|
-
|
42
|
-
.alert-warning {
|
43
|
-
background-color: #FCF3CF;
|
44
|
-
border-left-color: #F1C40F;
|
45
|
-
color: #F1C40F;
|
46
|
-
}
|
47
|
-
|
48
|
-
.alert-error {
|
49
|
-
background-color: #F2D7D5;
|
50
|
-
border-left-color: #C0392B;
|
51
|
-
color: #C0392B;
|
52
|
-
}
|
53
|
-
|
54
|
-
.field_with_errors {
|
55
|
-
padding-bottom: 1em;
|
56
|
-
}
|
57
|
-
|
58
|
-
.field_with_errors input, .field_with_errors textarea, .field_with_errors select {
|
59
|
-
margin-bottom: 0.5em;
|
60
|
-
}
|
61
|
-
|
62
|
-
.field_with_errors span.error {
|
63
|
-
color: #C0392B;
|
64
|
-
text-transform: lowercase;
|
65
|
-
}
|
66
|
-
|
67
|
-
.input label.boolean {
|
68
|
-
display: inline;
|
69
|
-
font-weight: normal;
|
70
|
-
margin-left: 0.5em;
|
71
|
-
}
|
72
|
-
|
73
|
-
ul.unstyled {
|
74
|
-
list-style: none;
|
75
|
-
}
|
76
|
-
|
77
|
-
.sign-in-form, .sign-up-form, .activation-form, .reset-password-form, .unlock-form {
|
78
|
-
position: relative;
|
79
|
-
height: 50vh;
|
80
|
-
}
|
81
|
-
|
82
|
-
.sign-in-form form, .sign-up-form form, .activation-form form, .reset-password-form form, .unlock-form form {
|
83
|
-
position: absolute;
|
84
|
-
top: 50%;
|
85
|
-
left: 50%;
|
86
|
-
transform: translate(-50%, -50%);
|
87
|
-
width: 50vh;
|
88
|
-
}
|
15
|
+
@import 'https://fonts.googleapis.com/css?family=Raleway:400,300,600';
|
@@ -17,9 +17,9 @@ module Morpho
|
|
17
17
|
def show
|
18
18
|
if user && !user.active?
|
19
19
|
user.activate!
|
20
|
-
|
20
|
+
render "morpho/activations/success"
|
21
21
|
else
|
22
|
-
|
22
|
+
render "morpho/activations/failure"
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
data/app/models/morpho/user.rb
CHANGED
@@ -5,7 +5,7 @@ module Morpho
|
|
5
5
|
has_many :authentications, dependent: :destroy
|
6
6
|
accepts_nested_attributes_for :authentications
|
7
7
|
|
8
|
-
validates :password, length: { minimum:
|
8
|
+
validates :password, length: { minimum: Morpho.config.auth.password_minimum_length },
|
9
9
|
:'morpho/validators/contain_number' => true,
|
10
10
|
:'morpho/validators/contain_uppercase' => true,
|
11
11
|
:'morpho/validators/contain_symbol' => true
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<div class="tw-flex tw-flex-wrap tw-h-screen tw-items-center tw-content-center tw-text-grey-dark tw-text-4xl">
|
2
|
+
<div class="tw-w-full lg:tw-w-3/4 tw-mx-auto tw-text-center">
|
3
|
+
<h3 class="tw-text-5xl tw-pb-16 tw-text-grey-dark">
|
4
|
+
Token inválido
|
5
|
+
</h3>
|
6
|
+
<div class="">
|
7
|
+
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="tw-pt-24 tw-px-32 ">
|
11
|
+
<p>
|
12
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
|
13
|
+
</p>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
</div>
|
17
|
+
</div>
|
@@ -1,10 +1,10 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="">
|
2
2
|
<%= simple_form_for :user, url: send_activation_path do |f| %>
|
3
|
-
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '
|
3
|
+
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '' } %>
|
4
4
|
|
5
|
-
<%= f.submit t('morpho.labels.activations.send_instructions'), class: '
|
5
|
+
<%= f.submit t('morpho.labels.activations.send_instructions'), class: '' %>
|
6
6
|
|
7
|
-
<ul class="
|
7
|
+
<ul class="">
|
8
8
|
<li>
|
9
9
|
<%= link_to t('morpho.labels.activations.sign_in'), sign_in_path %>
|
10
10
|
</li>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<div class="">
|
2
|
+
<div class="">
|
3
|
+
<h3 class="">
|
4
|
+
Cuenta activada
|
5
|
+
</h3>
|
6
|
+
<div class="">
|
7
|
+
<%= link_to 'Iniciar sesión', sign_in_path , class: "" %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="">
|
11
|
+
<p>
|
12
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
|
13
|
+
</p>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
</div>
|
17
|
+
</div>
|
@@ -1,12 +1,12 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="">
|
2
2
|
<%= simple_form_for user, url: change_password_path(token: params[:token]), method: :put do |f| %>
|
3
|
-
<%= f.input :password, required: true, placeholder: '************', input_html: { class: '
|
3
|
+
<%= f.input :password, required: true, placeholder: '************', input_html: { class: '' } %>
|
4
4
|
|
5
|
-
<%= f.input :password_confirmation, required: true, placeholder: '************', input_html: { class: '
|
5
|
+
<%= f.input :password_confirmation, required: true, placeholder: '************', input_html: { class: '' } %>
|
6
6
|
|
7
|
-
<%= f.submit t('morpho.labels.passwords.change_password'), class: '
|
7
|
+
<%= f.submit t('morpho.labels.passwords.change_password'), class: '' %>
|
8
8
|
|
9
|
-
<ul class="
|
9
|
+
<ul class="">
|
10
10
|
<li>
|
11
11
|
<%= link_to t('morpho.labels.passwords.sign_in'), sign_in_path %>
|
12
12
|
</li>
|
@@ -1,10 +1,10 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="">
|
2
2
|
<%= simple_form_for :user, url: send_reset_password_path do |f| %>
|
3
|
-
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '
|
3
|
+
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '' } %>
|
4
4
|
|
5
|
-
<%= f.submit t('morpho.labels.passwords.send_instructions'), class: 'button-primary
|
5
|
+
<%= f.submit t('morpho.labels.passwords.send_instructions'), class: 'button-primary ' %>
|
6
6
|
|
7
|
-
<ul class="
|
7
|
+
<ul class="">
|
8
8
|
<li>
|
9
9
|
<%= link_to t('morpho.labels.passwords.sign_in'), sign_in_path %>
|
10
10
|
</li>
|
@@ -1,14 +1,14 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="">
|
2
2
|
<%= simple_form_for :session, url: sign_in_path do |f| %>
|
3
|
-
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '
|
3
|
+
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '' } %>
|
4
4
|
|
5
|
-
<%= f.input :password, required: true, placeholder: '************', input_html: { class: '
|
5
|
+
<%= f.input :password, required: true, placeholder: '************', input_html: { class: '' } %>
|
6
6
|
|
7
7
|
<%= f.input :remember_me, as: :boolean %>
|
8
8
|
|
9
|
-
<%= f.submit t('morpho.labels.sessions.sign_in'), class: '
|
9
|
+
<%= f.submit t('morpho.labels.sessions.sign_in'), class: '' %>
|
10
10
|
|
11
|
-
<ul class="
|
11
|
+
<ul class="">
|
12
12
|
<li>
|
13
13
|
<%= link_to t('morpho.labels.sessions.sign_up'), sign_up_path %>
|
14
14
|
</li>
|
@@ -1,10 +1,10 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="">
|
2
2
|
<%= simple_form_for :user, url: send_unlock_path do |f| %>
|
3
|
-
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '
|
3
|
+
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '' } %>
|
4
4
|
|
5
|
-
<%= f.submit t('morpho.labels.unlocks.send_instructions'), class: '
|
5
|
+
<%= f.submit t('morpho.labels.unlocks.send_instructions'), class: '' %>
|
6
6
|
|
7
|
-
<ul class="
|
7
|
+
<ul class="">
|
8
8
|
<li>
|
9
9
|
<%= link_to t('morpho.labels.unlocks.sign_in'), sign_in_path %>
|
10
10
|
</li>
|
@@ -1,14 +1,14 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="">
|
2
2
|
<%= simple_form_for user, url: sign_up_path do |f| %>
|
3
|
-
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '
|
3
|
+
<%= f.input :email, required: true, placeholder: 'johndoe@example.com', input_html: { class: '' } %>
|
4
4
|
|
5
|
-
<%= f.input :password, required: true, placeholder: '************', input_html: { class: '
|
5
|
+
<%= f.input :password, required: true, placeholder: '************', input_html: { class: '' } %>
|
6
6
|
|
7
|
-
<%= f.input :password_confirmation, required: true, placeholder: '************', input_html: { class: '
|
7
|
+
<%= f.input :password_confirmation, required: true, placeholder: '************', input_html: { class: '' } %>
|
8
8
|
|
9
|
-
<%= f.submit t('morpho.labels.users.sign_up'), class: '
|
9
|
+
<%= f.submit t('morpho.labels.users.sign_up'), class: '' %>
|
10
10
|
|
11
|
-
<ul class="
|
11
|
+
<ul class="">
|
12
12
|
<li>
|
13
13
|
<%= link_to t('morpho.labels.users.sign_in'), sign_in_path %>
|
14
14
|
</li>
|
@@ -1,5 +1,68 @@
|
|
1
1
|
es:
|
2
2
|
morpho:
|
3
|
+
labels:
|
4
|
+
validators:
|
5
|
+
contain_symbol: 'debe de contener un caracter especial'
|
6
|
+
contain_number: 'debe de contener un número'
|
7
|
+
contain_uppercase: 'debe de contener al menos una letra en mayúscula'
|
8
|
+
sessions:
|
9
|
+
sign_in: 'Iniciar sesión'
|
10
|
+
sign_up: 'Regístrate con una nueva cuenta de usuario'
|
11
|
+
password_reset: 'Restablecer la contraseña de mi cuenta'
|
12
|
+
unlock: 'Desbloquear mi cuenta'
|
13
|
+
users:
|
14
|
+
sign_up: 'Regístrate'
|
15
|
+
sign_in: 'Inicia sesión con una cuenta de usuario existente'
|
16
|
+
activation: 'Activar mi cuenta'
|
17
|
+
passwords:
|
18
|
+
send_instructions: 'Enviar instrucciones de restablecer contraseña'
|
19
|
+
sign_in: 'Inicia sesión con una cuenta de usuario existente'
|
20
|
+
sign_up: 'Regístrate con una nueva cuenta de usuario'
|
21
|
+
change_password: 'Cambiar mi contraseña'
|
22
|
+
activations:
|
23
|
+
send_instructions: 'Enviar instrucciones de activación'
|
24
|
+
sign_in: 'Inicia sesión con una cuenta de usuario existente'
|
25
|
+
sign_up: 'Regístrate con una nueva cuenta de usuario'
|
26
|
+
unlocks:
|
27
|
+
send_instructions: 'Enviar instrucciones de desbloqueo'
|
28
|
+
sign_in: 'Inicia sesión con una cuenta de usuario existente'
|
29
|
+
sign_up: 'Regístrate con una nueva cuenta de usuario'
|
30
|
+
messages:
|
31
|
+
unauthenticated: 'Necesitas iniciar sesión primero'
|
32
|
+
sessions:
|
33
|
+
create:
|
34
|
+
success: 'Inicia sesión exitosamente'
|
35
|
+
failure: 'Error de inicio de sesión, por favor verifique la información proporcionada'
|
36
|
+
destroy:
|
37
|
+
success: 'Usted cierra la sesión con éxito'
|
38
|
+
users:
|
39
|
+
create:
|
40
|
+
success: 'Regístrese con éxito, recibirá un correo electrónico con instrucciones de activación de cuenta.'
|
41
|
+
failure: 'Registro fallido, por favor revise los errores a continuación'
|
42
|
+
passwords:
|
43
|
+
create:
|
44
|
+
success: 'Recibirá instrucciones para restablecer su contraseña en su buzón de correo electrónico.'
|
45
|
+
failure: 'No se ha encontrado ninguna cuenta de usuario con ese correo electrónico.'
|
46
|
+
edit:
|
47
|
+
success: 'Ingrese su nueva contraseña en los campos de abajo'
|
48
|
+
failure: 'Error al restablecer la contraseña, solicitar un nuevo token de activación'
|
49
|
+
update:
|
50
|
+
success: 'Contraseña modificada correctamente, inicie sesión para continuar'
|
51
|
+
failure: 'Error de cambio de contraseña, por favor revise los errores a continuación'
|
52
|
+
activations:
|
53
|
+
create:
|
54
|
+
success: 'Recibirá instrucciones de activación de cuenta de usuario en su buzón de correo electrónico.'
|
55
|
+
failure: 'Ninguna cuenta de usuario encontrada con ese correo electrónico o cuenta de usuario ya está activa'
|
56
|
+
activate:
|
57
|
+
success: 'Activación exitosa, inicie sesión para continuar'
|
58
|
+
failure: 'La activación falló, solicita un nuevo token de activación'
|
59
|
+
unlocks:
|
60
|
+
create:
|
61
|
+
success: 'Recibirás instrucciones de desbloqueo de cuenta de usuario en tu buzón de correo electrónico.'
|
62
|
+
failure: 'Ninguna cuenta de usuario encontrada con ese correo electrónico o cuenta de usuario ya está desbloqueada'
|
63
|
+
unlock:
|
64
|
+
success: 'Desbloqueo exitoso, inicia sesión para continuar'
|
65
|
+
failure: 'Falló el desbloqueo, solicita un nuevo token de desbloqueo'
|
3
66
|
mailer:
|
4
67
|
activation_needed:
|
5
68
|
subject: 'Te has registrado correctamente'
|
@@ -63,4 +126,28 @@ es:
|
|
63
126
|
|
64
127
|
Para desbloquear tu cuenta ahora, solo sigue este enlace: %{url}. De todos modos se desbloqueará automáticamente en una hora.
|
65
128
|
|
66
|
-
¡Que tengas un gran día!
|
129
|
+
¡Que tengas un gran día!
|
130
|
+
|
131
|
+
api:
|
132
|
+
messages:
|
133
|
+
bad_request: 'Solicitud incorrecta'
|
134
|
+
unauthorized: 'No autorizado'
|
135
|
+
payment_required: 'Pago requerido'
|
136
|
+
forbidden: 'Prohibido'
|
137
|
+
not_found: 'No encontrado'
|
138
|
+
method_not_allowed: 'Método no permitido'
|
139
|
+
unprocessable_entity: 'Entidad no procesable'
|
140
|
+
simple_form:
|
141
|
+
'yes': 'Si'
|
142
|
+
'no': 'No'
|
143
|
+
required:
|
144
|
+
text: 'requerido'
|
145
|
+
mark: '*'
|
146
|
+
error_notification:
|
147
|
+
default_message: 'Por favor revise los problemas a continuación:'
|
148
|
+
labels:
|
149
|
+
defaults:
|
150
|
+
email: 'Correo electrónico'
|
151
|
+
password: 'Contraseña'
|
152
|
+
password_confirmation: 'Confirmar la contraseña'
|
153
|
+
remember_me: 'Recuérdame'
|
data/lib/morpho.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Morpho
|
2
|
+
module Cipher
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def jwt_encode(payload, algorithm = Morpho.config.jwt.algorithm)
|
6
|
+
JWT.encode(payload, Morpho.config.jwt.secret, algorithm)
|
7
|
+
end
|
8
|
+
|
9
|
+
def jwt_decode(token, algorithm = Morpho.config.jwt.algorithm)
|
10
|
+
JWT.decode(token, Morpho.config.jwt.secret, true, algorithm: algorithm)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/morpho/loader.rb
CHANGED
data/lib/morpho/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: morpho
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hugo Gilmar Erazo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: 0.2.2
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rails-i18n
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '5.1'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '5.1'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: sqlite3
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -238,6 +252,7 @@ files:
|
|
238
252
|
- app/api/concerns/morpho/grape/user_unlock.rb
|
239
253
|
- app/api/morpho/entities/authentication_token.rb
|
240
254
|
- app/api/morpho/entities/base.rb
|
255
|
+
- app/api/morpho/entities/error.rb
|
241
256
|
- app/api/morpho/entities/user.rb
|
242
257
|
- app/api/morpho/entities/user_sign_in.rb
|
243
258
|
- app/api/morpho/entities/user_sign_up.rb
|
@@ -268,7 +283,9 @@ files:
|
|
268
283
|
- app/views/layouts/morpho/application.html.erb
|
269
284
|
- app/views/layouts/morpho/mailer.html.erb
|
270
285
|
- app/views/layouts/morpho/mailer.text.erb
|
286
|
+
- app/views/morpho/activations/failure.html.erb
|
271
287
|
- app/views/morpho/activations/new.html.erb
|
288
|
+
- app/views/morpho/activations/success.html.erb
|
272
289
|
- app/views/morpho/home/index.html.erb
|
273
290
|
- app/views/morpho/passwords/edit.html.erb
|
274
291
|
- app/views/morpho/passwords/new.html.erb
|
@@ -303,6 +320,7 @@ files:
|
|
303
320
|
- lib/generators/morpho/install/templates/public/favicon-32x32.png
|
304
321
|
- lib/generators/morpho/install/templates/public/favicon.ico
|
305
322
|
- lib/morpho.rb
|
323
|
+
- lib/morpho/cipher.rb
|
306
324
|
- lib/morpho/configuration.rb
|
307
325
|
- lib/morpho/configurations/api.rb
|
308
326
|
- lib/morpho/configurations/auth.rb
|