plesk_kit 1.0.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 (157) hide show
  1. data/app/assets/javascripts/plesk_kit/application.js +15 -0
  2. data/app/assets/javascripts/plesk_kit/customer_accounts.js +2 -0
  3. data/app/assets/javascripts/plesk_kit/customers.js +2 -0
  4. data/app/assets/javascripts/plesk_kit/reseller_accounts.js +2 -0
  5. data/app/assets/javascripts/plesk_kit/servers.js +2 -0
  6. data/app/assets/javascripts/plesk_kit/subscriptions.js +2 -0
  7. data/app/assets/stylesheets/plesk_kit/application.css +13 -0
  8. data/app/assets/stylesheets/plesk_kit/customer_accounts.css +4 -0
  9. data/app/assets/stylesheets/plesk_kit/customers.css +4 -0
  10. data/app/assets/stylesheets/plesk_kit/reseller_accounts.css +4 -0
  11. data/app/assets/stylesheets/plesk_kit/servers.css +4 -0
  12. data/app/assets/stylesheets/plesk_kit/subscriptions.css +4 -0
  13. data/app/assets/stylesheets/scaffold.css +56 -0
  14. data/app/controllers/plesk_kit/application_controller.rb +4 -0
  15. data/app/controllers/plesk_kit/customer_accounts_controller.rb +87 -0
  16. data/app/controllers/plesk_kit/reseller_accounts_controller.rb +87 -0
  17. data/app/controllers/plesk_kit/servers_controller.rb +87 -0
  18. data/app/controllers/plesk_kit/subscriptions_controller.rb +87 -0
  19. data/app/helpers/plesk_kit/application_helper.rb +4 -0
  20. data/app/helpers/plesk_kit/customer_accounts_helper.rb +4 -0
  21. data/app/helpers/plesk_kit/reseller_accounts_helper.rb +4 -0
  22. data/app/helpers/plesk_kit/servers_helper.rb +4 -0
  23. data/app/helpers/plesk_kit/subscriptions_helper.rb +4 -0
  24. data/app/models/plesk_kit/client.rb +25 -0
  25. data/app/models/plesk_kit/communicator.rb +45 -0
  26. data/app/models/plesk_kit/customer_account.rb +69 -0
  27. data/app/models/plesk_kit/reseller_account.rb +72 -0
  28. data/app/models/plesk_kit/server.rb +30 -0
  29. data/app/models/plesk_kit/subscription.rb +86 -0
  30. data/app/views/layouts/plesk_kit/application.html.erb +14 -0
  31. data/app/views/plesk_kit/customer_accounts/_form.html.erb +33 -0
  32. data/app/views/plesk_kit/customer_accounts/edit.html.erb +6 -0
  33. data/app/views/plesk_kit/customer_accounts/index.html.erb +29 -0
  34. data/app/views/plesk_kit/customer_accounts/new.html.erb +5 -0
  35. data/app/views/plesk_kit/customer_accounts/show.html.erb +25 -0
  36. data/app/views/plesk_kit/reseller_accounts/_form.html.erb +33 -0
  37. data/app/views/plesk_kit/reseller_accounts/edit.html.erb +6 -0
  38. data/app/views/plesk_kit/reseller_accounts/index.html.erb +29 -0
  39. data/app/views/plesk_kit/reseller_accounts/new.html.erb +5 -0
  40. data/app/views/plesk_kit/reseller_accounts/show.html.erb +25 -0
  41. data/app/views/plesk_kit/servers/_form.html.erb +37 -0
  42. data/app/views/plesk_kit/servers/edit.html.erb +6 -0
  43. data/app/views/plesk_kit/servers/index.html.erb +31 -0
  44. data/app/views/plesk_kit/servers/new.html.erb +5 -0
  45. data/app/views/plesk_kit/servers/show.html.erb +30 -0
  46. data/app/views/plesk_kit/subscriptions/_form.html.erb +49 -0
  47. data/app/views/plesk_kit/subscriptions/edit.html.erb +6 -0
  48. data/app/views/plesk_kit/subscriptions/index.html.erb +33 -0
  49. data/app/views/plesk_kit/subscriptions/new.html.erb +5 -0
  50. data/app/views/plesk_kit/subscriptions/show.html.erb +35 -0
  51. data/config/routes.rb +8 -0
  52. data/db/migrate/20130906033658_create_plesk_kit_customer_accounts.rb +14 -0
  53. data/db/migrate/20130906033745_create_plesk_kit_reseller_accounts.rb +15 -0
  54. data/db/migrate/20130906034225_create_plesk_kit_subscriptions.rb +16 -0
  55. data/db/migrate/20130906040817_create_plesk_kit_servers.rb +13 -0
  56. data/lib/plesk_kit/engine.rb +23 -0
  57. data/lib/plesk_kit/version.rb +3 -0
  58. data/lib/plesk_kit.rb +4 -0
  59. data/lib/tasks/plesk_kit_tasks.rake +4 -0
  60. data/test/dummy/README.rdoc +261 -0
  61. data/test/dummy/Rakefile +7 -0
  62. data/test/dummy/app/assets/javascripts/application.js +15 -0
  63. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  64. data/test/dummy/app/controllers/application_controller.rb +3 -0
  65. data/test/dummy/app/helpers/application_helper.rb +2 -0
  66. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  67. data/test/dummy/config/application.rb +59 -0
  68. data/test/dummy/config/boot.rb +10 -0
  69. data/test/dummy/config/database.yml +25 -0
  70. data/test/dummy/config/environment.rb +5 -0
  71. data/test/dummy/config/environments/development.rb +37 -0
  72. data/test/dummy/config/environments/production.rb +67 -0
  73. data/test/dummy/config/environments/test.rb +37 -0
  74. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  75. data/test/dummy/config/initializers/inflections.rb +15 -0
  76. data/test/dummy/config/initializers/mime_types.rb +5 -0
  77. data/test/dummy/config/initializers/secret_token.rb +7 -0
  78. data/test/dummy/config/initializers/session_store.rb +8 -0
  79. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  80. data/test/dummy/config/locales/en.yml +5 -0
  81. data/test/dummy/config/routes.rb +4 -0
  82. data/test/dummy/config.ru +4 -0
  83. data/test/dummy/db/development.sqlite3 +0 -0
  84. data/test/dummy/db/migrate/20130906035255_create_plesk_kit_customer_accounts.plesk_kit.rb +13 -0
  85. data/test/dummy/db/migrate/20130906035256_create_plesk_kit_reseller_accounts.plesk_kit.rb +13 -0
  86. data/test/dummy/db/migrate/20130906035257_create_plesk_kit_subscriptions.plesk_kit.rb +17 -0
  87. data/test/dummy/db/migrate/20130906040830_create_plesk_kit_servers.plesk_kit.rb +14 -0
  88. data/test/dummy/db/schema.rb +72 -0
  89. data/test/dummy/db/test.sqlite3 +0 -0
  90. data/test/dummy/log/development.log +9379 -0
  91. data/test/dummy/public/404.html +26 -0
  92. data/test/dummy/public/422.html +26 -0
  93. data/test/dummy/public/500.html +25 -0
  94. data/test/dummy/public/favicon.ico +0 -0
  95. data/test/dummy/script/rails +6 -0
  96. data/test/dummy/tmp/cache/assets/C5D/AF0/sprockets%2Faa100860897bd469c74972020e9d6966 +0 -0
  97. data/test/dummy/tmp/cache/assets/C83/800/sprockets%2F0892f1bdb69d260331b7b414298969c1 +0 -0
  98. data/test/dummy/tmp/cache/assets/C8A/850/sprockets%2F8729404d8f18dcc24e0523d37801589e +0 -0
  99. data/test/dummy/tmp/cache/assets/CC2/EF0/sprockets%2F756af5df20241589c464741d971fd7d8 +0 -0
  100. data/test/dummy/tmp/cache/assets/CC4/B50/sprockets%2F34e848818d05961fdc8c6c275e16629b +0 -0
  101. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  102. data/test/dummy/tmp/cache/assets/CE0/340/sprockets%2F4b6f8f760b2a1789f60289271d20c0be +0 -0
  103. data/test/dummy/tmp/cache/assets/CED/DE0/sprockets%2F18595c4734c4d7582dee3ae35b079a49 +0 -0
  104. data/test/dummy/tmp/cache/assets/CEE/F00/sprockets%2F891ac2c44b3be23865e990924a995fe2 +0 -0
  105. data/test/dummy/tmp/cache/assets/D10/EC0/sprockets%2F73e40114523e8419fcd0efa71d597c5d +0 -0
  106. data/test/dummy/tmp/cache/assets/D11/AE0/sprockets%2Fa1a95d724723a8f11e9037e8d2b28a8f +0 -0
  107. data/test/dummy/tmp/cache/assets/D13/380/sprockets%2F354af7b9709615f6f10e77d7e1b2da15 +0 -0
  108. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  109. data/test/dummy/tmp/cache/assets/D33/4D0/sprockets%2F14f2359cdf393c5e0b6401e233bb2ef5 +0 -0
  110. data/test/dummy/tmp/cache/assets/D3B/BF0/sprockets%2F3b7fb545a51edee1b772b818b2424d56 +0 -0
  111. data/test/dummy/tmp/cache/assets/D3C/B20/sprockets%2F1927fcaeaf1d200dab53e55b86526939 +0 -0
  112. data/test/dummy/tmp/cache/assets/D3F/2C0/sprockets%2F1ada6cc19aa84bf00164875127ef689e +0 -0
  113. data/test/dummy/tmp/cache/assets/D44/140/sprockets%2F341e589bb22dea2848665b989b2ba3ea +0 -0
  114. data/test/dummy/tmp/cache/assets/D4A/700/sprockets%2Fd56d83b8bbc98f0ce23f6263ff796020 +0 -0
  115. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  116. data/test/dummy/tmp/cache/assets/D51/190/sprockets%2F2a28b96857a9e16a74ee9dde52903dc7 +0 -0
  117. data/test/dummy/tmp/cache/assets/D51/610/sprockets%2F34de6f511191ffa00431d50cb5b31eac +0 -0
  118. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  119. data/test/dummy/tmp/cache/assets/D62/7B0/sprockets%2F39cdc1f2f8021136f2034ac5a9dab7f6 +0 -0
  120. data/test/dummy/tmp/cache/assets/D78/5D0/sprockets%2Feb7a1f999039a6136d9cfe25222fdcd5 +0 -0
  121. data/test/dummy/tmp/cache/assets/D7A/A30/sprockets%2F7e54a37cfb268f56b4c49b9f02029bff +0 -0
  122. data/test/dummy/tmp/cache/assets/D98/A30/sprockets%2Fd3cd57a8fade5aef376036123c5e11d6 +0 -0
  123. data/test/dummy/tmp/cache/assets/DA6/B80/sprockets%2F3fea63c0c7e19aae37d6037cd9d987e0 +0 -0
  124. data/test/dummy/tmp/cache/assets/DBA/730/sprockets%2F182cd97bf96da9ad7f037dcda77e8965 +0 -0
  125. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  126. data/test/dummy/tmp/cache/assets/DF9/B80/sprockets%2Fe87d27fca0c65097c5b652becc1eec0b +0 -0
  127. data/test/dummy/tmp/cache/assets/DFA/E90/sprockets%2F1fc47d21f6a426ae1e5d7b1dc9b39dbf +0 -0
  128. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  129. data/test/dummy/tmp/cache/assets/E28/3B0/sprockets%2Fce7fac4e9b4c46afa942e091b54c6aab +0 -0
  130. data/test/dummy/tmp/cache/assets/E3D/360/sprockets%2F19c6fbcf6aaed23dce100b1c1b2b0b8c +0 -0
  131. data/test/dummy/tmp/cache/assets/E89/270/sprockets%2F1bf1ee2ecfe1c679faf4002f4ea8bece +0 -0
  132. data/test/fixtures/plesk_kit/customer_accounts.yml +13 -0
  133. data/test/fixtures/plesk_kit/customers.yml +7 -0
  134. data/test/fixtures/plesk_kit/reseller_accounts.yml +13 -0
  135. data/test/fixtures/plesk_kit/servers.yml +15 -0
  136. data/test/fixtures/plesk_kit/subscriptions.yml +17 -0
  137. data/test/fixtures/plesk_kit/webspaces.yml +11 -0
  138. data/test/functional/plesk_kit/customer_accounts_controller_test.rb +51 -0
  139. data/test/functional/plesk_kit/customers_controller_test.rb +51 -0
  140. data/test/functional/plesk_kit/reseller_accounts_controller_test.rb +51 -0
  141. data/test/functional/plesk_kit/servers_controller_test.rb +51 -0
  142. data/test/functional/plesk_kit/subscriptions_controller_test.rb +51 -0
  143. data/test/integration/navigation_test.rb +10 -0
  144. data/test/plesk_kit_test.rb +7 -0
  145. data/test/test_helper.rb +15 -0
  146. data/test/unit/helpers/plesk_kit/customer_accounts_helper_test.rb +6 -0
  147. data/test/unit/helpers/plesk_kit/customers_helper_test.rb +6 -0
  148. data/test/unit/helpers/plesk_kit/reseller_accounts_helper_test.rb +6 -0
  149. data/test/unit/helpers/plesk_kit/servers_helper_test.rb +6 -0
  150. data/test/unit/helpers/plesk_kit/subscriptions_helper_test.rb +6 -0
  151. data/test/unit/plesk_kit/customer_account_test.rb +9 -0
  152. data/test/unit/plesk_kit/customer_test.rb +9 -0
  153. data/test/unit/plesk_kit/reseller_account_test.rb +9 -0
  154. data/test/unit/plesk_kit/server_test.rb +9 -0
  155. data/test/unit/plesk_kit/subscription_test.rb +9 -0
  156. data/test/unit/plesk_kit/webspace_test.rb +9 -0
  157. metadata +331 -0
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,56 @@
1
+ body { background-color: #fff; color: #333; }
2
+
3
+ body, p, ol, ul, td {
4
+ font-family: verdana, arial, helvetica, sans-serif;
5
+ font-size: 13px;
6
+ line-height: 18px;
7
+ }
8
+
9
+ pre {
10
+ background-color: #eee;
11
+ padding: 10px;
12
+ font-size: 11px;
13
+ }
14
+
15
+ a { color: #000; }
16
+ a:visited { color: #666; }
17
+ a:hover { color: #fff; background-color:#000; }
18
+
19
+ div.field, div.actions {
20
+ margin-bottom: 10px;
21
+ }
22
+
23
+ #notice {
24
+ color: green;
25
+ }
26
+
27
+ .field_with_errors {
28
+ padding: 2px;
29
+ background-color: red;
30
+ display: table;
31
+ }
32
+
33
+ #error_explanation {
34
+ width: 450px;
35
+ border: 2px solid red;
36
+ padding: 7px;
37
+ padding-bottom: 0;
38
+ margin-bottom: 20px;
39
+ background-color: #f0f0f0;
40
+ }
41
+
42
+ #error_explanation h2 {
43
+ text-align: left;
44
+ font-weight: bold;
45
+ padding: 5px 5px 5px 15px;
46
+ font-size: 12px;
47
+ margin: -7px;
48
+ margin-bottom: 0px;
49
+ background-color: #c00;
50
+ color: #fff;
51
+ }
52
+
53
+ #error_explanation ul li {
54
+ font-size: 12px;
55
+ list-style: square;
56
+ }
@@ -0,0 +1,4 @@
1
+ module PleskKit
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,87 @@
1
+ require_dependency "plesk_kit/application_controller"
2
+
3
+ module PleskKit
4
+ class CustomerAccountsController < ApplicationController
5
+ # GET /customer_accounts
6
+ # GET /customer_accounts.json
7
+ def index
8
+ @customer_accounts = CustomerAccount.all
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.json { render json: @customer_accounts }
13
+ end
14
+ end
15
+
16
+ # GET /customer_accounts/1
17
+ # GET /customer_accounts/1.json
18
+ def show
19
+ @customer_account = CustomerAccount.find(params[:id])
20
+
21
+ respond_to do |format|
22
+ format.html # show.html.erb
23
+ format.json { render json: @customer_account }
24
+ end
25
+ end
26
+
27
+ # GET /customer_accounts/new
28
+ # GET /customer_accounts/new.json
29
+ def new
30
+ @customer_account = CustomerAccount.new
31
+
32
+ respond_to do |format|
33
+ format.html # new.html.erb
34
+ format.json { render json: @customer_account }
35
+ end
36
+ end
37
+
38
+ # GET /customer_accounts/1/edit
39
+ def edit
40
+ @customer_account = CustomerAccount.find(params[:id])
41
+ end
42
+
43
+ # POST /customer_accounts
44
+ # POST /customer_accounts.json
45
+ def create
46
+ @customer_account = CustomerAccount.new(params[:customer_account])
47
+
48
+ respond_to do |format|
49
+ if @customer_account.save
50
+ format.html { redirect_to @customer_account, notice: 'Customer account was successfully created.' }
51
+ format.json { render json: @customer_account, status: :created, location: @customer_account }
52
+ else
53
+ format.html { render action: "new" }
54
+ format.json { render json: @customer_account.errors, status: :unprocessable_entity }
55
+ end
56
+ end
57
+ end
58
+
59
+ # PUT /customer_accounts/1
60
+ # PUT /customer_accounts/1.json
61
+ def update
62
+ @customer_account = CustomerAccount.find(params[:id])
63
+
64
+ respond_to do |format|
65
+ if @customer_account.update_attributes(params[:customer_account])
66
+ format.html { redirect_to @customer_account, notice: 'Customer account was successfully updated.' }
67
+ format.json { head :no_content }
68
+ else
69
+ format.html { render action: "edit" }
70
+ format.json { render json: @customer_account.errors, status: :unprocessable_entity }
71
+ end
72
+ end
73
+ end
74
+
75
+ # DELETE /customer_accounts/1
76
+ # DELETE /customer_accounts/1.json
77
+ def destroy
78
+ @customer_account = CustomerAccount.find(params[:id])
79
+ @customer_account.destroy
80
+
81
+ respond_to do |format|
82
+ format.html { redirect_to customer_accounts_url }
83
+ format.json { head :no_content }
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,87 @@
1
+ require_dependency "plesk_kit/application_controller"
2
+
3
+ module PleskKit
4
+ class ResellerAccountsController < ApplicationController
5
+ # GET /reseller_accounts
6
+ # GET /reseller_accounts.json
7
+ def index
8
+ @reseller_accounts = ResellerAccount.all
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.json { render json: @reseller_accounts }
13
+ end
14
+ end
15
+
16
+ # GET /reseller_accounts/1
17
+ # GET /reseller_accounts/1.json
18
+ def show
19
+ @reseller_account = ResellerAccount.find(params[:id])
20
+
21
+ respond_to do |format|
22
+ format.html # show.html.erb
23
+ format.json { render json: @reseller_account }
24
+ end
25
+ end
26
+
27
+ # GET /reseller_accounts/new
28
+ # GET /reseller_accounts/new.json
29
+ def new
30
+ @reseller_account = ResellerAccount.new
31
+
32
+ respond_to do |format|
33
+ format.html # new.html.erb
34
+ format.json { render json: @reseller_account }
35
+ end
36
+ end
37
+
38
+ # GET /reseller_accounts/1/edit
39
+ def edit
40
+ @reseller_account = ResellerAccount.find(params[:id])
41
+ end
42
+
43
+ # POST /reseller_accounts
44
+ # POST /reseller_accounts.json
45
+ def create
46
+ @reseller_account = ResellerAccount.new(params[:reseller_account])
47
+
48
+ respond_to do |format|
49
+ if @reseller_account.save
50
+ format.html { redirect_to @reseller_account, notice: 'Reseller account was successfully created.' }
51
+ format.json { render json: @reseller_account, status: :created, location: @reseller_account }
52
+ else
53
+ format.html { render action: "new" }
54
+ format.json { render json: @reseller_account.errors, status: :unprocessable_entity }
55
+ end
56
+ end
57
+ end
58
+
59
+ # PUT /reseller_accounts/1
60
+ # PUT /reseller_accounts/1.json
61
+ def update
62
+ @reseller_account = ResellerAccount.find(params[:id])
63
+
64
+ respond_to do |format|
65
+ if @reseller_account.update_attributes(params[:reseller_account])
66
+ format.html { redirect_to @reseller_account, notice: 'Reseller account was successfully updated.' }
67
+ format.json { head :no_content }
68
+ else
69
+ format.html { render action: "edit" }
70
+ format.json { render json: @reseller_account.errors, status: :unprocessable_entity }
71
+ end
72
+ end
73
+ end
74
+
75
+ # DELETE /reseller_accounts/1
76
+ # DELETE /reseller_accounts/1.json
77
+ def destroy
78
+ @reseller_account = ResellerAccount.find(params[:id])
79
+ @reseller_account.destroy
80
+
81
+ respond_to do |format|
82
+ format.html { redirect_to reseller_accounts_url }
83
+ format.json { head :no_content }
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,87 @@
1
+ require_dependency "plesk_kit/application_controller"
2
+
3
+ module PleskKit
4
+ class ServersController < ApplicationController
5
+ # GET /servers
6
+ # GET /servers.json
7
+ def index
8
+ @servers = Server.all
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.json { render json: @servers }
13
+ end
14
+ end
15
+
16
+ # GET /servers/1
17
+ # GET /servers/1.json
18
+ def show
19
+ @server = Server.find(params[:id])
20
+
21
+ respond_to do |format|
22
+ format.html # show.html.erb
23
+ format.json { render json: @server }
24
+ end
25
+ end
26
+
27
+ # GET /servers/new
28
+ # GET /servers/new.json
29
+ def new
30
+ @server = Server.new
31
+
32
+ respond_to do |format|
33
+ format.html # new.html.erb
34
+ format.json { render json: @server }
35
+ end
36
+ end
37
+
38
+ # GET /servers/1/edit
39
+ def edit
40
+ @server = Server.find(params[:id])
41
+ end
42
+
43
+ # POST /servers
44
+ # POST /servers.json
45
+ def create
46
+ @server = Server.new(params[:server])
47
+
48
+ respond_to do |format|
49
+ if @server.save
50
+ format.html { redirect_to @server, notice: 'Server was successfully created.' }
51
+ format.json { render json: @server, status: :created, location: @server }
52
+ else
53
+ format.html { render action: "new" }
54
+ format.json { render json: @server.errors, status: :unprocessable_entity }
55
+ end
56
+ end
57
+ end
58
+
59
+ # PUT /servers/1
60
+ # PUT /servers/1.json
61
+ def update
62
+ @server = Server.find(params[:id])
63
+
64
+ respond_to do |format|
65
+ if @server.update_attributes(params[:server])
66
+ format.html { redirect_to @server, notice: 'Server was successfully updated.' }
67
+ format.json { head :no_content }
68
+ else
69
+ format.html { render action: "edit" }
70
+ format.json { render json: @server.errors, status: :unprocessable_entity }
71
+ end
72
+ end
73
+ end
74
+
75
+ # DELETE /servers/1
76
+ # DELETE /servers/1.json
77
+ def destroy
78
+ @server = Server.find(params[:id])
79
+ @server.destroy
80
+
81
+ respond_to do |format|
82
+ format.html { redirect_to servers_url }
83
+ format.json { head :no_content }
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,87 @@
1
+ require_dependency "plesk_kit/application_controller"
2
+
3
+ module PleskKit
4
+ class SubscriptionsController < ApplicationController
5
+ # GET /subscriptions
6
+ # GET /subscriptions.json
7
+ def index
8
+ @subscriptions = Subscription.all
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.json { render json: @subscriptions }
13
+ end
14
+ end
15
+
16
+ # GET /subscriptions/1
17
+ # GET /subscriptions/1.json
18
+ def show
19
+ @subscription = Subscription.find(params[:id])
20
+
21
+ respond_to do |format|
22
+ format.html # show.html.erb
23
+ format.json { render json: @subscription }
24
+ end
25
+ end
26
+
27
+ # GET /subscriptions/new
28
+ # GET /subscriptions/new.json
29
+ def new
30
+ @subscription = Subscription.new
31
+
32
+ respond_to do |format|
33
+ format.html # new.html.erb
34
+ format.json { render json: @subscription }
35
+ end
36
+ end
37
+
38
+ # GET /subscriptions/1/edit
39
+ def edit
40
+ @subscription = Subscription.find(params[:id])
41
+ end
42
+
43
+ # POST /subscriptions
44
+ # POST /subscriptions.json
45
+ def create
46
+ @subscription = Subscription.new(params[:subscription])
47
+
48
+ respond_to do |format|
49
+ if @subscription.save
50
+ format.html { redirect_to @subscription, notice: 'Subscription was successfully created.' }
51
+ format.json { render json: @subscription, status: :created, location: @subscription }
52
+ else
53
+ format.html { render action: "new" }
54
+ format.json { render json: @subscription.errors, status: :unprocessable_entity }
55
+ end
56
+ end
57
+ end
58
+
59
+ # PUT /subscriptions/1
60
+ # PUT /subscriptions/1.json
61
+ def update
62
+ @subscription = Subscription.find(params[:id])
63
+
64
+ respond_to do |format|
65
+ if @subscription.update_attributes(params[:subscription])
66
+ format.html { redirect_to @subscription, notice: 'Subscription was successfully updated.' }
67
+ format.json { head :no_content }
68
+ else
69
+ format.html { render action: "edit" }
70
+ format.json { render json: @subscription.errors, status: :unprocessable_entity }
71
+ end
72
+ end
73
+ end
74
+
75
+ # DELETE /subscriptions/1
76
+ # DELETE /subscriptions/1.json
77
+ def destroy
78
+ @subscription = Subscription.find(params[:id])
79
+ @subscription.destroy
80
+
81
+ respond_to do |format|
82
+ format.html { redirect_to subscriptions_url }
83
+ format.json { head :no_content }
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,4 @@
1
+ module PleskKit
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module PleskKit
2
+ module CustomerAccountsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module PleskKit
2
+ module ResellerAccountsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module PleskKit
2
+ module ServersHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module PleskKit
2
+ module SubscriptionsHelper
3
+ end
4
+ end
@@ -0,0 +1,25 @@
1
+ module PleskKit
2
+ class Client
3
+ attr_accessor :host, :user, :pass, :timeout, :rpc_version, :xml_response, :xml_target
4
+ def initialize(server)
5
+ @host, @user, @pass, @timeout = server.host, server.username, server.password, 30
6
+ end
7
+
8
+ def send_to_plesk(xml)
9
+ http = Net::HTTP.new(@host, 8443)
10
+ puts http.inspect
11
+ http.use_ssl = true
12
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
13
+ @headers = {
14
+ 'HTTP_AUTH_LOGIN' => @user,
15
+ 'HTTP_AUTH_PASSWD' => @pass,
16
+ 'Content-Type' => 'text/xml',
17
+ }
18
+ puts @headers
19
+ path = "/enterprise/control/agent.php"
20
+ res, data = http.post2(path, xml, @headers)
21
+ puts res
22
+ return res.body, xml
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,45 @@
1
+ module PleskKit
2
+ class Communicator
3
+
4
+ require 'net/http'
5
+ require 'builder'
6
+ require "rexml/document"
7
+
8
+ # The shell for the XML
9
+ def self.shell
10
+ Builder::XmlMarkup.new
11
+ end
12
+
13
+ # Creates object and sends it in one go
14
+ # Code only written for Customer::Account so far
15
+ def self.pack_and_play_with s, customer_account = nil
16
+ server = PleskKit::Server.find_by_environment(Rails.env.to_s)
17
+ #TODO server = PleskKit::Server.most_suitable_for_new_customer
18
+ packet = nil
19
+ if customer_account.blank?
20
+ packet = s.pack_this shell
21
+ else
22
+ packet = s.pack_this shell, customer_account
23
+ end
24
+ response = transportation_for packet,server
25
+ if (s.class.to_s == 'PleskKit::CustomerAccount' || s.class.to_s == 'PleskKit::ResellerAccount')
26
+ s.analyse response[0], server.id
27
+ else
28
+ customer_account.blank? ? (s.analyse response[0]) : (s.analyse response[0],customer_account)
29
+ end
30
+ end
31
+
32
+ # Sends packet to plesk
33
+ def self.transportation_for packet, server
34
+ c = PleskKit::Client.new(server)
35
+ c.send_to_plesk packet
36
+ end
37
+
38
+ def self.sync_subscription sub, sub_guid
39
+ server = PleskKit::Server.first
40
+ packet = sub.sync_pack shell,sub_guid
41
+ response = transportation_for packet,server
42
+ sub.analyse response[0]
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,69 @@
1
+ module PleskKit
2
+ class CustomerAccount < ActiveRecord::Base
3
+ attr_accessible :cname, :login, :passwd, :pname, :server_id # TODO add plesk_id
4
+ has_many :subscriptions
5
+ belongs_to :server
6
+ validate :uniqueness_of_login_across_accounts
7
+ before_create :provision_in_plesk
8
+
9
+ def provision_in_plesk
10
+ PleskKit::Communicator.pack_and_play_with self
11
+ end
12
+
13
+ # # #
14
+ # Methods for sending brand new customer account to Plesk
15
+ # # #
16
+
17
+ # Creates Object & Packet
18
+ def pack_this shell
19
+ xml = shell
20
+ xml.instruct!
21
+ xml.packet(:version => '1.6.3.5') {
22
+ xml.customer {
23
+ xml.add{
24
+ xml.gen_info{
25
+ xml.cname(self.cname)
26
+ xml.pname(self.pname)
27
+ xml.login(self.login)
28
+ xml.passwd(self.passwd)
29
+ #xml.status(status ? 0 : 1)
30
+ #xml.phone(phone)
31
+ #xml.fax(fax)
32
+ #xml.address(address)
33
+ #xml.city(city)
34
+ #xml.state(state)
35
+ #xml.pcode(pcode)
36
+ #xml.country(country)
37
+ }
38
+ }
39
+ }
40
+ }
41
+ return xml.target!
42
+ end
43
+
44
+ def analyse response_string, server_id
45
+ xml = REXML::Document.new(response_string)
46
+ status = xml.root.elements['//status'].text if xml.root.elements['//status'].present?
47
+ if status == "error"
48
+ code = xml.root.elements['//errcode'].text
49
+ message = xml.root.elements['//errtext'].text
50
+ raise "#{code}: #{message}"
51
+ else
52
+ plesk_id = xml.root.elements['//id'].text if xml.root.elements['//id'].present?
53
+ self.server_id = server_id
54
+ end
55
+
56
+ return plesk_id # TODO save plesk_id
57
+ end
58
+
59
+ private
60
+ def uniqueness_of_login_across_accounts
61
+ if PleskKit::CustomerAccount.find_by_login(self.login).present?
62
+ errors.add(:base, "Login is not unique across Uber Plesk accounts")
63
+ elsif PleskKit::ResellerAccount.find_by_login(self.login).present?
64
+ errors.add(:base, "Login is not unique across Uber Plesk accounts")
65
+ end
66
+ end
67
+
68
+ end
69
+ end