lato_core 1.1

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.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +38 -0
  3. data/app/controllers/lato_core/api/v1/api_controller.rb +9 -0
  4. data/app/controllers/lato_core/application_controller.rb +6 -0
  5. data/app/controllers/lato_core/back/authentication_controller.rb +114 -0
  6. data/app/controllers/lato_core/back/back_controller.rb +28 -0
  7. data/app/controllers/lato_core/back/superusers_controller.rb +172 -0
  8. data/app/mailers/lato_core/application_mailer.rb +10 -0
  9. data/app/mailers/lato_core/superusers_mailer.rb +29 -0
  10. data/app/models/lato_core/superuser.rb +43 -0
  11. data/app/views/lato_core/back/authentication/login.html.erb +42 -0
  12. data/app/views/lato_core/back/authentication/password_edit.html.erb +50 -0
  13. data/app/views/lato_core/back/authentication/password_forget.html.erb +37 -0
  14. data/app/views/lato_core/back/back/home.html.erb +20 -0
  15. data/app/views/lato_core/back/superusers/edit.html.erb +12 -0
  16. data/app/views/lato_core/back/superusers/index.html.erb +25 -0
  17. data/app/views/lato_core/back/superusers/new.html.erb +12 -0
  18. data/app/views/lato_core/back/superusers/shared/_form.html.erb +71 -0
  19. data/app/views/lato_core/back/superusers/show.html.erb +1 -0
  20. data/app/views/lato_core/mailers/layouts/mailer.html.erb +9 -0
  21. data/app/views/lato_core/mailers/layouts/mailer.text.erb +1 -0
  22. data/app/views/lato_core/mailers/superusers/notify.html.erb +2 -0
  23. data/app/views/lato_core/mailers/superusers/recover_password.html.erb +4 -0
  24. data/config/config.yml +8 -0
  25. data/config/example.yml +66 -0
  26. data/config/initializers/init.rb +16 -0
  27. data/config/initializers/ram.rb +50 -0
  28. data/config/routes.rb +20 -0
  29. data/db/migrate/20160224181217_create_lato_core_superusers.rb +15 -0
  30. data/lib/lato_core.rb +11 -0
  31. data/lib/lato_core/engine.rb +26 -0
  32. data/lib/lato_core/interface.rb +29 -0
  33. data/lib/lato_core/interface/authentication.rb +34 -0
  34. data/lib/lato_core/interface/cache.rb +29 -0
  35. data/lib/lato_core/interface/communication.rb +104 -0
  36. data/lib/lato_core/interface/languages.rb +60 -0
  37. data/lib/lato_core/interface/navigation.rb +109 -0
  38. data/lib/lato_core/interface/session.rb +71 -0
  39. data/lib/lato_core/interface/superusers.rb +143 -0
  40. data/lib/tasks/lato_core_tasks.rake +11 -0
  41. data/test/controllers/lato_core/api/v1/api_controller_test.rb +9 -0
  42. data/test/controllers/lato_core/application_controller_test.rb +9 -0
  43. data/test/controllers/lato_core/back/authentication_controller_test.rb +13 -0
  44. data/test/controllers/lato_core/back/back_controller_test.rb +9 -0
  45. data/test/controllers/lato_core/back/session_controller_test.rb +13 -0
  46. data/test/controllers/lato_core/back/superusers_controller_test.rb +13 -0
  47. data/test/dummy/README.rdoc +28 -0
  48. data/test/dummy/Rakefile +6 -0
  49. data/test/dummy/app/assets/javascripts/application.js +13 -0
  50. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  51. data/test/dummy/app/controllers/application_controller.rb +5 -0
  52. data/test/dummy/app/helpers/application_helper.rb +2 -0
  53. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  54. data/test/dummy/bin/bundle +3 -0
  55. data/test/dummy/bin/rails +4 -0
  56. data/test/dummy/bin/rake +4 -0
  57. data/test/dummy/bin/setup +29 -0
  58. data/test/dummy/config.ru +4 -0
  59. data/test/dummy/config/application.rb +25 -0
  60. data/test/dummy/config/boot.rb +5 -0
  61. data/test/dummy/config/database.yml +25 -0
  62. data/test/dummy/config/environment.rb +5 -0
  63. data/test/dummy/config/environments/development.rb +41 -0
  64. data/test/dummy/config/environments/production.rb +79 -0
  65. data/test/dummy/config/environments/test.rb +42 -0
  66. data/test/dummy/config/initializers/assets.rb +11 -0
  67. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  68. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  69. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  70. data/test/dummy/config/initializers/inflections.rb +16 -0
  71. data/test/dummy/config/initializers/mime_types.rb +4 -0
  72. data/test/dummy/config/initializers/session_store.rb +3 -0
  73. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  74. data/test/dummy/config/locales/en.yml +23 -0
  75. data/test/dummy/config/routes.rb +4 -0
  76. data/test/dummy/config/secrets.yml +22 -0
  77. data/test/dummy/log/test.log +0 -0
  78. data/test/dummy/public/404.html +67 -0
  79. data/test/dummy/public/422.html +67 -0
  80. data/test/dummy/public/500.html +66 -0
  81. data/test/dummy/public/favicon.ico +0 -0
  82. data/test/fixtures/lato_core/superusers.yml +11 -0
  83. data/test/integration/navigation_test.rb +8 -0
  84. data/test/lato_core_test.rb +7 -0
  85. data/test/mailers/lato_core/lato_core_mailer_test.rb +9 -0
  86. data/test/mailers/previews/lato_core/lato_core_mailer_preview.rb +6 -0
  87. data/test/models/lato_core/superuser_test.rb +9 -0
  88. data/test/test_helper.rb +21 -0
  89. metadata +207 -0
data/config/routes.rb ADDED
@@ -0,0 +1,20 @@
1
+ LatoCore::Engine.routes.draw do
2
+ root 'back/back#home'
3
+
4
+ # Authentication
5
+ get 'login', to: 'back/authentication#login', as: 'login'
6
+ post 'exec_login', to: 'back/authentication#exec_login', as: 'exec_login'
7
+ delete 'exec_logout', to: 'back/authentication#exec_logout', as: 'exec_logout'
8
+
9
+ # view richiesta email
10
+ get 'password_forget', to: 'back/authentication#password_forget', as: 'password_forget'
11
+ # invio email recupero psw
12
+ post 'password_recover', to: 'back/authentication#password_recover', as: 'password_recover'
13
+ # view inserimento nuova psw
14
+ get 'password_edit/:token', to: 'back/authentication#password_edit', as: 'password_edit'
15
+ # aggiornamento password
16
+ post 'password_update', to: 'back/authentication#password_update', as: 'password_update'
17
+ # Users
18
+ resources :superusers, module: 'back'
19
+
20
+ end
@@ -0,0 +1,15 @@
1
+ class CreateLatoCoreSuperusers < ActiveRecord::Migration
2
+ def change
3
+
4
+ create_table :lato_core_superusers do |t|
5
+ t.string :name
6
+ t.string :username
7
+ t.string :email
8
+ t.integer :permission
9
+ t.string :session_code
10
+ t.string :password_digest
11
+
12
+ t.timestamps null: false
13
+ end
14
+ end
15
+ end
data/lib/lato_core.rb ADDED
@@ -0,0 +1,11 @@
1
+ # Lato Core e' una gemma che si occupa di generare un pannello di amministrazione
2
+ # con gestione delle utenze da utilizzare nello sviluppo di cms e gestionali.
3
+ # Lato Core e' stato sviluppato per supportare l'integrazione con altri moduli
4
+ # e necessita della gemma 'lato_view' per funzionare in modo corretto.
5
+ module LatoCore
6
+
7
+ # Includo interface e engine
8
+ require "lato_core/engine"
9
+ require "lato_core/interface"
10
+
11
+ end
@@ -0,0 +1,26 @@
1
+ module LatoCore
2
+ # Classe che gestisce l'inizializzazione del modulo.
3
+ # Principalmente si occupa di rendere obbligatorie le migrazioni nell'app
4
+ # principale e di inserire nel Rails.application.routes le routes del modulo.
5
+ class Engine < ::Rails::Engine
6
+ isolate_namespace LatoCore
7
+
8
+ # Aggiunta del supporto alle migrazioni
9
+ initializer 'Add migration support' do |app|
10
+ unless app.root.to_s.match root.to_s
11
+ config.paths['db/migrate'].expanded.each do |expanded_path|
12
+ app.config.paths['db/migrate'] << expanded_path
13
+ end
14
+ end
15
+ end
16
+
17
+ # Aggiunta del supporto ai routes
18
+ initializer 'Add gem routes to application',
19
+ before: :load_config_initializers do
20
+ Rails.application.routes.append do
21
+ # modificare '/lato/starter' con l'url di base dei routes del modulo
22
+ mount LatoCore::Engine, at: '/lato/core'
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,29 @@
1
+ module LatoCore
2
+ # L'interfaccia contiene un insieme di funzioni utilizzabili in maniera
3
+ # universale dall'applicazione principale o da alti moduli
4
+ module Interface
5
+
6
+ # Azioni principali per la gestione della cache
7
+ require 'lato_core/interface/cache'
8
+ include LatoCore::Interface::Cache
9
+ # Azioni principali per la gestione delle comunicazioni
10
+ require 'lato_core/interface/communication'
11
+ include LatoCore::Interface::Communication
12
+ # Azioni principali per la gestione delle sessioni
13
+ require 'lato_core/interface/session'
14
+ include LatoCore::Interface::Session
15
+ # Azioni principali per la gestione della navigazione
16
+ require 'lato_core/interface/navigation'
17
+ include LatoCore::Interface::Navigation
18
+ # Azioni principali per il controllo dell'autenticazione
19
+ require 'lato_core/interface/authentication'
20
+ include LatoCore::Interface::Authentication
21
+ # Azioni principali per la gestione delle lingue
22
+ require 'lato_core/interface/languages'
23
+ include LatoCore::Interface::Languages
24
+ # Azioni principali per la gestione delle impostazioni superusers
25
+ require 'lato_core/interface/superusers'
26
+ include LatoCore::Interface::Superusers
27
+
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ module LatoCore
2
+ module Interface
3
+ # Insieme di funzioni che permettono di gestire l'autenticazione degli
4
+ # utenti che vogliono accedere al backoffice
5
+ module Authentication
6
+
7
+ # Funzione che controlla se l'utente ha i permessi di accedere al
8
+ # backoffice. Se l'utente non ha i permessi viene rimandato alla pagina di login.
9
+ def core_controlUser
10
+ redirect_to lato_core.login_path unless core_controlSession
11
+ end
12
+
13
+ # Funzione che ritorna l'oggetto utente loggato.
14
+ # * *Returns* :
15
+ # - user_id se la sessione dell'utente risulta valida
16
+ # - false se la sessione non esiste o non e' valida
17
+ def core_getCurrentUser
18
+ user = LatoCore::Superuser.find(session[:user])
19
+ return user if session[:user] && session[:session_code] && user
20
+ end
21
+
22
+ # Funzione che controlla se i permessi dell'utente sono superiori al
23
+ # livello ricevuto come parametro
24
+ # * *Returns* :
25
+ # - true se la sessione dell'utente ha permessi maggiori o uguali del parametro ricevuto
26
+ # - false se la sessione non esiste o non ha i permessi necessari
27
+ def core_controlPermission(permission)
28
+ user = core_getCurrentUser
29
+ user && user.permission >= permission
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,29 @@
1
+ module LatoCore
2
+ module Interface
3
+ # Insieme di funzioni che gestiscono la cache dei moduli sulla
4
+ # applicazione principale.
5
+ module Cache
6
+
7
+ # Funzione che ritorna il percorso alla directory di cache usata dai
8
+ # moduli lato per memorizzare informazioni sull'applicazione principale.
9
+ # La directory dell'app principale usata come cache si trova nel percorso
10
+ # #{Rails.root}/config/lato
11
+ def core_getCacheDirectory
12
+ # creo le directory per gli assets se non esistono
13
+ dirname = "#{Rails.root}/app/assets/images/lato"
14
+ FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
15
+ dirname = "#{Rails.root}/app/assets/stylesheets/lato"
16
+ FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
17
+ dirname = "#{Rails.root}/app/assets/javascripts/lato"
18
+ FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
19
+ # creo la directory di cache se non esiste
20
+ dirname = "#{Rails.root}/config/lato"
21
+ FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
22
+ # ritorno la directory di cache
23
+ return dirname
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,104 @@
1
+ module LatoCore
2
+ module Interface
3
+ # Insieme di funzioni che permettono di ottenere informazioni sulla
4
+ # applicazione principale e sulle altre gemme che lavorano su di essa
5
+ module Communication
6
+
7
+ # Ritorna l'url relativo della directory a cui rimandare dopo
8
+ # aver effettuato il login in lato. Se tale valore non e' settato
9
+ # nel file di configurazione di lato allora ritorna semplicemente false.
10
+ def core_getApplicationLoginRoot
11
+ return CORE_APPLOGINROOT if defined? CORE_APPLOGINROOT
12
+ directory = core_getCacheDirectory
13
+ if File.exist? "#{directory}/config.yml"
14
+ config = YAML.load(
15
+ File.read(File.expand_path("#{directory}/config.yml", __FILE__))
16
+ )
17
+ return config['login_home'] if config && config['login_home']
18
+ else
19
+ return false
20
+ end
21
+ end
22
+
23
+ # Ritorna il nome dell'applicazione principale settato nel file
24
+ # config/lato/config.yml.
25
+ # Se l'applicazione principale non specifica nessun nome allora
26
+ # la funzione ritorna il valore 'Lato'
27
+ def core_getApplicationName
28
+ return CORE_APPNAME if defined? CORE_APPNAME
29
+ directory = core_getCacheDirectory
30
+ if File.exist? "#{directory}/config.yml"
31
+ config = YAML.load(
32
+ File.read(File.expand_path("#{directory}/config.yml", __FILE__))
33
+ )
34
+ if config && config['app_name']
35
+ return config['app_name']
36
+ else
37
+ return 'Lato'
38
+ end
39
+ end
40
+ end
41
+
42
+ # Legge il file di configurazione e verifica se e' stato impostato un root url
43
+ # per l'applicazione. Se non è stato impostato utilizza di default 'localhost'
44
+ def core_getApplicationURL
45
+ return CORE_APPURL if defined? CORE_APPURL
46
+ directory = core_getCacheDirectory
47
+ if File.exist? "#{directory}/config.yml"
48
+ config = YAML.load(
49
+ File.read(File.expand_path("#{directory}/config.yml", __FILE__))
50
+ )
51
+ if config && config['root_url']
52
+ return config['root_url']
53
+ else
54
+ return 'http://localhost:3000'
55
+ end
56
+ end
57
+ end
58
+
59
+ # Legge il file di configurazione e verifica se è stato impostato un indirizzo
60
+ # email di servizio. Se non e' stata impostata allora utilizza quella di
61
+ # default 'service@lato.com'
62
+ def core_getApplicationServiceEmail
63
+ return CORE_APPSERVICEMAIL if defined? CORE_APPSERVICEMAIL
64
+ directory = core_getCacheDirectory
65
+ if File.exist? "#{directory}/config.yml"
66
+ config = YAML.load(
67
+ File.read(File.expand_path("#{directory}/config.yml", __FILE__))
68
+ )
69
+ if config && config['service_email']
70
+ return config['service_email']
71
+ else
72
+ return 'service@lato.com'
73
+ end
74
+ end
75
+ end
76
+
77
+ # Esamina tutte le gemme della applicazione principale e ritorna
78
+ # solamente quelle appartenenti al progetto Lato.
79
+ # * *Returns* :
80
+ # - array di stringhe con i nomi delle gemme del progetto Lato usate dall'applicazione
81
+ def core_getLatoGems
82
+ gems = core_getGems
83
+ lato_gems = []
84
+ # controllo ogni gemma
85
+ gems.each do |name|
86
+ lato_gems.push(name) if name.start_with? 'lato'
87
+ end
88
+ # ritorno il risultato
89
+ lato_gems
90
+ end
91
+
92
+ # Ritorna la lista dei nomi delle gemme utilizzate dalla applicazione
93
+ # principale
94
+ # * *Returns* :
95
+ # - array di stringhe con i nomi delle gemme dell'applicazione
96
+ def core_getGems
97
+ require 'bundler'
98
+ Bundler.load.specs.map { |spec| spec.name }
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+ end
@@ -0,0 +1,60 @@
1
+ module LatoCore
2
+ module Interface
3
+ # Insieme di funzioni che determinano e gestiscono le informazioni riguardo
4
+ # alle lingue dell'applicazione tra le sezioni offerte dai moduli lato
5
+ module Languages
6
+
7
+ # Funzione che ritorna true se l'applicazione ha piu' lingue, false se
8
+ # l'applicazione ha una singola lingua
9
+ def core_applicationHasLanguages
10
+ return (CORE_APPLANGUAGES.length > 1) if defined? CORE_APPLANGUAGES
11
+ languages = core_getApplicationLanguages
12
+ languages.length > 1
13
+ end
14
+
15
+ # Funzione che ritorna un array contenente le lingue gestite
16
+ # dall'applicazione
17
+ def core_getApplicationLanguages
18
+ return CORE_APPLANGUAGES if defined? CORE_APPLANGUAGES
19
+ # definisco variabile di ritorno
20
+ languages = false
21
+ if File.exist? "#{Rails.root}/config/lato/config.yml"
22
+ # accedo al config.yml
23
+ config = YAML.load(
24
+ File.read(File.expand_path("#{Rails.root}/config/lato/config.yml",
25
+ __FILE__))
26
+ )
27
+ if config['languages']
28
+ languages = config['languages'].split(',')
29
+
30
+ languages.each do |language|
31
+ language.downcase.delete(' ')
32
+ end
33
+ end
34
+ end
35
+ # ritorno il risultato
36
+ return languages
37
+ end
38
+
39
+ # Funzione che ritorna la lettura del file di lingua corretto per
40
+ # il modulo il cui nome e' ricevuto come parametro
41
+ def core_loadModuleLanguages(module_name)
42
+ module_root = module_name.camelize.constantize::Engine.root
43
+ application_lang = Rails.application.config.i18n.default_locale
44
+ if File.exist? "#{module_root}/lang/#{application_lang}.yml"
45
+ return YAML.load(
46
+ File.read(File.expand_path("#{module_root}/lang/#{application_lang}.yml",
47
+ __FILE__))
48
+ )
49
+ else
50
+ return YAML.load(
51
+ File.read(File.expand_path("#{module_root}/lang/default.yml",
52
+ __FILE__))
53
+ )
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,109 @@
1
+ module LatoCore
2
+ module Interface
3
+ # Insieme di funzioni che determinano e gestiscono le informazioni
4
+ # riguardo alla navigazione tra le sezioni offerte dai moduli lato
5
+ module Navigation
6
+
7
+ # Ritorna un array contenente le voci che andranno a formare il menu
8
+ # di navigazione del backoffice.
9
+ # * *Returns* :
10
+ # - array di hash contenenti i dati delle voci di menu
11
+ def core_getNavbarItems
12
+ return CORE_NAVIGATION if defined? CORE_NAVIGATION
13
+ getApplicationNavbarItems + getLatoNavbarItems
14
+ end
15
+
16
+ # Ritorna un array contenente le voci delle gemme lato che andranno
17
+ # a formare il menu di navigazione del backoffice.
18
+ # * *Returns* :
19
+ # - array di hash contenenti i dati delle voci di menu
20
+ private def getLatoNavbarItems
21
+ # inizializzo la lista delle voci della navbar
22
+ navbar_items = []
23
+ # identifico la lista di gemme del progetto Lato usate dalla
24
+ # applicazione
25
+ gems = core_getLatoGems
26
+ # per ogni gemma estraggo i dati necessari a riempire la navbar
27
+ gems.each do |name|
28
+ module_name = name.camelize
29
+ module_root = module_name.constantize::Engine.root
30
+
31
+ next unless File.exist? "#{module_root}/config/config.yml"
32
+ # accedo al config.yml
33
+ config = YAML.load(
34
+ File.read(File.expand_path("#{module_root}/config/config.yml",
35
+ __FILE__))
36
+ )
37
+ # estraggo i dati dallo yaml
38
+ data = getConfigNavbarData(config)
39
+ # aggiungo i dati nella risposta
40
+ data.each do |single_voice|
41
+ navbar_items.push(single_voice)
42
+ end
43
+ end
44
+ # ritorno il risultato
45
+ navbar_items
46
+ end
47
+
48
+ # Ritorna un array contenente le voci della applicazione principale
49
+ # che andranno a formare il menu di navigazione del backoffice.
50
+ # * *Returns* :
51
+ # - array di hash contenenti i dati delle voci di menu
52
+ private def getApplicationNavbarItems
53
+ directory = core_getCacheDirectory
54
+ # inizializzo la lista delle voci della navbar
55
+ navbar_items = []
56
+
57
+ if File.exist? "#{directory}/config.yml"
58
+ # accedo al config.yml
59
+ directory = core_getCacheDirectory
60
+ config = YAML.load(
61
+ File.read(File.expand_path("#{directory}/config.yml", __FILE__))
62
+ )
63
+ # estraggo i dati dallo yaml
64
+ data = getConfigNavbarData(config)
65
+ # aggiungo i dati nella risposta
66
+ data.each do |single_voice|
67
+ navbar_items.push(single_voice)
68
+ end
69
+ end
70
+ # ritorno il risultato
71
+ navbar_items
72
+ end
73
+
74
+ # Estrae i dati relativi alla navbar dal file config.yml di una
75
+ # applicazione controllando che la struttura del file sia corretta
76
+ private def getConfigNavbarData(config)
77
+ # inizializzo la lista di dati
78
+ results = []
79
+ # se il file e' formattato correttamente esamino ogni sua voce
80
+ if config and config['menu']
81
+ config['menu'].each do |voice|
82
+ # estraggo i dati
83
+ unique_name = voice[0]
84
+ name = voice[1]['name'].capitalize
85
+ url = voice[1]['url'].downcase
86
+ icon = voice[1]['icon'].downcase
87
+ position = voice[1]['position']
88
+ permission = voice[1]['permission']
89
+ # genero l'oggetto con le informazioni di output
90
+ output_voice = {
91
+ unique_name: unique_name,
92
+ name: name,
93
+ url: url,
94
+ icon: icon,
95
+ position: position,
96
+ permission: permission
97
+ }
98
+ # aggiungo la voce al risultato
99
+ results.push(output_voice)
100
+ end
101
+ end
102
+ # ritorno il risultato
103
+ results
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+ end