kaui 0.7.2 → 0.8.0

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -2
  4. data/Gemfile.lock +59 -38
  5. data/README.md +12 -9
  6. data/Rakefile +9 -0
  7. data/{lib/generators/kaui/install/templates/app/assets/javascripts/kaui/all.js → app/assets/javascripts/application.js} +2 -5
  8. data/{lib/generators/kaui/install/templates/app/assets/stylesheets/kaui/all.css → app/assets/stylesheets/application.css} +0 -4
  9. data/app/assets/stylesheets/bootstrap_and_overrides.css +7 -0
  10. data/app/controllers/kaui/admin_allowed_users_controller.rb +48 -0
  11. data/app/controllers/kaui/admin_tenants_controller.rb +97 -0
  12. data/app/controllers/kaui/engine_controller.rb +28 -31
  13. data/app/controllers/kaui/engine_controller_util.rb +33 -0
  14. data/app/controllers/kaui/login_proxy_controller.rb +11 -0
  15. data/app/controllers/kaui/sessions_controller.rb +12 -0
  16. data/app/controllers/kaui/tenants_controller.rb +60 -0
  17. data/app/models/kaui/ability.rb +20 -3
  18. data/app/models/kaui/admin_tenant.rb +10 -0
  19. data/app/models/kaui/allowed_user.rb +8 -0
  20. data/app/models/kaui/allowed_user_tenant.rb +6 -0
  21. data/app/models/kaui/killbill_authenticatable.rb +5 -18
  22. data/app/models/kaui/tenant.rb +13 -0
  23. data/app/models/kaui/user.rb +14 -16
  24. data/app/views/kaui/admin_allowed_users/index.html.erb +23 -0
  25. data/app/views/kaui/admin_allowed_users/new.html.erb +22 -0
  26. data/app/views/kaui/admin_allowed_users/show.html.erb +53 -0
  27. data/app/views/kaui/admin_tenants/index.html.erb +25 -0
  28. data/app/views/kaui/admin_tenants/new.html.erb +32 -0
  29. data/app/views/kaui/admin_tenants/show.html.erb +68 -0
  30. data/app/views/kaui/invoices/show.html.erb +1 -1
  31. data/app/views/kaui/tenants/index.html.erb +17 -0
  32. data/config/initializers/killbill_authenticatable.rb +3 -5
  33. data/config/locales/en.bootstrap.yml +18 -0
  34. data/config/routes.rb +27 -1
  35. data/config/symmetric-encryption.yml +135 -0
  36. data/db/ddl.sql +33 -2
  37. data/db/migrate/20130812155313_devise_create_kaui_users.rb +1 -3
  38. data/db/migrate/20150109214021_create_kaui_tenants.rb +12 -0
  39. data/db/migrate/20150112232813_create_kaui_allowed_users.rb +19 -0
  40. data/kaui.gemspec +5 -3
  41. data/lib/kaui.rb +49 -1
  42. data/lib/kaui/version.rb +1 -1
  43. data/test/dummy/config/application.rb +3 -0
  44. data/test/dummy/config/database.yml +9 -0
  45. data/test/dummy/config/environments/development.rb +2 -2
  46. data/test/dummy/config/initializers/killbill_client.rb +2 -0
  47. data/test/dummy/config/symmetric-encryption.yml +135 -0
  48. data/test/dummy/db/migrate/{20130819152643_devise_create_kaui_users.kaui.rb → 20150116052157_devise_create_kaui_users.kaui.rb} +1 -3
  49. data/test/dummy/db/migrate/20150116052158_create_kaui_tenants.kaui.rb +13 -0
  50. data/test/dummy/db/migrate/20150116052159_create_kaui_allowed_users.kaui.rb +20 -0
  51. data/test/dummy/db/schema.rb +29 -3
  52. data/test/functional/kaui/admin_allowed_users_controller_test.rb +30 -0
  53. data/test/functional/kaui/admin_tenants_controller_test.rb +35 -0
  54. data/test/functional/kaui/functional_test_helper.rb +2 -50
  55. data/test/functional/kaui/functional_test_helper_nosetup.rb +53 -0
  56. data/test/functional/kaui/invoices_controller_test.rb +22 -0
  57. data/test/functional/kaui/tenants_controller_test.rb +60 -0
  58. data/test/integration/kaui/integration_test_helper.rb +2 -0
  59. data/test/integration/kaui/navigation_test.rb +1 -2
  60. data/test/killbill_test_helper.rb +46 -4
  61. data/test/test_helper.rb +1 -0
  62. data/test/unit/helpers/kaui/admin_allowed_users_helper_test.rb +6 -0
  63. data/test/unit/helpers/kaui/admin_tenants_helper_test.rb +6 -0
  64. data/test/unit/helpers/kaui/tenants_helper_test.rb +6 -0
  65. data/test/unit/kaui/allowed_user_test.rb +34 -0
  66. data/test/unit/kaui/tenant_test.rb +19 -0
  67. data/vendor/assets/javascripts/jquery.dataTables.min.js +155 -0
  68. metadata +86 -21
  69. data/app/assets/javascripts/kaui/analytics.js +0 -71
  70. data/app/assets/stylesheets/kaui/analytics.css +0 -30
  71. data/test/dummy/app/assets/javascripts/application.js +0 -21
  72. data/test/dummy/app/assets/stylesheets/application.css +0 -15
  73. data/test/dummy/app/views/layouts/application.html.erb +0 -48
  74. data/vendor/assets/javascripts/js/bootstrap-datepicker.cd46d38.js +0 -1211
  75. data/vendor/assets/javascripts/js/bootstrap.v2.2.1.min.js +0 -6
  76. data/vendor/assets/javascripts/js/jquery.dataTables.v1.9.3.min.js +0 -156
@@ -0,0 +1,19 @@
1
+ class CreateKauiAllowedUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table :kaui_allowed_users do |t|
4
+ t.string :kb_username
5
+ t.string :description
6
+ t.timestamps
7
+ end
8
+
9
+ add_index :kaui_allowed_users, [:kb_username], :unique => true
10
+
11
+ create_table :kaui_allowed_user_tenants do |t|
12
+ t.belongs_to :kaui_allowed_user, :index => true
13
+ t.belongs_to :kaui_tenant, :index => true
14
+ t.timestamps null: false
15
+ end
16
+
17
+ add_index :kaui_allowed_user_tenants, [:kaui_allowed_user_id, :kaui_tenant_id], :unique => true, :name => 'kaui_allowed_user_tenants_uniq'
18
+ end
19
+ end
data/kaui.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'kaui/version'
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'kaui'
7
7
  s.version = Kaui::VERSION
8
- s.summary = 'Killbill Admin UI plugin'
8
+ s.summary = 'Killbill Admin UI mountable engine'
9
9
  s.description = 'Rails UI plugin for Killbill administration.'
10
10
 
11
11
  s.required_ruby_version = '>= 1.8.7'
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.author = 'Killbill core team'
16
16
  s.email = 'killbilling-users@googlegroups.com'
17
- s.homepage = 'http://www.killbilling.org'
17
+ s.homepage = 'http://www.killbill.io'
18
18
 
19
19
  s.files = `git ls-files`.split("\n")
20
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -26,10 +26,12 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency 'jquery-rails', '~> 3.0.4'
27
27
  s.add_dependency 'money-rails', '~> 0.8.1'
28
28
  s.add_dependency 'd3_rails', '~> 3.2.8'
29
- s.add_dependency 'killbill-client', '~> 0.8.1'
29
+ s.add_dependency 'twitter-bootstrap-rails', '~> 2.2.8'
30
+ s.add_dependency 'killbill-client', '~> 0.10.1'
30
31
  s.add_dependency 'devise', '~> 3.0.2'
31
32
  s.add_dependency 'cancan', '~> 1.6.10'
32
33
  s.add_dependency 'carmen-rails', '~> 1.0.0'
34
+ s.add_dependency 'symmetric-encryption', '~> 3.6.0'
33
35
 
34
36
  s.add_development_dependency 'fakeweb', '~> 1.3'
35
37
  s.add_development_dependency 'rake', '>= 0.8.7'
data/lib/kaui.rb CHANGED
@@ -4,21 +4,69 @@
4
4
  require "kaui/engine"
5
5
 
6
6
  module Kaui
7
+
8
+ mattr_accessor :home_path
7
9
  mattr_accessor :account_home_path
8
10
  mattr_accessor :bundle_home_path
9
11
  mattr_accessor :invoice_home_path
12
+ mattr_accessor :tenant_home_path
13
+ mattr_accessor :select_tenant
14
+ mattr_accessor :new_user_session_path
15
+ mattr_accessor :destroy_user_session_path
16
+
10
17
  mattr_accessor :bundle_key_display_string
11
18
  mattr_accessor :creditcard_plugin_name
12
19
  mattr_accessor :layout
13
20
 
21
+ self.home_path = lambda { Kaui::Engine.routes.url_helpers.home_path }
14
22
  self.account_home_path = lambda {|account_id| Kaui::Engine.routes.url_helpers.account_path(account_id) }
15
23
  self.bundle_home_path = lambda {|bundle_id| Kaui::Engine.routes.url_helpers.bundle_path(:id => bundle_id) }
16
24
  self.invoice_home_path = lambda {|invoice_id| Kaui::Engine.routes.url_helpers.invoice_path(:id => invoice_id) }
25
+ self.tenant_home_path = lambda { Kaui::Engine.routes.url_helpers.tenants_path }
26
+ self.select_tenant = lambda { Kaui::Engine.routes.url_helpers.select_tenant_path }
27
+ self.new_user_session_path = lambda { Kaui::Engine.routes.url_helpers.new_user_session_path }
28
+ self.destroy_user_session_path = lambda { Kaui::Engine.routes.url_helpers.destroy_user_session_path }
29
+
17
30
  self.bundle_key_display_string = lambda {|bundle_key| bundle_key }
18
31
  self.creditcard_plugin_name = lambda { '__EXTERNAL_PAYMENT__' }
19
32
 
33
+
34
+ def self.is_user_assigned_valid_tenant?(user, session)
35
+ #
36
+ # If those are set in config initializer then we bypass the check
37
+ # For multi-tenant production deployment, those should not be set!
38
+ #
39
+ return true if KillBillClient.api_key.present? && KillBillClient.api_secret.present?
40
+
41
+ # Not tenant in the session, returns right away...
42
+ return false if session[:kb_tenant_id].nil?
43
+
44
+ # If there is a kb_tenant_id in the session then we check if the user is allowed to access it
45
+ au = Kaui::AllowedUser.find_by_kb_username(user.kb_username)
46
+ return false if au.nil?
47
+
48
+ return au.kaui_tenants.select { |t| t.kb_tenant_id == session[:kb_tenant_id] }.first
49
+ end
50
+
51
+ def self.current_tenant_user_options(user, session)
52
+ kb_tenant_id = session[:kb_tenant_id]
53
+ user_tenant = Kaui::Tenant.find_by_kb_tenant_id(kb_tenant_id) if kb_tenant_id
54
+ result = {
55
+ :username => user.kb_username,
56
+ :password => user.password,
57
+ :session_id => user.kb_session_id,
58
+ }
59
+ if user_tenant
60
+ result[:api_key] = user_tenant.api_key
61
+ result[:api_secret] = user_tenant.api_secret
62
+ end
63
+ result
64
+ end
65
+
66
+
67
+
68
+
20
69
  def self.config(&block)
21
- # TODO
22
70
  {
23
71
  :layout => layout || 'kaui/layouts/kaui_application',
24
72
  }
data/lib/kaui/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kaui
2
- VERSION = '0.7.2'
2
+ VERSION = '0.8.0'
3
3
  end
@@ -4,7 +4,10 @@ require 'rails/all'
4
4
 
5
5
  Bundler.require
6
6
  require "kaui"
7
+
7
8
  require "jquery-rails"
9
+ require "twitter-bootstrap-rails"
10
+ require "d3_rails"
8
11
 
9
12
  module Dummy
10
13
  class Application < Rails::Application
@@ -1,6 +1,15 @@
1
1
  # Warning: The database defined as "test" will be erased and
2
2
  # re-generated from your development database when you run "rake".
3
3
  # Do not set this db to the same as development or production.
4
+ development:
5
+ adapter: mysql2
6
+ encoding: utf8
7
+ database: kaui
8
+ username: root
9
+ password: root
10
+ host: 127.0.0.1
11
+ port: 3306
12
+
4
13
  test:
5
14
  adapter: sqlite3
6
15
  database: db/test.sqlite3
@@ -29,9 +29,9 @@ Dummy::Application.configure do
29
29
  # with SQLite, MySQL, and PostgreSQL)
30
30
  config.active_record.auto_explain_threshold_in_seconds = 0.5
31
31
 
32
- # Do not compress assets
33
32
  config.assets.compress = false
34
33
 
35
34
  # Expands the lines which load the assets
36
- config.assets.debug = true
35
+ config.assets.debug = false
36
+
37
37
  end
@@ -0,0 +1,2 @@
1
+ KillBillClient.url = 'http://127.0.0.1:8080'
2
+
@@ -0,0 +1,135 @@
1
+ #
2
+ # Symmetric Encryption for Ruby
3
+ #
4
+ ---
5
+ # For the development and test environments the test symmetric encryption keys
6
+ # can be placed directly in the source code.
7
+ # And therefore no RSA private key is required
8
+ development: &development_defaults
9
+ key: 1234567890ABCDEF1234567890ABCDEF
10
+ iv: 1234567890ABCDEF
11
+ cipher_name: aes-128-cbc
12
+ encoding: :base64strict
13
+ private_rsa_key: |
14
+ -----BEGIN RSA PRIVATE KEY-----
15
+ MIIEpAIBAAKCAQEAxfbNAn6fc+poM/5mZwpDqO/fD064jcb5HNnCMm0AgXE75nU4
16
+ J2zrDbLj9bmKTHNdhYiwTCPsnZ9Ngtz4VmBRHkmirA6cclMesWXUHlqfHyCvvEYj
17
+ bhVMwOu/t07wPzFH7/f2HQLEX4IlwyNvJyq+AMLHVRCbMMfYCUDIEhUlsGxKQryq
18
+ yk+ga24EMPBLdSf1g1oas9dy7qDtK+91Bh1k7Oo7CrkisRQ70t1Cz+paQSJVZXxv
19
+ MBP6B8eXReB9YLOaIdsKoqEZ6Z0SEFr3xxudiB4ReYB9qqKeTDV0/VLf2m6TmnUr
20
+ ZImLJbi/bAxbcU3h9J4sq5Ma+l1t0gsmO0mlbQIDAQABAoIBAAU5AqWbM5e6Sm98
21
+ ubTkN27AjVD5EbNj2XSiZhYwe//uPddRpl6b6AOfgZYdBAIKVSBNv+DyXa624jOe
22
+ osqcledHqAwEAqqdeMTTW+pFF8eZdClybELeOv0n+xHZ+kqggTZag1q2lPm0FEz2
23
+ pVsSLJsWiG29F2sNCq0L0XtwpWLnHJO0U0dUjVtspDpAnQkl+l8WiTJkY0uf+L8z
24
+ iY6VDtNhf+Cc2TyOnB51nArHQfVt6pSahn8UB7gnjoPBjEPSlSj68XwjNLViFj94
25
+ NeXdrOQ/kjlsJcuX06jfUulHOlFP+uOft3m/q+8OC0uQm4EmcJ9p+m8E6z5ypUDp
26
+ kHi7swECgYEA74mktO2725fON43HpHG/fNglTPqlDUdoqUlDg7ovaDiaL+FlnhOb
27
+ 7vUBfJ5FjWkeO6Teg0ElOA03sOAq29ql91kaweSEbSkRb5HLVGo7m3FTKfi8rTpe
28
+ QufQDjt8kvnAtNSlXQexG3BJpondbMF4hYZSTtGPjkM0MQOqkByUZC0CgYEA05G5
29
+ M/NnZXpXvpZNCHlDht98bHUAZfKLRe7FTAqLBWAEWG70x8aBhzFn6kOD0jhsVcnt
30
+ 3EwiUD1MIuiWYvyGmwBoRCQGVxW2LuxbBYRSpPgTPKPM9juc3GYs36KTSbA3+44y
31
+ 2Fys8/gQusYQ3YwomxU4ygL5lyxxY14sQ3UAzkECgYEAhjRJ8YyYicmdogZvajTI
32
+ oju/ekebnbr6ao4/o1f3I59C07ym4FAAN3tRn+5U7YuNgsE2YbdoEOVm5FRT7uWr
33
+ ws9LbIKJp1cxC59VmjACwW5Wt9dCbpObKEUUjkTJ4NbJHwdctqiOk97vhL0NL9ed
34
+ nMHK75n9oikI3sU9FIzOnukCgYEAz9FpgZ1K6EQ3om9S9crfyMEIICUBoiKQKb5z
35
+ sND+Y+Y//nnnGcFkhF7EezmcZ8eiqtYyPl3OqtC7U+LxrgPtWJ4azSwxyiL6lLb4
36
+ Zb/nykIf60Xe09QUre3zkCzKzuw44XF5gkvuW6tFC6H4+RZu4H8FDHHFp3gxXPEp
37
+ O43Xn8ECgYBzM7yEM0SUE6DI0WGATtuhVRXL3hjgPqf3TzmsQFMEal2Bu14d/d9f
38
+ zLks8POWjtQcgn2PGvrHS+aJZYR0okue4Ny5bfk+AohClXDtqZnz45wabYrRq6Xg
39
+ dTi8xJJHVkoRfcQleui6oqRB3i4iGlu5k8T1+djLLiN9eo0PY1VciQ==
40
+ -----END RSA PRIVATE KEY-----
41
+
42
+ test:
43
+ <<: *development_defaults
44
+
45
+ release:
46
+ # Since the key to encrypt and decrypt with must NOT be stored along with the
47
+ # source code, we only hold a RSA key that is used to unlock the file
48
+ # containing the actual symmetric encryption key
49
+ private_rsa_key: |
50
+ -----BEGIN RSA PRIVATE KEY-----
51
+ MIIEpAIBAAKCAQEAxfbNAn6fc+poM/5mZwpDqO/fD064jcb5HNnCMm0AgXE75nU4
52
+ J2zrDbLj9bmKTHNdhYiwTCPsnZ9Ngtz4VmBRHkmirA6cclMesWXUHlqfHyCvvEYj
53
+ bhVMwOu/t07wPzFH7/f2HQLEX4IlwyNvJyq+AMLHVRCbMMfYCUDIEhUlsGxKQryq
54
+ yk+ga24EMPBLdSf1g1oas9dy7qDtK+91Bh1k7Oo7CrkisRQ70t1Cz+paQSJVZXxv
55
+ MBP6B8eXReB9YLOaIdsKoqEZ6Z0SEFr3xxudiB4ReYB9qqKeTDV0/VLf2m6TmnUr
56
+ ZImLJbi/bAxbcU3h9J4sq5Ma+l1t0gsmO0mlbQIDAQABAoIBAAU5AqWbM5e6Sm98
57
+ ubTkN27AjVD5EbNj2XSiZhYwe//uPddRpl6b6AOfgZYdBAIKVSBNv+DyXa624jOe
58
+ osqcledHqAwEAqqdeMTTW+pFF8eZdClybELeOv0n+xHZ+kqggTZag1q2lPm0FEz2
59
+ pVsSLJsWiG29F2sNCq0L0XtwpWLnHJO0U0dUjVtspDpAnQkl+l8WiTJkY0uf+L8z
60
+ iY6VDtNhf+Cc2TyOnB51nArHQfVt6pSahn8UB7gnjoPBjEPSlSj68XwjNLViFj94
61
+ NeXdrOQ/kjlsJcuX06jfUulHOlFP+uOft3m/q+8OC0uQm4EmcJ9p+m8E6z5ypUDp
62
+ kHi7swECgYEA74mktO2725fON43HpHG/fNglTPqlDUdoqUlDg7ovaDiaL+FlnhOb
63
+ 7vUBfJ5FjWkeO6Teg0ElOA03sOAq29ql91kaweSEbSkRb5HLVGo7m3FTKfi8rTpe
64
+ QufQDjt8kvnAtNSlXQexG3BJpondbMF4hYZSTtGPjkM0MQOqkByUZC0CgYEA05G5
65
+ M/NnZXpXvpZNCHlDht98bHUAZfKLRe7FTAqLBWAEWG70x8aBhzFn6kOD0jhsVcnt
66
+ 3EwiUD1MIuiWYvyGmwBoRCQGVxW2LuxbBYRSpPgTPKPM9juc3GYs36KTSbA3+44y
67
+ 2Fys8/gQusYQ3YwomxU4ygL5lyxxY14sQ3UAzkECgYEAhjRJ8YyYicmdogZvajTI
68
+ oju/ekebnbr6ao4/o1f3I59C07ym4FAAN3tRn+5U7YuNgsE2YbdoEOVm5FRT7uWr
69
+ ws9LbIKJp1cxC59VmjACwW5Wt9dCbpObKEUUjkTJ4NbJHwdctqiOk97vhL0NL9ed
70
+ nMHK75n9oikI3sU9FIzOnukCgYEAz9FpgZ1K6EQ3om9S9crfyMEIICUBoiKQKb5z
71
+ sND+Y+Y//nnnGcFkhF7EezmcZ8eiqtYyPl3OqtC7U+LxrgPtWJ4azSwxyiL6lLb4
72
+ Zb/nykIf60Xe09QUre3zkCzKzuw44XF5gkvuW6tFC6H4+RZu4H8FDHHFp3gxXPEp
73
+ O43Xn8ECgYBzM7yEM0SUE6DI0WGATtuhVRXL3hjgPqf3TzmsQFMEal2Bu14d/d9f
74
+ zLks8POWjtQcgn2PGvrHS+aJZYR0okue4Ny5bfk+AohClXDtqZnz45wabYrRq6Xg
75
+ dTi8xJJHVkoRfcQleui6oqRB3i4iGlu5k8T1+djLLiN9eo0PY1VciQ==
76
+ -----END RSA PRIVATE KEY-----
77
+
78
+
79
+ # List Symmetric Key files in the order of current / latest first
80
+ ciphers:
81
+ -
82
+ # Filename containing Symmetric Encryption Key encrypted using the
83
+ # RSA public key derived from the private key above
84
+ key_filename: config/keys/dummy_release.key
85
+ iv_filename: config/keys/dummy_release.iv
86
+ cipher_name: aes-256-cbc
87
+ # Base64 encode encrypted data without newlines
88
+ encoding: :base64strict
89
+ version: 1
90
+
91
+ production:
92
+ # Since the key to encrypt and decrypt with must NOT be stored along with the
93
+ # source code, we only hold a RSA key that is used to unlock the file
94
+ # containing the actual symmetric encryption key
95
+ private_rsa_key: |
96
+ -----BEGIN RSA PRIVATE KEY-----
97
+ MIIEpAIBAAKCAQEAy6UmlgZFM2f70i5/xINHdxZVbxPRgUrfO643LGUC1gfZVsNn
98
+ kus5xoAjZKgdlS2o47X8PYFi8gR96NBWPAQYS9M3p6KDbs9Yt+Imcb0LeHCamMin
99
+ AvhE5QBlf+A13oYY5xOTrwJMq1hSGB8rC3gbZMgSJBbjAiW+zgwzLzjXaphTwulP
100
+ 8/Ht9PucvZE8arxsmvi7dGXr5B3uDZjAeS9qCl9LOMwHtOLeKD8GvKniN0tLUaSA
101
+ SWgI3z46KonSiYelzAMdhkwP4K5SqUITp9Uv7SVCoPoM7Xm640BnD0MJWxKH6lVi
102
+ 56YJnT5xuIDC4zGwGdZG4dJS0ep1uSX0ZQ2xhwIDAQABAoIBAQCgn8brlk6G2YG6
103
+ qoqEibeYqrkAP/WDsXaaMDO8hH/UKaS31rCfJYIQm4lPH3sV60nHMgeey6srkXdu
104
+ ZsVd2S0AwbyoMHrSsCEeCPahx6aAfPCzibCRmxlcNw/X6RUUS1jhCoP2Ci5HCAbY
105
+ l9zv0vBocZY9eP/c9cCl7OGCYacnn0zZNf8dRZ6qPkOA8ySejPbgzmhQTt1JAJUw
106
+ 2HaWo0tyCu0cE6FL//b+a+gblLc0e/2Y45BSnWbzXtxSfz/jKrpeqU1fW0lHVxd8
107
+ dFHLcQTvTu/R1JIVmC0RM9ZnsVTObJ8rTfazHYIt7/IsR+gj5E3MZmDJ7PzNv0kl
108
+ v01Iml0BAoGBAPpicmI3lTuyAwm8e7XXMbC4T7QinLN9XJeTc87EMM/KKFhiVjtr
109
+ gzcxUH0EqdfSd5bLU8fjW9H/xgQM82QNQzV2+AWY7wn2Lda1AE7xZYIjpBg+awV9
110
+ kKnRfDf3ThqKl5nmkmOQtYGNKKwn/u1ZTOSlQ1E2BqISdCNhupPhUZehAoGBANA2
111
+ WuBoU3IPKge/ELREz4GEdYSaHXZ8R3Au1vTXZQIRCUB/GJEoG2SmXxV1YFJMAm0B
112
+ 6/ZkWvhANf1BU4rcVMYuKJwS9XSFIlW0Npq8uMZKP4A8dnw+bz53XZJr5DsaPoWy
113
+ jm65UC+Tbqg0mZV0mJ5JMKiH5Ezfu03mJUuYmJgnAoGAVcFOB9GdrRpk6/rALCGO
114
+ BUa7FakdHmR7R/banSCYzzIf61WSzzsdb9PWC1uDiEWva9gr07RNCHmfqld9LPFV
115
+ 6YPbop8kj7bfMEBB4MfQymfGlf8azICbAW6cKtbqyzBYh/9ud+diIwLjwULZjxUc
116
+ vtrTWYc1cmD7ofqg2nE7bsECgYEAqCtOyTPaOiS/WNRcpI1zYHPhC0IDDAEjHhvm
117
+ 6IjUf4/M/jfpWsyfG3M5Fzbfnnjf+LV1pWO3Cg2qzaum02BUZGFB0ZWKhRtG+Rv+
118
+ goptX1L26Rdsx7sR1M1KWYolJAt1dj0ax5mLh3G4Dcm2Rr2Oy0HoOCbSIbkPKsL5
119
+ Wo6cqT8CgYAwMtF9qJYeEJtjgxuRVwlEUzcvxsNiuuUSFq9RpAXYL+F2U/P0SdQw
120
+ 06nf1JLvkcG2CyMbIB62BnQcuUyGAuhjtbpcsSn4MG00vfDNMPkaxOJ9W4S3mmnt
121
+ U2mXWYauJDvNdLEr42bVX3bTPTfR4zrIqe+oJJCH61Jcu/3ekpSkkA==
122
+ -----END RSA PRIVATE KEY-----
123
+
124
+
125
+ # List Symmetric Key files in the order of current / latest first
126
+ ciphers:
127
+ -
128
+ # Filename containing Symmetric Encryption Key encrypted using the
129
+ # RSA public key derived from the private key above
130
+ key_filename: config/keys/dummy_production.key
131
+ iv_filename: config/keys/dummy_production.iv
132
+ cipher_name: aes-256-cbc
133
+ # Base64 encode encrypted data without newlines
134
+ encoding: :base64strict
135
+ version: 1
@@ -3,13 +3,11 @@ class DeviseCreateKauiUsers < ActiveRecord::Migration
3
3
  def change
4
4
  create_table(:kaui_users) do |t|
5
5
  # From Kill Bill
6
- t.string :kb_tenant_id, :null => true
7
6
  t.string :kb_username, :null => false
8
7
  t.string :kb_session_id, :null => true
9
-
10
8
  t.timestamps
11
9
  end
12
10
 
13
- add_index :kaui_users, [:kb_tenant_id, :kb_username], :unique => true
11
+ add_index :kaui_users, [:kb_username], :unique => true
14
12
  end
15
13
  end
@@ -0,0 +1,13 @@
1
+ # This migration comes from kaui (originally 20150109214021)
2
+ class CreateKauiTenants < ActiveRecord::Migration
3
+ def change
4
+ create_table :kaui_tenants do |t|
5
+ t.string :name
6
+ t.string :kb_tenant_id
7
+ t.string :api_key
8
+ t.string :encrypted_api_secret
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # This migration comes from kaui (originally 20150112232813)
2
+ class CreateKauiAllowedUsers < ActiveRecord::Migration
3
+ def change
4
+ create_table :kaui_allowed_users do |t|
5
+ t.string :kb_username
6
+ t.string :description
7
+ t.timestamps
8
+ end
9
+
10
+ add_index :kaui_allowed_users, [:kb_username], :unique => true
11
+
12
+ create_table :kaui_allowed_user_tenants do |t|
13
+ t.belongs_to :kaui_allowed_user, :index => true
14
+ t.belongs_to :kaui_tenant, :index => true
15
+ t.timestamps null: false
16
+ end
17
+
18
+ add_index :kaui_allowed_user_tenants, [:kaui_allowed_user_id, :kaui_tenant_id], :unique => true, :name => 'kaui_allowed_user_tenants_uniq'
19
+ end
20
+ end
@@ -11,16 +11,42 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20130819152643) do
14
+ ActiveRecord::Schema.define(:version => 20150116052159) do
15
15
 
16
- create_table "kaui_users", :force => true do |t|
16
+ create_table "kaui_allowed_user_tenants", :force => true do |t|
17
+ t.integer "kaui_allowed_user_id"
18
+ t.integer "kaui_tenant_id"
19
+ t.datetime "created_at", :null => false
20
+ t.datetime "updated_at", :null => false
21
+ end
22
+
23
+ add_index "kaui_allowed_user_tenants", ["kaui_allowed_user_id", "kaui_tenant_id"], :name => "kaui_allowed_user_tenants_uniq", :unique => true
24
+
25
+ create_table "kaui_allowed_users", :force => true do |t|
26
+ t.string "kb_username"
27
+ t.string "description"
28
+ t.datetime "created_at", :null => false
29
+ t.datetime "updated_at", :null => false
30
+ end
31
+
32
+ add_index "kaui_allowed_users", ["kb_username"], :name => "index_kaui_allowed_users_on_kb_username", :unique => true
33
+
34
+ create_table "kaui_tenants", :force => true do |t|
35
+ t.string "name"
17
36
  t.string "kb_tenant_id"
37
+ t.string "api_key"
38
+ t.string "encrypted_api_secret"
39
+ t.datetime "created_at", :null => false
40
+ t.datetime "updated_at", :null => false
41
+ end
42
+
43
+ create_table "kaui_users", :force => true do |t|
18
44
  t.string "kb_username", :null => false
19
45
  t.string "kb_session_id"
20
46
  t.datetime "created_at", :null => false
21
47
  t.datetime "updated_at", :null => false
22
48
  end
23
49
 
24
- add_index "kaui_users", ["kb_tenant_id", "kb_username"], :name => "index_kaui_users_on_kb_tenant_id_and_kb_username", :unique => true
50
+ add_index "kaui_users", ["kb_username"], :name => "index_kaui_users_on_kb_username", :unique => true
25
51
 
26
52
  end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ module Kaui
4
+ class AdminAllowedUsersControllerTest < Kaui::FunctionalTestHelper
5
+ test "should get new" do
6
+ post :new
7
+ assert_response :success
8
+ end
9
+
10
+ test "should get create" do
11
+ post :create, :allowed_user => { :kb_username => 'Albator', :description => 'My french super hero'}
12
+ assert_response 302
13
+ end
14
+
15
+ test 'should get index' do
16
+ get :index
17
+ assert_response 200
18
+ end
19
+
20
+
21
+ test "should get show" do
22
+ au = Kaui::AllowedUser.new
23
+ au.kb_username = 'Mad Max'
24
+ au.description = 'My super hero'
25
+ au.save!
26
+ get :show, :id => au.id
27
+ assert_response :success
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ module Kaui
4
+ class AdminTenantsControllerTest < Kaui::FunctionalTestHelper
5
+
6
+ test "should get new" do
7
+ post :new
8
+ assert_response :success
9
+ end
10
+
11
+ test "should get create" do
12
+ now = Time.now.to_s
13
+ post :create, :tenant => { :name => 'Goldorak_' + now, :api_key => '12345_' + now, :api_secret => 'ItH@st0beComplic@ted'}
14
+ assert_response 302
15
+ end
16
+
17
+
18
+ test "should get show" do
19
+ tenant = Kaui::Tenant.new
20
+ tenant.name = 'foo'
21
+ tenant.api_key = 'api_key'
22
+ tenant.api_secret = 'api_secret'
23
+ tenant.kb_tenant_id = 'kb_tenant_id'
24
+ tenant.save!
25
+ get :show, :id => tenant.id
26
+ assert_response :success
27
+ end
28
+
29
+
30
+ test "should get index" do
31
+ get :index
32
+ assert_response :success
33
+ end
34
+ end
35
+ end