anoubis 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +38 -0
- data/app/controllers/anoubis/application_controller.rb +78 -0
- data/app/controllers/anoubis/core/application_controller.rb +343 -0
- data/app/controllers/anoubis/core/data/actions.rb +962 -0
- data/app/controllers/anoubis/core/data/callbacks.rb +68 -0
- data/app/controllers/anoubis/core/data/convert.rb +407 -0
- data/app/controllers/anoubis/core/data/defaults.rb +217 -0
- data/app/controllers/anoubis/core/data/get.rb +531 -0
- data/app/controllers/anoubis/core/data/load.rb +89 -0
- data/app/controllers/anoubis/core/data/set.rb +49 -0
- data/app/controllers/anoubis/core/data/setup.rb +104 -0
- data/app/controllers/anoubis/core/data_controller.rb +28 -0
- data/app/controllers/anoubis/core/index/actions.rb +53 -0
- data/app/controllers/anoubis/core/index/callbacks.rb +23 -0
- data/app/controllers/anoubis/core/index_controller.rb +36 -0
- data/app/controllers/anoubis/etc/base.rb +52 -0
- data/app/controllers/anoubis/etc/data.rb +89 -0
- data/app/controllers/anoubis/etc/field.rb +468 -0
- data/app/controllers/anoubis/etc/field_options.rb +83 -0
- data/app/controllers/anoubis/etc/field_order.rb +51 -0
- data/app/controllers/anoubis/etc/filter.rb +251 -0
- data/app/controllers/anoubis/etc/menu.rb +101 -0
- data/app/controllers/anoubis/etc/model.rb +67 -0
- data/app/controllers/anoubis/etc/tab_item.rb +91 -0
- data/app/controllers/anoubis/etc.rb +8 -0
- data/app/controllers/anoubis/export.rb +47 -0
- data/app/controllers/anoubis/output/autocomplete.rb +30 -0
- data/app/controllers/anoubis/output/basic.rb +86 -0
- data/app/controllers/anoubis/output/data.rb +101 -0
- data/app/controllers/anoubis/output/delete.rb +41 -0
- data/app/controllers/anoubis/output/edit.rb +55 -0
- data/app/controllers/anoubis/output/frame.rb +227 -0
- data/app/controllers/anoubis/output/login.rb +71 -0
- data/app/controllers/anoubis/output/menu.rb +220 -0
- data/app/controllers/anoubis/output/update.rb +43 -0
- data/app/controllers/anoubis/sso/client/application_controller.rb +139 -0
- data/app/controllers/anoubis/sso/client/data/actions.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/callbacks.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/convert.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/defaults.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/get.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/load.rb +26 -0
- data/app/controllers/anoubis/sso/client/data/set.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/setup.rb +5 -0
- data/app/controllers/anoubis/sso/client/data_controller.rb +21 -0
- data/app/controllers/anoubis/sso/client/index/actions.rb +79 -0
- data/app/controllers/anoubis/sso/client/index/callbacks.rb +13 -0
- data/app/controllers/anoubis/sso/client/index_controller.rb +18 -0
- data/app/controllers/anoubis/sso/server/application_controller.rb +49 -0
- data/app/controllers/anoubis/sso/server/login_controller.rb +342 -0
- data/app/controllers/anoubis/sso/server/user_controller.rb +142 -0
- data/app/controllers/anoubis/tenant/application_controller.rb +54 -0
- data/app/controllers/anoubis/tenant/data/actions.rb +11 -0
- data/app/controllers/anoubis/tenant/data/callbacks.rb +11 -0
- data/app/controllers/anoubis/tenant/data/convert.rb +11 -0
- data/app/controllers/anoubis/tenant/data/defaults.rb +11 -0
- data/app/controllers/anoubis/tenant/data/get.rb +11 -0
- data/app/controllers/anoubis/tenant/data/load.rb +52 -0
- data/app/controllers/anoubis/tenant/data/set.rb +11 -0
- data/app/controllers/anoubis/tenant/data/setup.rb +11 -0
- data/app/controllers/anoubis/tenant/data_controller.rb +28 -0
- data/app/controllers/anoubis/tenant/index/actions.rb +191 -0
- data/app/controllers/anoubis/tenant/index/callbacks.rb +11 -0
- data/app/controllers/anoubis/tenant/index_controller.rb +38 -0
- data/app/controllers/anoubis/tenants_controller.rb +7 -0
- data/app/controllers/anoubis/users_controller.rb +7 -0
- data/app/jobs/anoubis/application_job.rb +6 -0
- data/app/mailers/anoubis/application_mailer.rb +8 -0
- data/app/models/anoubis/application_record.rb +45 -0
- data/app/models/anoubis/core/application_record.rb +250 -0
- data/app/models/anoubis/core/locales.rb +27 -0
- data/app/models/anoubis/sso/client/application_record.rb +3 -0
- data/app/models/anoubis/sso/client/group.rb +19 -0
- data/app/models/anoubis/sso/client/group_menu.rb +109 -0
- data/app/models/anoubis/sso/client/menu.rb +145 -0
- data/app/models/anoubis/sso/client/user.rb +81 -0
- data/app/models/anoubis/sso/client/user_group.rb +32 -0
- data/app/models/anoubis/sso/server/system.rb +36 -0
- data/app/models/anoubis/sso/server/user.rb +79 -0
- data/app/models/anoubis/tenant/application_record.rb +41 -0
- data/app/models/anoubis/tenant/group.rb +95 -0
- data/app/models/anoubis/tenant/group_locale.rb +19 -0
- data/app/models/anoubis/tenant/group_menu.rb +84 -0
- data/app/models/anoubis/tenant/menu.rb +156 -0
- data/app/models/anoubis/tenant/menu_locale.rb +27 -0
- data/app/models/anoubis/tenant/system.rb +127 -0
- data/app/models/anoubis/tenant/system_locale.rb +19 -0
- data/app/models/anoubis/tenant/system_menu.rb +51 -0
- data/app/models/anoubis/tenant/tenant.rb +107 -0
- data/app/models/anoubis/tenant/tenant_system.rb +19 -0
- data/app/models/anoubis/tenant/user.rb +225 -0
- data/app/models/anoubis/tenant/user_group.rb +32 -0
- data/app/services/anoubis/core_service.rb +16 -0
- data/app/services/anoubis/session_service.rb +17 -0
- data/app/validators/presence_in_tenant_validator.rb +20 -0
- data/config/initializers/mime_type.rb +1 -0
- data/config/locales/en.yml +120 -0
- data/config/locales/ru.yml +245 -0
- data/config/routes.rb +74 -0
- data/db/migrate/20181018085843_create_tenants.rb +13 -0
- data/db/migrate/20181018111217_create_systems.rb +10 -0
- data/db/migrate/20181018111713_create_tenant_systems.rb +11 -0
- data/db/migrate/20181018111925_create_groups.rb +13 -0
- data/db/migrate/20181018112151_create_users.rb +25 -0
- data/db/migrate/20181018115737_add_title_to_users.rb +10 -0
- data/db/migrate/20181022060211_create_menus.rb +18 -0
- data/db/migrate/20181115055245_create_group_menus.rb +12 -0
- data/db/migrate/20181115060830_create_system_menus.rb +11 -0
- data/db/migrate/20181122062131_create_user_groups.rb +11 -0
- data/db/migrate/20181221060727_create_menu_locales.rb +14 -0
- data/db/migrate/20181225062303_create_system_locales.rb +11 -0
- data/db/migrate/20181225062339_create_group_locales.rb +11 -0
- data/db/seeds.rb +268 -0
- data/lib/anoubis/engine.rb +13 -0
- data/lib/anoubis/version.rb +5 -0
- data/lib/anoubis.rb +213 -0
- data/lib/tasks/anubis_tasks.rake +10 -0
- data/lib/tasks/sessions/clear_sessions.rake +10 -0
- data/spec/anubis_spec.rb +5 -0
- data/spec/controllers/anoubis/index_controller_spec.rb +77 -0
- data/spec/dummy/Rakefile +3 -0
- data/spec/dummy/app/assets/config/manifest.js +2 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/jobs/application_job.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +33 -0
- data/spec/dummy/bin/update +28 -0
- data/spec/dummy/config/application.rb +14 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/database.yml +54 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +54 -0
- data/spec/dummy/config/environments/production.rb +85 -0
- data/spec/dummy/config/environments/test.rb +46 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cors.rb +16 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +34 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/config/storage.yml +34 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/db/schema.rb +167 -0
- data/spec/dummy/db/seeds.rb +1 -0
- data/spec/factories/anubis_group_locales.rb +7 -0
- data/spec/factories/anubis_group_menus.rb +7 -0
- data/spec/factories/anubis_groups.rb +6 -0
- data/spec/factories/anubis_menu_locales.rb +9 -0
- data/spec/factories/anubis_menus.rb +6 -0
- data/spec/factories/anubis_system_locales.rb +7 -0
- data/spec/factories/anubis_system_menus.rb +6 -0
- data/spec/factories/anubis_systems.rb +5 -0
- data/spec/factories/anubis_tenants.rb +7 -0
- data/spec/factories/anubis_users.rb +10 -0
- data/spec/integration/navigation_test.rb +7 -0
- data/spec/models/anoubis/group_locale_spec.rb +25 -0
- data/spec/models/anoubis/group_menu_spec.rb +50 -0
- data/spec/models/anoubis/group_spec.rb +52 -0
- data/spec/models/anoubis/menu_locale_spec.rb +31 -0
- data/spec/models/anoubis/menu_spec.rb +48 -0
- data/spec/models/anoubis/system_locale_spec.rb +20 -0
- data/spec/models/anoubis/system_menu_spec.rb +49 -0
- data/spec/models/anoubis/system_spec.rb +53 -0
- data/spec/models/anoubis/tenant_spec.rb +67 -0
- data/spec/models/anoubis/user_spec.rb +57 -0
- data/spec/rails_helper.rb +32 -0
- data/spec/requests/anoubis/users_request_spec.rb +5 -0
- data/spec/spec_helper.rb +13 -0
- metadata +408 -0
data/config/routes.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
Anoubis::Engine.routes.draw do
|
2
|
+
Rails.application.routes.draw do
|
3
|
+
begin
|
4
|
+
lib_type = Rails.configuration.anubis_type
|
5
|
+
rescue
|
6
|
+
lib_type = 'tenant'
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
if lib_type == 'tenant'
|
11
|
+
match 'api/:version/*path', { controller: 'anubis/tenant/index', action: 'options', constraints: { method: 'OPTIONS' }, via: [:options] }
|
12
|
+
|
13
|
+
post 'api/:version/login', to: 'anubis/tenant/index#login', :defaults => { :format => 'json' }
|
14
|
+
post 'api/:version/validate', to: 'anubis/tenant/index#validate', :defaults => { :format => 'json' }
|
15
|
+
post 'api/:version/recover', to: 'anubis/tenant/index#recover', :defaults => { :format => 'json' }
|
16
|
+
post 'api/:version/logout', to: 'anubis/tenant/index#logout', :defaults => { :format => 'json' }
|
17
|
+
get 'api/:version/menu', to: 'anubis/tenant/index#menu', :defaults => { :format => 'json' }
|
18
|
+
|
19
|
+
scope path: 'api', :defaults => { :format => 'json' } do
|
20
|
+
scope path: ':version' do
|
21
|
+
namespace :anubis do
|
22
|
+
get 'users', to: 'structure#index', as: 'structure_list'
|
23
|
+
get 'users/frame', to: 'structure#frame', as: 'structure_frame'
|
24
|
+
|
25
|
+
resources :tenants do
|
26
|
+
collection do
|
27
|
+
get :frame
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
if lib_type == 'sso-server'
|
36
|
+
scope path: 'api', defaults: { format: 'json' } do
|
37
|
+
scope path: ':version' do
|
38
|
+
match '*path', { controller: 'anubis/sso/server/login', action: 'options', constraints: { method: 'OPTIONS' }, via: [:options] }
|
39
|
+
|
40
|
+
get 'login', to: 'anubis/sso/server/login#index'
|
41
|
+
post 'login', to: 'anubis/sso/server/login#create'
|
42
|
+
get 'login/:session', to: 'anubis/sso/server/login#show'
|
43
|
+
put 'login/:session', to: 'anubis/sso/server/login#update'
|
44
|
+
delete 'login/:session', to: 'anubis/sso/server/login#destroy'
|
45
|
+
|
46
|
+
get 'user/current', to: 'anubis/sso/server/user#show_current'
|
47
|
+
get 'user/:uuid', to: 'anubis/sso/server/user#show'
|
48
|
+
put 'user/current', to: 'anubis/sso/server/user#update_current'
|
49
|
+
put 'user/:uuid', to: 'anubis/sso/server/user#update'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
if lib_type == 'sso-client'
|
55
|
+
scope path: 'api', defaults: { format: 'json' } do
|
56
|
+
scope path: ':version' do
|
57
|
+
match '*path', { controller: 'anubis/sso/server/login', action: 'options', constraints: { method: 'OPTIONS' }, via: [:options] }
|
58
|
+
|
59
|
+
get 'menu', to: 'anubis/sso/client/index#menu'
|
60
|
+
post 'logout', to: 'anubis/sso/client/index#logout'
|
61
|
+
#get 'login', to: 'anubis/sso/server/login#index'
|
62
|
+
#post 'login', to: 'anubis/sso/server/login#create'
|
63
|
+
#put 'login/:session', to: 'anubis/sso/server/login#update'
|
64
|
+
#delete 'login/:session', to: 'anubis/sso/server/login#destroy'
|
65
|
+
|
66
|
+
#get 'user/current', to: 'anubis/sso/server/user#show_current'
|
67
|
+
#get 'user/:uuid', to: 'anubis/sso/server/user#show'
|
68
|
+
#put 'user/current', to: 'anubis/sso/server/user#update_current'
|
69
|
+
#put 'user/:uuid', to: 'anubis/sso/server/user#update'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateTenants < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :tenants do |t|
|
4
|
+
t.string :title, limit: 100
|
5
|
+
t.string :ident, limit: 10
|
6
|
+
t.integer :state, default: 0
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :tenants, [:title], unique: true
|
11
|
+
add_index :tenants, [:ident], unique: true
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateTenantSystems < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :tenant_systems do |t|
|
4
|
+
t.references :tenant, foreign_key: true
|
5
|
+
t.references :system, foreign_key: true
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :tenant_systems, [:tenant_id, :system_id], unique: true
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateGroups < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :groups do |t|
|
4
|
+
t.string :ident, limit: 50
|
5
|
+
t.references :system, foreign_key: true, index: true
|
6
|
+
t.string :full_ident, limit: 70
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :groups, [:ident, :system_id], unique: true
|
11
|
+
add_index :groups, [:full_ident], unique: true
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class CreateUsers < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :users do |t|
|
4
|
+
t.string :login, limit: 65, null: false
|
5
|
+
t.string :email, limit: 50, null: false
|
6
|
+
t.string :name, limit: 100, null: false
|
7
|
+
t.string :surname, limit: 100, null: false
|
8
|
+
t.string :timezone, limit: 30, null: false
|
9
|
+
t.string :locale, limit: 10, null: false, default: 'ru-RU'
|
10
|
+
t.integer :timeout, null: false, default: 3600
|
11
|
+
t.string :phone, limit: 30
|
12
|
+
t.string :password_digest, limit: 60, null: false
|
13
|
+
t.string :auth_key, limit: 32
|
14
|
+
t.string :recover_key, limit: 32
|
15
|
+
t.integer :status, null: false, default: 0
|
16
|
+
t.references :tenant, index: true, foreign_key: true
|
17
|
+
t.binary :uuid_bin, limit: 16
|
18
|
+
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
add_index :users, [:login], unique: true
|
22
|
+
add_index :users, [:email, :tenant_id], unique: true
|
23
|
+
add_index :users, [:uuid_bin], unique: true
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class AddTitleToUsers < ActiveRecord::Migration[6.0]
|
2
|
+
def up
|
3
|
+
execute "ALTER TABLE users ADD title VARCHAR(250) AS (CONCAT(name, ' ', surname, ' (', email, ')'));"
|
4
|
+
execute "ALTER TABLE users ADD fi VARCHAR(250) AS (CONCAT(name, ' ', surname));"
|
5
|
+
end
|
6
|
+
def down
|
7
|
+
execute "ALTER TABLE users DROP fi;"
|
8
|
+
execute "ALTER TABLE users DROP title;"
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateMenus < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :menus do |t|
|
4
|
+
t.string :mode, limit: 200
|
5
|
+
t.string :action, limit: 50
|
6
|
+
t.references :menu, index: true, foreign_key: true
|
7
|
+
t.integer :tab, null: false, default: 0
|
8
|
+
t.integer :position, null: false, default: 0
|
9
|
+
t.integer :page_size, null: false, default: 0
|
10
|
+
t.integer :state, null: false, default: 0
|
11
|
+
t.integer :status, null: false, default: 0
|
12
|
+
|
13
|
+
t.timestamps
|
14
|
+
end
|
15
|
+
add_index :menus, [:mode], unique: true
|
16
|
+
add_index :menus, :tab
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateGroupMenus < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :group_menus do |t|
|
4
|
+
t.references :menu, index: true, foreign_key: true, default: 0
|
5
|
+
t.references :group, index: true, foreign_key: true, default: 0
|
6
|
+
t.integer :access
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :group_menus, [:menu_id, :group_id], unique: true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateSystemMenus < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :system_menus do |t|
|
4
|
+
t.references :system, foreign_key: true
|
5
|
+
t.references :menu, foreign_key: true
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :system_menus, [:system_id, :menu_id], unique: true
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateUserGroups < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :user_groups do |t|
|
4
|
+
t.references :user, foreign_key: true
|
5
|
+
t.references :group, foreign_key: true
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :user_groups, [:user_id, :group_id], unique: true
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateMenuLocales < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :menu_locales do |t|
|
4
|
+
t.references :menu, foreign_key: true
|
5
|
+
t.integer :locale, null: false, default: 0
|
6
|
+
t.string :title, limit: 200
|
7
|
+
t.string :page_title, limit: 200
|
8
|
+
t.string :short_title, limit: 200
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
add_index :menu_locales, [:menu_id, :locale], unique: true
|
13
|
+
end
|
14
|
+
end
|
data/db/seeds.rb
ADDED
@@ -0,0 +1,268 @@
|
|
1
|
+
##
|
2
|
+
# Additional procedures
|
3
|
+
|
4
|
+
def create_tenant(params = {})
|
5
|
+
return nil if !params.has_key? :ident
|
6
|
+
return nil if !params.has_key? :title
|
7
|
+
|
8
|
+
tenant = Anubis::Tenant::Tenant.find_or_create_by ident: params[:ident]
|
9
|
+
tenant.title = params[:title]
|
10
|
+
if params.has_key? :default
|
11
|
+
if params[:default]
|
12
|
+
tenant.state = Anubis::Tenant::Tenant.states[:default]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
tenant.save
|
16
|
+
|
17
|
+
Anubis::Tenant::TenantSystem.find_or_create_by tenant: tenant, system_id: 1
|
18
|
+
|
19
|
+
return tenant
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Create multi languages menu element
|
24
|
+
def create_menu(params = {})
|
25
|
+
return nil if !params.key? :mode
|
26
|
+
return nil if !params.key? :action
|
27
|
+
|
28
|
+
params[:access] = 'read' if !params.key? :access
|
29
|
+
params[:state] = 'visible' if !params.key? :state
|
30
|
+
|
31
|
+
prefix = 'install.menu.'+params[:mode].to_s
|
32
|
+
|
33
|
+
if get_anubis_type == 'tenant'
|
34
|
+
data = Anubis::Tenant::Menu.find_or_create_by(mode: params[:mode]) do |menu|
|
35
|
+
menu.action = params[:action]
|
36
|
+
menu.menu = params[:parent] if params.key? :parent
|
37
|
+
menu.page_size = params[:page_size] if params.key? :page_size
|
38
|
+
menu.state = params[:state]
|
39
|
+
end
|
40
|
+
|
41
|
+
I18n.available_locales.each do |locale|
|
42
|
+
I18n.locale = locale
|
43
|
+
Anubis::Tenant::MenuLocale.find_or_create_by(menu_id: data.id, locale: Anubis::Tenant::MenuLocale.locales[locale.to_s.to_sym]) do |menu_locale|
|
44
|
+
menu_locale.title = I18n.t(prefix+'.title')
|
45
|
+
menu_locale.page_title = I18n.t(prefix+'.page_title')
|
46
|
+
menu_locale.short_title = I18n.t(prefix+'.short_title', default: [(prefix+'.title').to_sym])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
if params.has_key?(:group) && params.has_key?(:system)
|
51
|
+
if params[:system].is_a? Array
|
52
|
+
params[:system].each do |system|
|
53
|
+
Anubis::Tenant::SystemMenu.find_or_create_by system: system, menu: data
|
54
|
+
end
|
55
|
+
else
|
56
|
+
Anubis::Tenant::SystemMenu.find_or_create_by system: params[:system], menu: data
|
57
|
+
end
|
58
|
+
|
59
|
+
if params[:group].is_a? Array
|
60
|
+
params[:group].each do |group|
|
61
|
+
add_access_menu group: group, menu: data, access: params[:access]
|
62
|
+
end
|
63
|
+
else
|
64
|
+
add_access_menu group: params[:group], menu: data, access: params[:access]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
if get_anubis_type == 'sso-client'
|
70
|
+
data = Anubis::Sso::Client::Menu.find_or_create_by(mode: params[:mode])
|
71
|
+
|
72
|
+
#puts data.to_json
|
73
|
+
|
74
|
+
if data
|
75
|
+
data.action = params[:action]
|
76
|
+
if params.key? :parent
|
77
|
+
data.menu = params[:parent]
|
78
|
+
else
|
79
|
+
data.menu_id = nil
|
80
|
+
end
|
81
|
+
if params.key? :page_size
|
82
|
+
data.page_size = params[:page_size]
|
83
|
+
else
|
84
|
+
data.page_size = 0
|
85
|
+
end
|
86
|
+
data.state = params[:state]
|
87
|
+
|
88
|
+
I18n.available_locales.each do |locale|
|
89
|
+
I18n.locale = locale
|
90
|
+
data.title = I18n.t(prefix + '.title')
|
91
|
+
data.page_title = I18n.t(prefix + '.page_title')
|
92
|
+
data.short_title = I18n.t(prefix + '.short_title', default: [(prefix + '.title').to_sym])
|
93
|
+
end
|
94
|
+
|
95
|
+
data.save
|
96
|
+
puts data.errors.full_messages
|
97
|
+
|
98
|
+
|
99
|
+
if params.has_key?(:group)
|
100
|
+
if params[:group].is_a? Array
|
101
|
+
params[:group].each do |group|
|
102
|
+
add_access_menu group: group, menu: data, access: params[:access]
|
103
|
+
end
|
104
|
+
else
|
105
|
+
add_access_menu group: params[:group], menu: data, access: params[:access]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
return data
|
112
|
+
end
|
113
|
+
|
114
|
+
##
|
115
|
+
# Create multi languages system
|
116
|
+
def create_system(params = {})
|
117
|
+
return nil if !params.has_key? :ident
|
118
|
+
return nil if !params.has_key? :translate
|
119
|
+
|
120
|
+
system = Anubis::Tenant::System.find_or_create_by ident: params[:ident]
|
121
|
+
if system
|
122
|
+
I18n.available_locales.each do |locale|
|
123
|
+
I18n.locale = locale
|
124
|
+
Anubis::Tenant::SystemLocale.find_or_create_by(system: system, locale: Anubis::Tenant::SystemLocale.locales[locale.to_s.to_sym]) do |system_locale|
|
125
|
+
system_locale.title = I18n.t(params[:translate])
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
if params.has_key? :tenant
|
131
|
+
if params[:tenant].is_a? Array
|
132
|
+
params[:tenant].each do |tenant|
|
133
|
+
Anubis::Tenant::TenantSystem.find_or_create_by tenant: tenant, system: system
|
134
|
+
end
|
135
|
+
else
|
136
|
+
Anubis::Tenant::TenantSystem.find_or_create_by tenant: params[:tenant], system: system
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
return system
|
141
|
+
end
|
142
|
+
|
143
|
+
##
|
144
|
+
# Create multi languages group
|
145
|
+
def create_group(params = {})
|
146
|
+
return nil if !params.has_key? :ident
|
147
|
+
return nil if !params.has_key? :translate
|
148
|
+
|
149
|
+
if get_anubis_type == 'tenant'
|
150
|
+
return nil if !params.has_key? :system
|
151
|
+
|
152
|
+
group = Anubis::Tenant::Group.find_or_create_by ident: params[:ident], system: params[:system]
|
153
|
+
if group
|
154
|
+
I18n.available_locales.each do |locale|
|
155
|
+
I18n.locale = locale
|
156
|
+
Anubis::Tenant::GroupLocale.find_or_create_by(group: group, locale: Anubis::Tenant::GroupLocale.locales[locale.to_s.to_sym]) do |group_locale|
|
157
|
+
group_locale.title = I18n.t(params[:translate])
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
if params.has_key? :user
|
163
|
+
if params[:user].is_a? Array
|
164
|
+
params[:user].each do |user|
|
165
|
+
Anubis::Tenant::UserGroup.find_or_create_by group: group, user: user
|
166
|
+
end
|
167
|
+
else
|
168
|
+
Anubis::Tenant::UserGroup.find_or_create_by group: group, user: params[:user]
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
if get_anubis_type == 'sso-client'
|
174
|
+
group = Anubis::Sso::Client::Group.find_or_create_by ident: params[:ident]
|
175
|
+
|
176
|
+
if group
|
177
|
+
I18n.available_locales.each do |locale|
|
178
|
+
I18n.locale = locale
|
179
|
+
group.title = I18n.t(params[:translate])
|
180
|
+
end
|
181
|
+
group.save
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
return group
|
186
|
+
end
|
187
|
+
|
188
|
+
def add_access_menu(params = {})
|
189
|
+
return if !params.has_key? :group
|
190
|
+
return if !params.has_key? :menu
|
191
|
+
|
192
|
+
params[:access] = 'read' if !params.has_key? :access
|
193
|
+
|
194
|
+
if %w[tenant sso-client].include? get_anubis_type
|
195
|
+
group_menu_model = Anubis::Tenant::GroupMenu if get_anubis_type == 'tenant'
|
196
|
+
group_menu_model = Anubis::Sso::Client::GroupMenu if get_anubis_type == 'sso-client'
|
197
|
+
|
198
|
+
if params[:group].class == Array
|
199
|
+
params[:group].each do |group|
|
200
|
+
data = group_menu_model.find_or_create_by group: group, menu: params[:menu]
|
201
|
+
if group_menu_model.accesses[params[:access].to_sym] > group_menu_model.accesses[data.access.to_sym]
|
202
|
+
data.access = params[:access]
|
203
|
+
data.save
|
204
|
+
end
|
205
|
+
end
|
206
|
+
else
|
207
|
+
data = group_menu_model.find_or_create_by group: params[:group], menu: params[:menu]
|
208
|
+
if group_menu_model.accesses[params[:access].to_sym] > group_menu_model.accesses[data.access.to_sym]
|
209
|
+
data.access = params[:access]
|
210
|
+
data.save
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def get_anubis_type
|
217
|
+
begin
|
218
|
+
type = Rails.configuration.anubis_type
|
219
|
+
rescue
|
220
|
+
type = 'tenant'
|
221
|
+
end
|
222
|
+
|
223
|
+
type
|
224
|
+
end
|
225
|
+
|
226
|
+
|
227
|
+
if get_anubis_type == 'tenant'
|
228
|
+
##
|
229
|
+
# Create default system with id 1
|
230
|
+
system = Anubis::Tenant::System.find_by_id(1)
|
231
|
+
if !system
|
232
|
+
system = Anubis::Tenant::System.create(id: 1)
|
233
|
+
end
|
234
|
+
I18n.available_locales.each do |locale|
|
235
|
+
I18n.locale = locale
|
236
|
+
Anubis::Tenant::SystemLocale.find_or_create_by(system_id: system.id, locale: Anubis::Tenant::SystemLocale.locales[locale.to_s.to_sym]) do |system_locale|
|
237
|
+
system_locale.title = I18n.t('anubis.install.system_title')
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
##
|
242
|
+
# Create default tenant with id 1
|
243
|
+
tenant = Anubis::Tenant::Tenant.find_by_id(1)
|
244
|
+
tenant = Anubis::Tenant::Tenant.create(id: 1, title: I18n.t('anubis.install.tenant_title'), state: Anubis::Tenant::Tenant.states[:default]) if !tenant
|
245
|
+
|
246
|
+
Anubis::Tenant::TenantSystem.find_or_create_by tenant: tenant, system: system
|
247
|
+
|
248
|
+
##
|
249
|
+
# Load Administrator group of Main System
|
250
|
+
admin_group = Anubis::Tenant::Group.where(system: system, ident: 'admin').first
|
251
|
+
I18n.available_locales.each do |locale|
|
252
|
+
I18n.locale = locale
|
253
|
+
Anubis::Tenant::GroupLocale.find_or_create_by(group_id: admin_group.id, locale: Anubis::Tenant::GroupLocale.locales[locale.to_s.to_sym]) do |group_locale|
|
254
|
+
group_locale.title = I18n.t('anubis.install.admins_group')
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
##
|
259
|
+
# Create main administrator with id 1
|
260
|
+
admin_user = Anubis::Tenant::User.find_by_id(1)
|
261
|
+
admin_user = Anubis::Tenant::User.create(id: 1, email: 'admin@local.local', name: I18n.t('anubis.install.admin_name'), surname: I18n.t('anubis.install.admin_surname'), timezone: 'GMT', status: 0, tenant: tenant) if !admin_user
|
262
|
+
|
263
|
+
Anubis::Tenant::UserGroup.find_or_create_by(user_id: admin_user.id, group_id: admin_group.id)
|
264
|
+
|
265
|
+
menu_0 = create_menu({ mode: 'anubis/admin', action: 'menu' })
|
266
|
+
menu_1 = create_menu({ mode: 'anubis/tenants', action: 'data', parent: menu_0, system: system, group: admin_group, access: 'write' })
|
267
|
+
menu_1 = create_menu({ mode: 'anubis/users', action: 'data', parent: menu_0, system: system, group: admin_group, access: 'write' })
|
268
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Anoubis
|
2
|
+
##
|
3
|
+
# Main Anoubis Engine class
|
4
|
+
class Engine < ::Rails::Engine
|
5
|
+
isolate_namespace Anoubis
|
6
|
+
config.generators.api_only = true
|
7
|
+
|
8
|
+
config.generators do |g|
|
9
|
+
g.test_framework :rspec
|
10
|
+
g.fixture_replacement :factory_bot, :dir => 'spec/factories'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|