webroar 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/CHANGELOG +48 -1
  2. data/README +11 -14
  3. data/Rakefile +1 -1
  4. data/conf/mime_type.yml +172 -166
  5. data/conf/server_internal_config.yml +30 -8
  6. data/doc/user-guide.html +294 -153
  7. data/doc/user-guide.txt +9 -13
  8. data/lib/command_runner.rb +1 -0
  9. data/lib/dependencies.rb +18 -15
  10. data/lib/installer.rb +115 -50
  11. data/src/admin_panel/app/controllers/admin_controller.rb +1 -15
  12. data/src/admin_panel/app/controllers/application_controller.rb +2 -2
  13. data/src/admin_panel/app/controllers/application_specification_controller.rb +2 -1
  14. data/src/admin_panel/app/controllers/headers_controller.rb +73 -0
  15. data/src/admin_panel/app/controllers/mail_specification_controller.rb +10 -0
  16. data/src/admin_panel/app/controllers/server_specification_controller.rb +14 -0
  17. data/src/admin_panel/app/helpers/admin_helper.rb +0 -85
  18. data/src/admin_panel/app/models/app.rb +1 -1
  19. data/src/admin_panel/app/models/application_specification.rb +33 -25
  20. data/src/admin_panel/app/models/headers.rb +116 -0
  21. data/src/admin_panel/app/models/mail_specification.rb +20 -5
  22. data/src/admin_panel/app/models/server_specification.rb +2 -7
  23. data/src/admin_panel/app/views/admin/configuration.html.erb +10 -5
  24. data/src/admin_panel/app/views/exceptions/_exception_list_partial.html.erb +4 -4
  25. data/src/admin_panel/app/views/graph/_graph_page.html.erb +3 -0
  26. data/src/admin_panel/app/views/headers/_add_expires_text_box.html.erb +35 -0
  27. data/src/admin_panel/app/views/headers/_expires_by_type_form.html.erb +65 -0
  28. data/src/admin_panel/app/views/headers/_headers_table.html.erb +113 -0
  29. data/src/admin_panel/app/views/mail_specification/_current_spec.html.erb +168 -0
  30. data/src/admin_panel/app/views/{admin → server_specification}/_add_div.html.erb +1 -1
  31. data/src/admin_panel/config/initializers/application_constants.rb +6 -0
  32. data/src/admin_panel/lib/control.rb +6 -3
  33. data/src/admin_panel/lib/scgi.rb +74 -21
  34. data/src/admin_panel/lib/yaml_writer.rb +51 -17
  35. data/src/admin_panel/public/javascripts/application.js +20 -1
  36. data/src/head/wr_access_log.c +2 -2
  37. data/src/head/wr_application.c +294 -236
  38. data/src/head/wr_application.h +8 -8
  39. data/src/head/wr_configurator.c +451 -517
  40. data/src/head/wr_configurator.h +10 -115
  41. data/src/head/wr_connection.c +26 -25
  42. data/src/head/wr_connection.h +2 -3
  43. data/src/head/wr_controller.c +110 -93
  44. data/src/head/wr_controller.h +6 -6
  45. data/src/head/wr_main.c +31 -24
  46. data/src/head/wr_request.c +70 -93
  47. data/src/head/wr_request.h +0 -4
  48. data/src/head/wr_resolver.c +21 -15
  49. data/src/head/wr_resolver.h +2 -2
  50. data/src/head/wr_server.c +36 -26
  51. data/src/head/wr_server.h +5 -5
  52. data/src/head/wr_worker.c +551 -512
  53. data/src/head/wr_worker.h +33 -20
  54. data/src/helper/wr_config.c +316 -0
  55. data/src/helper/wr_config.h +235 -0
  56. data/src/helper/wr_helper.h +1 -5
  57. data/src/helper/wr_logger.c +4 -4
  58. data/src/helper/wr_scgi.c +3 -4
  59. data/src/helper/wr_scgi.h +2 -0
  60. data/src/helper/wr_string.h +2 -2
  61. data/src/helper/wr_util.c +3 -1
  62. data/src/helper/wr_util.h +0 -0
  63. data/src/helper/wr_yaml_parser.c +30 -0
  64. data/src/helper/wr_yaml_parser.h +1 -0
  65. data/src/ruby_lib/exception_tracker/instrumentation/action_controller.rb +2 -1
  66. data/src/ruby_lib/mailer/smtpmail.rb +7 -4
  67. data/src/ruby_lib/profiler/instrumentation/action_controller.rb +2 -1
  68. data/src/ruby_lib/profiler/instrumentation/active_record.rb +3 -0
  69. data/src/ruby_lib/rack/adapter/rails.rb +14 -7
  70. data/src/ruby_lib/ruby_interface/client.rb +1 -1
  71. data/src/ruby_lib/ruby_interface/version.rb +2 -2
  72. data/src/ruby_lib/webroar_app_loader.rb +4 -2
  73. data/src/worker/wkr_controller.c +200 -140
  74. data/src/worker/wkr_http.c +14 -28
  75. data/src/worker/wkr_http.h +4 -4
  76. data/src/worker/wkr_http_request.c +12 -11
  77. data/src/worker/wkr_http_request.h +7 -8
  78. data/src/worker/wkr_http_response.c +10 -14
  79. data/src/worker/wkr_http_response.h +0 -1
  80. data/src/worker/wkr_main.c +74 -140
  81. data/src/worker/wkr_static.c +295 -108
  82. data/src/worker/wkr_static.h +20 -7
  83. data/src/worker/worker.c +245 -70
  84. data/src/worker/worker.h +46 -34
  85. data/tasks/compile.rake +128 -175
  86. data/tasks/test.rake +345 -469
  87. data/test/spec/webroar_command_spec.rb +23 -0
  88. metadata +173 -43
  89. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/README +0 -34
  90. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/Rakefile +0 -13
  91. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/init.rb +0 -5
  92. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/action_mailer_tls.rb +0 -16
  93. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb +0 -123
  94. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/test/tls_test.rb +0 -42
  95. data/src/head/wr_config.h +0 -165
  96. data/src/ruby_lib/mailer/action_mailer_tls.rb +0 -16
  97. data/src/ruby_lib/mailer/smtp_tls.rb +0 -123
@@ -0,0 +1,113 @@
1
+ <!--
2
+ WebROaR - Ruby Application Server - http://webroar.in/
3
+ Copyright (C) 2009 Goonj LLC
4
+
5
+ This file is part of WebROaR.
6
+
7
+ WebROaR is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ WebROaR is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with WebROaR. If not, see <http://www.gnu.org/licenses/>.
19
+ -->
20
+ <% expires = Headers.get_expires_value() %>
21
+ <table width = 95% cellpadding = "4" id = 'headers_table'>
22
+ <tr>
23
+ <td class = 'table_header' colspan = 3>
24
+ Headers&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function "Help", :onclick => "addHelp('headers')" %></span>
25
+ <br/>
26
+ <div id = 'headers' class = 'font_size_12'>
27
+ </div>
28
+ </td>
29
+ </tr>
30
+ <tr>
31
+ <td width = 40% class = 'BG_white'>
32
+ Expires&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function "Help", :onclick => "addHelp('expires')" %>
33
+ </span>
34
+ <br/>
35
+ <div id = 'expires' class = 'font_size_12'>
36
+ </div>
37
+ </td>
38
+ <td width = 40% class = 'BG_white'>
39
+ <div id = 'expires_div'>
40
+ <%= h(expires) %>
41
+ </div>
42
+ </td>
43
+ <td width = 20% class = 'BG_white'>
44
+ <%= link_to_remote 'Edit', :update => 'expires_div', :url => {:controller => 'headers', :action => 'add_expires_text_box', :div_id => 'expires_div'} %>
45
+ </td>
46
+ </tr>
47
+ <tr>
48
+ <td class = 'sub_header' colspan = 3>
49
+ Expires By Type&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function "Help", :onclick => "addHelp('expires_by_type')" %></span>
50
+ <br/>
51
+ <div id = 'expires_by_type' class = 'font_size_12'>
52
+ </div>
53
+ </td>
54
+ </tr>
55
+ <% expires_by_type_array = Headers.get_expires_by_type_array() %>
56
+ <% if expires_by_type_array.length > 0 %>
57
+ <tr>
58
+ <td class = 'sub_header'>
59
+ Extension&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function "Help", :onclick => "addHelp('expires_by_type_ext')" %></span>
60
+ &nbsp;&nbsp;&nbsp;
61
+ <br/>
62
+ <div id = 'expires_by_type_ext' class = 'font_size_12'>
63
+ </div>
64
+ </td>
65
+ <td class = 'sub_header'>
66
+ Expires&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function "Help", :onclick => "addHelp('expires_by_type_expires_value')" %></span>
67
+ &nbsp;&nbsp;&nbsp;
68
+ <br/>
69
+ <div id = 'expires_by_type_expires_value' class = 'font_size_12'>
70
+ </div>
71
+ </td>
72
+ <td class = 'sub_header'>
73
+
74
+ </td>
75
+ </tr>
76
+ <% index = 0 %>
77
+ <% expires_by_type_array.each do |item| %>
78
+ <tr>
79
+ <td class = 'BG_white'>
80
+ <%=h item['ext'] %>
81
+ </td>
82
+ <td class = 'BG_white'>
83
+ <%=h item['expires'] %>
84
+ </td>
85
+ <td class = 'BG_white'>
86
+ <%=link_to_remote "Delete", :update => 'headers_div', :url => {:controller => 'headers', :action => 'delete_expires_by_type', :id => index}, :confirm => "Are you sure to delete?", :oncontextmenu => 'return false;' %>
87
+ </td>
88
+ </tr>
89
+ <% index += 1%>
90
+ <% end %>
91
+ <% end %>
92
+
93
+ </table>
94
+
95
+ <div id = 'expires_by_type_form'>
96
+ </div>
97
+
98
+ <table width = 95% cellpadding = "4">
99
+ <% if @restart_server_message %>
100
+ <tr>
101
+ <td align = 'left'>
102
+ <span id='error_div'>
103
+ <%= @restart_server_message%>
104
+ </span>
105
+ </td>
106
+ </tr>
107
+ <% end %>
108
+ <tr>
109
+ <td align = 'right'>
110
+ <%=link_to_remote "Add Expires By Type", :update => 'expires_by_type_form', :url => {:controller => 'headers', :action => 'add_expires_by_type_form'} %>
111
+ </td>
112
+ </tr>
113
+ </table>
@@ -0,0 +1,168 @@
1
+ <!--
2
+ WebROaR - Ruby Application Server - http://webroar.in/
3
+ Copyright (C) 2009 Goonj LLC
4
+
5
+ This file is part of WebROaR.
6
+
7
+ WebROaR is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ WebROaR is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with WebROaR. If not, see <http://www.gnu.org/licenses/>.
19
+ -->
20
+
21
+ <% if File.exist?(MAIL_FILE_PATH) and info = YAML::load_file(MAIL_FILE_PATH) %>
22
+ <% if info['smtp'] %>
23
+ <table width = 95%>
24
+ <tr>
25
+ <td class = 'table_header_link' width = 50% colspan = 2>
26
+ <b>Mail Settings :- SMTP</b>&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function('Help', :onclick => 'addHelp("mail");') %></span>
27
+ <br/>
28
+ <div id = 'mail' class = 'font_size_12'>
29
+ </div>
30
+ </td>
31
+ <td class = 'table_header_link' width = 50% colspan = 2 align = 'right'>
32
+ <%=link_to_remote 'Sendmail', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'sendmail_form'} %>&nbsp;&nbsp;&nbsp;
33
+ <%=link_to_remote 'Edit', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'edit_smtp', :smtp => info['smtp']} %>&nbsp;&nbsp;&nbsp;
34
+ <% if info['email_notification'] and info['email_notification'].downcase == 'disabled' %>
35
+ <%=link_to_remote 'Enable', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'enable_notification'}, :confirm => ENABLE_EMAIL_NOTIFICATION, :oncontextmenu => 'return false;' %>
36
+ <% elsif info['email_notification'] and info['email_notification'].downcase == 'enabled' %>
37
+ <%=link_to_remote 'Disable', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'disable_notification'}, :confirm => DISABLE_EMAIL_NOTIFICATION, :oncontextmenu => 'return false;' %>
38
+ <% end %>
39
+ </td>
40
+ </tr>
41
+ <tr>
42
+ <td class = 'BG_dark_gray' width = 25%>
43
+ Server
44
+ </td>
45
+ <td class = 'BG_dark_gray' width = 25%>
46
+ <%=info['smtp']['address'] %>
47
+ </td>
48
+ <td class = 'BG_dark_gray' width = 25%>
49
+ Port
50
+ </td>
51
+ <td class = 'BG_dark_gray' width = 25%>
52
+ <%=info['smtp']['port'] %>
53
+ </td>
54
+ </tr>
55
+ <tr>
56
+ <td class = 'BG_white'>
57
+ Domain
58
+ </td>
59
+ <td class = 'BG_white'>
60
+ <%=info['smtp']['domain'] %>
61
+ </td>
62
+ <td class = 'BG_white'>
63
+ Authenitcation
64
+ </td>
65
+ <td class = 'BG_white'>
66
+ <%=info['smtp']['authentication'] %>
67
+ </td>
68
+ </tr>
69
+ <tr>
70
+ <td class = 'BG_dark_gray'>
71
+ User Name
72
+ </td>
73
+ <td class = 'BG_dark_gray'>
74
+ <%=info['smtp']['user_name'] %>
75
+ </td>
76
+ <td class = 'BG_dark_gray'>
77
+ Password
78
+ </td>
79
+ <td class = 'BG_dark_gray'>
80
+ **************
81
+ </td>
82
+ </tr>
83
+ <tr>
84
+ <td class = 'BG_white'>
85
+ Sender's Email Address
86
+ </td>
87
+ <td class = 'BG_white'>
88
+ <%=info['smtp']['from'] %>
89
+ </td>
90
+ <td class = 'BG_white'>
91
+ Recipient Email Addresses
92
+ </td>
93
+ <td class = 'BG_white'>
94
+ <%=info['smtp']['recipients'] %>
95
+ </td>
96
+ </tr>
97
+ <tr>
98
+ </tr>
99
+ </table>
100
+ <br/>
101
+ <br/>
102
+ <% elsif info['sendmail'] %>
103
+ <table width = 95%>
104
+ <tr>
105
+ <td class = 'table_header_link' width = 50%>
106
+ <b>Mail Settings :- Sendmail</b>&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function('Help', :onclick => 'addHelp("mail");') %></span>
107
+ <br/>
108
+ <div id = 'mail' class = 'font_size_12'>
109
+ </div>
110
+ </td>
111
+ <td class = 'table_header_link' width = 50% colspan = 2 align = 'right'>
112
+ <%=link_to_remote 'SMTP', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'smtp_form'} %>&nbsp;&nbsp;&nbsp;
113
+ <%=link_to_remote 'Edit', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'edit_sendmail', :sendmail => info['sendmail']} %>&nbsp;&nbsp;&nbsp;
114
+ <% if info['email_notification'] and info['email_notification'].downcase == 'disabled' %>
115
+ <%=link_to_remote 'Enable', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'enable_notification'}, :confirm => ENABLE_EMAIL_NOTIFICATION, :oncontextmenu => 'return false;' %>
116
+ <% elsif info['email_notification'] and info['email_notification'].downcase == 'enabled' %>
117
+ <%=link_to_remote 'Disable', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'disable_notification'}, :confirm => DISABLE_EMAIL_NOTIFICATION, :oncontextmenu => 'return false;' %>
118
+ <% end %>
119
+ </td>
120
+ </tr>
121
+ <tr>
122
+ <td class = 'BG_dark_gray' width = 50%>
123
+ Location
124
+ </td>
125
+ <td colspan = 2 class = 'BG_dark_gray'width = 50%>
126
+ <%=info['sendmail']['location']%>
127
+ </td>
128
+ </tr>
129
+ <tr>
130
+ <td class = 'BG_white'>
131
+ Sender's Email Address
132
+ </td>
133
+ <td colspan = 2 class = 'BG_white'>
134
+ <%=info['sendmail']['from'] %>
135
+ </td>
136
+ </tr>
137
+ <tr>
138
+ <td class = 'BG_dark_gray'>
139
+ Recipient Email Addresses
140
+ </td>
141
+ <td colspan = 2 class = 'BG_dark_gray'>
142
+ <%=info['sendmail']['recipients'] %>
143
+ </td>
144
+ </tr>
145
+ </table>
146
+ <br/>
147
+ <br/>
148
+ <% end %>
149
+ <% else %>
150
+ <table width = 95%>
151
+ <tr>
152
+ <td class = 'table_header_link' width = 80%>
153
+ <b>Mail Settings</b>&nbsp;&nbsp;&nbsp;<span class = 'help_link'><%=link_to_function('Help', :onclick => 'addHelp("mail");') %></span>
154
+ <br/>
155
+ <div id = 'mail' class = 'font_size_12'>
156
+ </div>
157
+ </td>
158
+ <td class = 'table_header_link' width = 10%>
159
+ <%=link_to_remote 'SMTP', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'smtp_form'} %>
160
+ </td>
161
+ <td class = 'table_header_link' width = 10%>
162
+ <%=link_to_remote 'Sendmail', :update => 'mail_div', :url => {:controller => 'mail_specification', :action => 'sendmail_form'} %>
163
+ </td>
164
+ </tr>
165
+ </table>
166
+ <br/>
167
+ <br/>
168
+ <% end %>
@@ -35,7 +35,7 @@ along with WebROaR. If not, see <http://www.gnu.org/licenses/>.
35
35
  <%end%>
36
36
  </span>
37
37
  <span style = "height:20px;float:right;">
38
- <%remote_form_for :cancel, :update => params[:div_id], :url => {:action => 'cancel_edit', :div_id => params[:div_id], :old_value => old_value}do%>
38
+ <%remote_form_for :cancel, :update => params[:div_id], :url => {:controller => 'server_specification', :action => 'cancel_edit', :div_id => params[:div_id], :old_value => old_value}do%>
39
39
  <%=submit_tag 'Cancel'%>
40
40
  <%end%>
41
41
  </span>
@@ -146,3 +146,9 @@ RACK = 'rack'
146
146
  CLOSED_EXCEPTION = 0
147
147
  OPEN_EXCEPTION = 1
148
148
  IGNORED_EXCEPTION = 2
149
+
150
+ ENABLE_EMAIL_NOTIFICATION = 'Are you sure, enable email notification for the exceptions?'
151
+ DISABLE_EMAIL_NOTIFICATION = 'Are you sure, disable email notificaion for the exceptions? This would still captures exceptions and stores into database.'
152
+
153
+ EXPIRES_VALIDATION = "Possible value for expires is off or no. of seconds."
154
+ EMPTY_STRING = "Value is empty string."
@@ -79,11 +79,14 @@ class Control
79
79
  streamSock.send(@req.request, 0)
80
80
  start_time = DateTime.parse(Time.now.strftime("%a %b %d %H:%M:%S %Y"))
81
81
  str = streamSock.recv(2048)
82
- end_time = DateTime.parse(Time.now.strftime("%a %b %d %H:%M:%S %Y"))
83
- streamSock.close
84
82
  @resp = SCGI.new
85
83
  @resp.parse(str)
86
-
84
+ until @resp.parsing_done?
85
+ str = streamSock.recv(2048)
86
+ @resp.parse(str)
87
+ end
88
+ end_time = DateTime.parse(Time.now.strftime("%a %b %d %H:%M:%S %Y"))
89
+ streamSock.close
87
90
  if @resp.header("STATUS") == "OK" or @resp.header("STATUS") == "ok"
88
91
  return nil, nil
89
92
  else
@@ -18,17 +18,28 @@
18
18
  # along with WebROaR. If not, see <http://www.gnu.org/licenses/>.
19
19
  #++
20
20
 
21
+ require 'jcode' if RUBY_VERSION.gsub(/\D/,'').to_i < 187
21
22
  #This class contructs and parse the SCGI request.
22
23
  class SCGI
23
- @hash #Instance variable to store SCGI headers.
24
- @request #Instance variable to store SCGI request in single string value.
25
- @body #Instance variable to store SCGI request body.
26
-
24
+ # @hash #Instance variable to store SCGI headers.
25
+ # @request #Instance variable to store SCGI request in single string value.
26
+ # @body #Instance variable to store SCGI request body.
27
+
27
28
  #This is the constructor function for SCGI class.
28
29
  def initialize
29
30
  @hash = Hash.new
31
+ @body = ''
32
+ @tmp_headers_length = ''
33
+ @headers_length = 0
34
+ @curr_state = :SCGI_NONE
35
+ @curr_key = ''
36
+ @curr_value = ''
37
+ @done = false
30
38
  end
31
39
 
40
+ def parsing_done?
41
+ @done
42
+ end
32
43
  #Getter setter for request in SCGI class.
33
44
  def request
34
45
  @request
@@ -46,7 +57,7 @@ class SCGI
46
57
 
47
58
  #Adds SCGI request body.
48
59
  def body_add(body)
49
- @body = body
60
+ @body += body
50
61
  end
51
62
 
52
63
  #Getter method for receiving SCGI headers.
@@ -56,7 +67,7 @@ class SCGI
56
67
 
57
68
  #Construct SCGI request.
58
69
  def build
59
- if(@body == nil)
70
+ if(@body == '')
60
71
  @request = "CONTENT_LENGTH\0"+"0"+"\0"
61
72
  else
62
73
  @request = "CONTENT_LENGTH\0#{body.length}\0"
@@ -79,19 +90,61 @@ class SCGI
79
90
  end
80
91
 
81
92
  #Parse the string and build SCGI request.
82
- def parse(req)
83
- arr = req.split(":")
84
- key = ""
85
- len = arr[0] #TODO if len.to_i == 0 then error
86
- arr = arr[1].split("\0", len.to_i)
87
- arr.each_index {|i|
88
- if(i % 2 == 0)
89
- key = arr[i]
90
- else
91
- header_add(key, arr[i])
92
- end
93
- }
94
- arr = arr[-1].split(",")
95
- body_add(arr[-1])
96
- end
93
+ def parse(req)
94
+ index = 0
95
+ req.each_char do |c|
96
+ case @curr_state
97
+ when :SCGI_NONE
98
+ if c == ':'
99
+ @headers_length = @tmp_headers_length.to_i
100
+ @curr_state = :HEADER_KEY
101
+ elsif c < '0' or c > '9'
102
+ @curr_state = :INVALID
103
+ else
104
+ @tmp_headers_length += c
105
+ end
106
+ when :HEADER_KEY
107
+ if c == "\0"
108
+ @curr_state = :HEADER_VAL
109
+ elsif c == ","
110
+ if header('CONTENT_LENGTH').to_i == 0
111
+ @done = true
112
+ @curr_state = :DONE
113
+ else
114
+ @curr_state = :BODY
115
+ body_add(req[index+1, req.length])
116
+ if @body.length == header('CONTENT_LENGTH').to_i
117
+ @curr_state = :DONE
118
+ @done = true
119
+ else
120
+ @curr_state = :BODY
121
+ end
122
+ break
123
+ end
124
+ else
125
+ @curr_key += c
126
+ end
127
+ when :HEADER_VAL
128
+ if c == "\0"
129
+ header_add(@curr_key, @curr_value)
130
+ @curr_key = ''
131
+ @curr_value = ''
132
+ @curr_state = :HEADER_KEY
133
+ else
134
+ @curr_value += c
135
+ end
136
+ when :BODY
137
+ body_add(req[index, req.length])
138
+ if @body.length == header('CONTENT_LENGTH').to_i
139
+ @curr_state = :DONE
140
+ @done = true
141
+ end
142
+ break
143
+ when :DONE
144
+ @done = true
145
+ return
146
+ end
147
+ index += 1
148
+ end
149
+ end
97
150
  end
@@ -18,6 +18,13 @@
18
18
  # along with WebROaR. If not, see <http://www.gnu.org/licenses/>.
19
19
  #++
20
20
 
21
+ module YAMLConfig
22
+ CONFIG = 1
23
+ USER = 2
24
+ SMTP = 3
25
+ SENDMAIL = 4
26
+ end
27
+
21
28
  class YAMLWriter
22
29
 
23
30
  class << self
@@ -26,7 +33,7 @@ class YAMLWriter
26
33
  def write(hash, file_path, type)
27
34
  yaml_obj = YAML::dump(hash)
28
35
  file = File.open(file_path,"w")
29
- if type == "config"
36
+ if type == YAMLConfig::CONFIG
30
37
  header_string = get_header()
31
38
  file.puts(header_string)
32
39
  end
@@ -85,6 +92,9 @@ class YAMLWriter
85
92
  # 9) Logging level(optional)(default is 'Server Specification/log_level')
86
93
  # 10) Run as user (mandatory)
87
94
  # 11) Hostnames(optional)
95
+ # 12) Environment Variable(optional)
96
+ # It defines environment variables which can be used in the deployed application. It take following parameter.
97
+ # I) set_env(optional)(Value is key-value pair separated by equal sign('=') e.g. LOG_DIR=/var/log/webroar)
88
98
  # Order of the above elements does not matter.
89
99
  # Base-uri 'admin-panel' is reserved for 'Admin Panel'.
90
100
  # Either host_names or baseuri(not both) must present to resolve HTTP request.
@@ -103,6 +113,9 @@ class YAMLWriter
103
113
  # min_worker: 2
104
114
  # max_worker: 5
105
115
  # log_level: SEVERE
116
+ # environment_variables:
117
+ # - set_env: LOG_DIR=/var/log/webroar
118
+ # - set_env: TMP_DIR=/tmp
106
119
  # Example with host_names:
107
120
  # Application Specification:
108
121
  # - name: Mephisto
@@ -115,24 +128,45 @@ class YAMLWriter
115
128
  # min_worker: 2
116
129
  # max_worker: 5
117
130
  # log_level: SEVERE
118
- # (c) Headers (optional)
119
- # It allows adding or changing the Expires and Cache-Control in the response headers for static assets (e.g. *.js, *.gif etc).
120
- # Elements:
121
- # 1) Expires header for all static assets (optional) (default is 'off')
122
- # 2) Specific expires header for specific file types (optional)
123
- # Elements:
124
- # I) File Extensions(mandatory)
125
- # II) Expires value(mandatory) (No of seconds)
126
- # Possible value for expires is off or no. of seconds.
127
- # Example:
128
- # Headers:
129
- # expires: 3600
130
- # expires_by_type:
131
- # - ext: png, jpg, gif
132
- # expires: 31536000
131
+ # environment_variables:
132
+ # - set_env: LOG_DIR=/var/log/webroar
133
+ # - set_env: TMP_DIR=/tmp
134
+ #
135
+ # (c) Headers (optional)
136
+ # It allows adding or changing the Expires and Cache-Control in the response headers for static assets (e.g. *.js, *.gif etc).
137
+ # Elements:
138
+ # 1) Expires header for all static assets (optional) (default is 'off')
139
+ # 2) Specific expires header for specific file types (optional)
140
+ # Elements:
141
+ # I) File Extensions(mandatory)
142
+ # II) Expires value(mandatory) (No of seconds)
143
+ # Possible value for expires is off or no. of seconds.
144
+ # Example:
145
+ # Headers:
146
+ # expires: 3600
147
+ # expires_by_type:
148
+ # - ext: png, jpg, gif
149
+ # expires: 31536000
150
+ #
151
+ # (d) Encoding (optional)
152
+ # It allows (deflate) encoding of static assets.
153
+ # Elements:
154
+ # 1) Regex value for supported Content-Type (optional) (default is 'text|xml')
155
+ # 2) Regex value for supported Used-Agent (optional) (default is '.*')
156
+ # 3) Range of Content-Length (optional)
157
+ # Elements:
158
+ # I) Lower limit of Content-Length (optional) (default is 1024 i.e. 1KB)
159
+ # II) Upper limit of Content-Length (optional) (default is 12328960 i.e. 10MB)
160
+ # Example:
161
+ # Encoding:
162
+ # Content-Type: text|xml|javascript
163
+ # User-Agent: .*
164
+ # Size Limit:
165
+ # lower_limit: 2094
166
+ # upper_limit: 12328960
133
167
  #
134
168
  ######################################################################################"
135
169
  end
136
170
  end
137
171
 
138
- end
172
+ end #end YAMLWriter
@@ -143,8 +143,27 @@ function addHelp(id)
143
143
  if(id=='sendmail_location')
144
144
  {
145
145
  str="Location of the sendmail agent e.g. /usr/sbin/sendmail"
146
+ }
147
+ if (id == 'headers')
148
+ {
149
+ str = "It allows adding or changing the Expires and Cache-Control in the response headers for static assets (e.g. *.js, *.gif etc)."
150
+ }
151
+ if (id == 'expires')
152
+ {
153
+ str = "Expires header for all static assets (optional) (default is 'off'). Possible value for expires is off or no. of seconds."
154
+ }
155
+ if (id == 'expires_by_type')
156
+ {
157
+ str = "Specific expires header for specific file types."
158
+ }
159
+ if (id == 'expires_by_type_ext')
160
+ {
161
+ str = 'File extensions separated by comma (e.g png, jpg, gif).'
162
+ }
163
+ if (id == 'expires_by_type_expires_value')
164
+ {
165
+ str = "Expires value in no. of seconds."
146
166
  }
147
-
148
167
  if(id=='runasuser')
149
168
  {
150
169
  str=str+"<div style='width:99%;text-align:right'><a href=# onClick=\" $('application_specification_type1').show(); $('application_specification_analytics').show(); $('"+id+"').hide(); return false;\" class='calendar_link'>Close</a></div>"
@@ -21,7 +21,7 @@
21
21
  #include<time.h>
22
22
  #include <wr_access_log.h>
23
23
 
24
- static inline void get_date_time(char *str_time, int str_time_len) {
24
+ void get_date_time1(char *str_time, int str_time_len) {
25
25
  struct tm *now =NULL;
26
26
  time_t time_value =0;
27
27
 
@@ -41,7 +41,7 @@ int wr_access_log(wr_req_t* req) {
41
41
 
42
42
  if(fp) {
43
43
  char str_time[32];
44
- get_date_time(str_time, 32);
44
+ get_date_time1(str_time, 32);
45
45
  const char *method = scgi_header_value_get(req->scgi, WR_EBB_REQ_METHOD);
46
46
  const char *uri = scgi_header_value_get(req->scgi, WR_EBB_REQ_URI);
47
47
  const char *http_version = scgi_header_value_get(req->scgi, WR_EBB_HTTP_VER);