kaui 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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