hydroponics 0.3.3 → 0.3.4
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.
- data/ChangeLog.markdown +6 -0
- data/VERSION +1 -1
- data/app/views/dupe.erb +49 -0
- data/app/views/foreign_dupe.erb +59 -0
- data/app/views/single/index.erb +31 -0
- data/config/hydro_app.rb +2 -1
- data/hydroponics.gemspec +11 -4
- data/spec/hydro_app_spec.rb +1 -1
- data/static/dupe.css +57 -0
- data/static/dupe.js +4 -5
- data/static/vendor/esapi4js/esapi-compressed.js +11 -0
- data/static/vendor/esapi4js/lib/log4js-lib.js +1 -0
- data/static/vendor/esapi4js/lib/log4js.js +2501 -0
- data/static/vendor/esapi4js/resources/Base.esapi.properties.js +68 -0
- data/static/vendor/esapi4js/resources/i18n/ESAPI_Standard_en_US.properties.js +50 -0
- metadata +13 -6
- data/app/views/dupe/index.erb +0 -99
- data/app/views/foreign_dupe/index.erb +0 -111
@@ -0,0 +1,68 @@
|
|
1
|
+
/*
|
2
|
+
* OWASP Enterprise Security API (ESAPI)
|
3
|
+
*
|
4
|
+
* This file is part of the Open Web Application Security Project (OWASP)
|
5
|
+
* Enterprise Security API (ESAPI) project. For details, please see
|
6
|
+
* <a href="http://www.owasp.org/index.php/ESAPI">http://www.owasp.org/index.php/ESAPI</a>.
|
7
|
+
*
|
8
|
+
* Copyright (c) 2008 - The OWASP Foundation
|
9
|
+
*
|
10
|
+
* The ESAPI is published by OWASP under the BSD license. You should read and accept the
|
11
|
+
* LICENSE before you use, modify, and/or redistribute this software.
|
12
|
+
*/
|
13
|
+
|
14
|
+
$namespace('Base.esapi.properties');
|
15
|
+
|
16
|
+
Base.esapi.properties = {
|
17
|
+
application: {
|
18
|
+
// Change this value to reflect your application, or override it in an application scoped configuration.
|
19
|
+
Name: 'ESAPI4JS Base Application'
|
20
|
+
},
|
21
|
+
|
22
|
+
httputilities: {
|
23
|
+
cookies: {
|
24
|
+
ForceSecure: true
|
25
|
+
}
|
26
|
+
},
|
27
|
+
|
28
|
+
logging: {
|
29
|
+
Implementation: org.owasp.esapi.reference.logging.Log4JSLogFactory,
|
30
|
+
Level: org.owasp.esapi.Logger.ERROR,
|
31
|
+
// For a console that pops up in a seperate window
|
32
|
+
// Appenders: [ new ConsoleAppender(true) ],
|
33
|
+
// To log to a logging service on the server
|
34
|
+
// Appenders: [ new AjaxAppender( '/log/' ) ],
|
35
|
+
// Default to log nowhere
|
36
|
+
Appenders: [ ],
|
37
|
+
LogUrl: false,
|
38
|
+
LogApplicationName: false,
|
39
|
+
EncodingRequired: true
|
40
|
+
},
|
41
|
+
|
42
|
+
encoder: {
|
43
|
+
Implementation: org.owasp.esapi.reference.encoding.DefaultEncoder,
|
44
|
+
AllowMultipleEncoding: false
|
45
|
+
},
|
46
|
+
|
47
|
+
localization: {
|
48
|
+
StandardResourceBundle: ESAPI_Standard_en_US,
|
49
|
+
DefaultLocale: 'en-US'
|
50
|
+
},
|
51
|
+
|
52
|
+
validation: {
|
53
|
+
Implementation: org.owasp.esapi.reference.validation.DefaultValidator,
|
54
|
+
AccountName: '^[a-zA-Z0-9]{3,20}$',
|
55
|
+
SafeString: '[a-zA-Z0-9\\-_+]*',
|
56
|
+
Email: '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$',
|
57
|
+
IPAddress: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$',
|
58
|
+
URL: '^(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\:\\\'\\/\\\\\\+=&%\\$#_]*)?$',
|
59
|
+
CreditCard: '^(\\d{4}[- ]?){3}\\d{4}$',
|
60
|
+
SSN: '^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$',
|
61
|
+
HttpScheme: '^(http|https)$',
|
62
|
+
HttpServerName: '^[a-zA-Z0-9_.\\-]*$',
|
63
|
+
HttpParameterName: '^[a-zA-Z0-9_]{1,32}$',
|
64
|
+
HttpParameterValue: '^[a-zA-Z0-9.\\-\\/+=_ ]*$',
|
65
|
+
HttpCookieName: '^[a-zA-Z0-9\\-_]{1,32}$',
|
66
|
+
HttpCookieValue: '^[a-zA-Z0-9\\-\\/+=_ ]*$'
|
67
|
+
}
|
68
|
+
};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
var ESAPI_Standard_en_US = {
|
2
|
+
name: 'ESAPI Standard Messages - US English',
|
3
|
+
locale: 'en-US',
|
4
|
+
messages: {
|
5
|
+
"Test" : "This is test #{testnumber}",
|
6
|
+
|
7
|
+
// Messages for validation
|
8
|
+
"CreditCard.Required.Usr" : "{context}: Input credit card required",
|
9
|
+
"CreditCard.Required.Log" : "Input credit card required: context={context}, input={input}",
|
10
|
+
"CreditCard.Invalid.Usr" : "{context}: Invalid credit card input",
|
11
|
+
"CreditCard.Invalid.Log" : "Invalid credit card input: context={context}, input={input}",
|
12
|
+
"Date.Required.Usr" : "{context}: Input date required in {format} format",
|
13
|
+
"Date.Required.Log" : "Date required: context={context}, input={input}, format={format}",
|
14
|
+
"Date.Invalid.Usr" : "{context}: Invalid date, please use {format} format",
|
15
|
+
"Date.Invalid.Log" : "Invalid date: context={context}, input={input}, format={format}",
|
16
|
+
"Integer.Required.Usr" : "{context}: Input number required",
|
17
|
+
"Integer.Required.Log" : "Input number required: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
18
|
+
"Integer.NaN.Usr" : "{context}: Invalid number",
|
19
|
+
"Integer.NaN.Log" : "Invalid number: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
20
|
+
"Integer.MinValue.Usr" : "{context}: Invalid number - Must be greater than {minValue}",
|
21
|
+
"Integer.MinValue.Log" : "Invalid number: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
22
|
+
"Integer.MaxValue.Usr" : "{context}: Invalid number - Must be less than {maxValue}",
|
23
|
+
"Integer.MaxValue.Log" : "Invalid number: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
24
|
+
"Number.Required.Usr" : "{context}: Input number required",
|
25
|
+
"Number.Required.Log" : "Input number required: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
26
|
+
"Number.NaN.Usr" : "{context}: Invalid number",
|
27
|
+
"Number.NaN.Log" : "Invalid number: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
28
|
+
"Number.MinValue.Usr" : "{context}: Invalid number - Must be greater than {minValue}",
|
29
|
+
"Number.MinValue.Log" : "Invalid number: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
30
|
+
"Number.MaxValue.Usr" : "{context}: Invalid number - Must be less than {maxValue}",
|
31
|
+
"Number.MaxValue.Log" : "Invalid number: context={context}, input={input}, minValue={minValue}, maxValue={maxValue}",
|
32
|
+
"String.Required.Usr" : "{context}: Input required",
|
33
|
+
"String.Required.Log" : "Input required: context={context}, input={input}, original={orig}",
|
34
|
+
"String.Whitelist.Usr" : "{context}: Invalid input - Conform to regex {pattern}",
|
35
|
+
"String.Whitelist.Log" : "Invalid input - Whitelist validation failed: context={context}, input={input}, original={orig}, pattern={pattern}",
|
36
|
+
"String.Blacklist.Usr" : "{context}: Invalid input - Dangerous input matching {pattern} detected",
|
37
|
+
"String.Blacklist.Log" : "Invalid input - Blacklist validation failed: context={context}, input={input}, original={orig}, pattern={pattern}",
|
38
|
+
"String.MinLength.Usr" : "{context}: Invalid input - Minimum length is {minLength}",
|
39
|
+
"String.MinLength.Log" : "Invalid input - Too short: context={context}, input={input}, original={orig}, minLength={minLength}",
|
40
|
+
"String.MaxLength.Usr" : "{context}: Invalid input - Maximum length is {maxLength}",
|
41
|
+
"String.MaxLength.Log" : "Invalid input - Too long: context={context}, input={input}, original={orig}, maxLength={maxLength}",
|
42
|
+
|
43
|
+
// Error Messages for Exceptions
|
44
|
+
"HTTPUtilities.Cookie.Protocol" : "Cookies disallowed on non http[s] requests. Current protocol: {protocol}",
|
45
|
+
"HTTPUtilities.Cookie.UnsafeData" : "Attempt to add unsafe data to cookie (skip mode) - Cookie: {name}={value}",
|
46
|
+
"HTTPUtilities.Cookie.CantKill" : "Unable to kill cookie named {name}",
|
47
|
+
"Cookie.Name" : "Cookie name \"{name}\" is a reserved token",
|
48
|
+
"Cookie.Version" : "Cookie version \"{version}\" is not a valid version. Version must be 0 or 1."
|
49
|
+
}
|
50
|
+
};
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydroponics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 4
|
10
|
+
version: 0.3.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tyler Boyd
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-15 00:00:00 -05:00
|
19
19
|
default_executable: hydro
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -139,8 +139,9 @@ files:
|
|
139
139
|
- VERSION
|
140
140
|
- app/actions/dupe.rb
|
141
141
|
- app/actions/foreigndupe.rb
|
142
|
-
- app/views/dupe
|
143
|
-
- app/views/foreign_dupe
|
142
|
+
- app/views/dupe.erb
|
143
|
+
- app/views/foreign_dupe.erb
|
144
|
+
- app/views/single/index.erb
|
144
145
|
- bin/hydro
|
145
146
|
- config/hydro_app.rb
|
146
147
|
- hydroponics.gemspec
|
@@ -152,9 +153,15 @@ files:
|
|
152
153
|
- spec/spec.opts
|
153
154
|
- spec/spec_helper.rb
|
154
155
|
- static/ajax-loader.gif
|
156
|
+
- static/dupe.css
|
155
157
|
- static/dupe.js
|
156
158
|
- static/test/dupe_test.js
|
157
159
|
- static/test/index.html
|
160
|
+
- static/vendor/esapi4js/esapi-compressed.js
|
161
|
+
- static/vendor/esapi4js/lib/log4js-lib.js
|
162
|
+
- static/vendor/esapi4js/lib/log4js.js
|
163
|
+
- static/vendor/esapi4js/resources/Base.esapi.properties.js
|
164
|
+
- static/vendor/esapi4js/resources/i18n/ESAPI_Standard_en_US.properties.js
|
158
165
|
- static/vendor/jquery-ui-1.8.5.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
|
159
166
|
- static/vendor/jquery-ui-1.8.5.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
|
160
167
|
- static/vendor/jquery-ui-1.8.5.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
|
data/app/views/dupe/index.erb
DELETED
@@ -1,99 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
4
|
-
|
5
|
-
<head>
|
6
|
-
<link href="../vendor/jquery-ui-1.8.5.custom/css/smoothness/jquery-ui-1.8.5.custom.css" media="screen" rel="stylesheet" type="text/css" />
|
7
|
-
<script type="text/javascript" src="../vendor/jquery-ui-1.8.5.custom/js/jquery-1.4.2.min.js"></script>
|
8
|
-
<script type="text/javascript" src="../vendor/jquery-ui-1.8.5.custom/js/jquery-ui-1.8.5.custom.min.js"></script>
|
9
|
-
<script type="text/javascript">
|
10
|
-
$(function(){
|
11
|
-
$("#slider div").slider({
|
12
|
-
slide: function(event, ui) {
|
13
|
-
$("#sliderct").html("<i>" + ui.value + "</i>");
|
14
|
-
$("button").button("enable");
|
15
|
-
},
|
16
|
-
max: 25000,
|
17
|
-
value: <%= db[@table].count %>
|
18
|
-
});
|
19
|
-
|
20
|
-
$("button").button();
|
21
|
-
$("button").button("enable");
|
22
|
-
$("button").click(function(){
|
23
|
-
$("#slider div").slider("disable");
|
24
|
-
$("button").button("disable");
|
25
|
-
$(".loader").show();
|
26
|
-
$.ajax({
|
27
|
-
type: "POST",
|
28
|
-
url: "/dupe/<%= @table %>",
|
29
|
-
data: JSON.stringify({
|
30
|
-
count: $("#slider div").slider("value")
|
31
|
-
}),
|
32
|
-
success: function(data, status, xhr) {
|
33
|
-
$("#sliderct").html("<b>" + data + "</b>");
|
34
|
-
$("#slider div").slider("enable");
|
35
|
-
$(".loader").hide();
|
36
|
-
},
|
37
|
-
processData: false
|
38
|
-
});
|
39
|
-
});
|
40
|
-
});
|
41
|
-
</script>
|
42
|
-
<style type="text/css">
|
43
|
-
.container {width:950px;margin:0 auto;}
|
44
|
-
.dupe h3 {
|
45
|
-
margin: 10px 5px 10px 18px;
|
46
|
-
color: #444;
|
47
|
-
float: left;
|
48
|
-
}
|
49
|
-
.dupe #slider {
|
50
|
-
float: left;
|
51
|
-
width: 352px;
|
52
|
-
margin: 16px 12px;
|
53
|
-
}
|
54
|
-
.dupecontainer {
|
55
|
-
height: 130px;
|
56
|
-
width: 501px;
|
57
|
-
}
|
58
|
-
.dupe {
|
59
|
-
height: 106px;
|
60
|
-
width: 500px;
|
61
|
-
border: 1px #ddd solid;
|
62
|
-
}
|
63
|
-
.dupe #button {
|
64
|
-
float: right;
|
65
|
-
margin: 2px 12px;
|
66
|
-
}
|
67
|
-
.dupe p {
|
68
|
-
padding: 50px 18px;
|
69
|
-
font-size: 12px;
|
70
|
-
}
|
71
|
-
h1, h3, p {
|
72
|
-
font-family: Verdana,Arial,sans-serif
|
73
|
-
}
|
74
|
-
.loader {
|
75
|
-
background-image: url('../ajax-loader.gif');
|
76
|
-
width: 32px;
|
77
|
-
height: 16px;
|
78
|
-
margin-top:16px;
|
79
|
-
float: left;
|
80
|
-
}
|
81
|
-
</style>
|
82
|
-
<title>Hydroponics <%= settings.version %></title>
|
83
|
-
</head>
|
84
|
-
|
85
|
-
<body class="container">
|
86
|
-
<div class="header">
|
87
|
-
<h1>Hydroponics</h1>
|
88
|
-
</div>
|
89
|
-
<div class="dupecontainer">
|
90
|
-
<div class="dupe">
|
91
|
-
<h3>Dupe</h3>
|
92
|
-
<div id='slider'><div></div></div>
|
93
|
-
<div class="loader" style="display:none;"></div>
|
94
|
-
<div id='button'><button>Update</button></div>
|
95
|
-
<p><%= @table.to_s.gsub("_"," ") %>: <span id='sliderct'><%= db[@table].count %></span></p>
|
96
|
-
</div>
|
97
|
-
</div>
|
98
|
-
</body>
|
99
|
-
</html>
|
@@ -1,111 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
4
|
-
|
5
|
-
<head>
|
6
|
-
<link href="../vendor/jquery-ui-1.8.5.custom/css/smoothness/jquery-ui-1.8.5.custom.css" media="screen" rel="stylesheet" type="text/css" />
|
7
|
-
<script type="text/javascript" src="../vendor/jquery-ui-1.8.5.custom/js/jquery-1.4.2.min.js"></script>
|
8
|
-
<script type="text/javascript" src="../vendor/jquery-ui-1.8.5.custom/js/jquery-ui-1.8.5.custom.min.js"></script>
|
9
|
-
<script type="text/javascript">
|
10
|
-
$(function(){
|
11
|
-
$("#slider div").slider({
|
12
|
-
slide: function(event, ui) {
|
13
|
-
$("#sliderct").html("<i>" + ui.value + "</i>");
|
14
|
-
$("button").button("enable");
|
15
|
-
},
|
16
|
-
max: 25000,
|
17
|
-
value: <%= db[@table].count %>
|
18
|
-
});
|
19
|
-
|
20
|
-
$("button").button();
|
21
|
-
$("button").button("enable");
|
22
|
-
$("button").click(function(){
|
23
|
-
$("#slider div").slider("disable");
|
24
|
-
$("button").button("disable");
|
25
|
-
$(".loader").show();
|
26
|
-
|
27
|
-
var postData = {
|
28
|
-
count: $("#slider div").slider("value"),
|
29
|
-
foreign_table: "<%= params[:foreign_table] %>"
|
30
|
-
};
|
31
|
-
if($("#foreign_key").val() != "") {
|
32
|
-
postData.foreign_key = $("#foreign_key").val()
|
33
|
-
}
|
34
|
-
|
35
|
-
$.ajax({
|
36
|
-
type: "POST",
|
37
|
-
url: "/foreign_dupe/<%= @table %>",
|
38
|
-
data: JSON.stringify(postData),
|
39
|
-
success: function(data, status, xhr) {
|
40
|
-
$("#sliderct").html("<b>" + data + "</b>");
|
41
|
-
$("#slider div").slider("enable");
|
42
|
-
$(".loader").hide();
|
43
|
-
},
|
44
|
-
processData: false
|
45
|
-
});
|
46
|
-
});
|
47
|
-
});
|
48
|
-
</script>
|
49
|
-
<style type="text/css">
|
50
|
-
.container {width:950px;margin:0 auto;}
|
51
|
-
.dupe h3 {
|
52
|
-
margin: 10px 5px 10px 18px;
|
53
|
-
color: #444;
|
54
|
-
float: left;
|
55
|
-
}
|
56
|
-
.dupe #slider {
|
57
|
-
float: left;
|
58
|
-
width: 252px;
|
59
|
-
margin: 16px 12px;
|
60
|
-
}
|
61
|
-
.dupecontainer {
|
62
|
-
height: 130px;
|
63
|
-
width: 501px;
|
64
|
-
}
|
65
|
-
.dupe {
|
66
|
-
height: 106px;
|
67
|
-
width: 500px;
|
68
|
-
border: 1px #ddd solid;
|
69
|
-
}
|
70
|
-
.dupe #button {
|
71
|
-
float: right;
|
72
|
-
margin: 2px 12px;
|
73
|
-
}
|
74
|
-
.dupe p {
|
75
|
-
padding: 50px 18px;
|
76
|
-
font-size: 12px;
|
77
|
-
}
|
78
|
-
h1, h3, p {
|
79
|
-
font-family: Verdana,Arial,sans-serif
|
80
|
-
}
|
81
|
-
.loader {
|
82
|
-
background-image: url('../ajax-loader.gif');
|
83
|
-
width: 32px;
|
84
|
-
height: 16px;
|
85
|
-
margin-top:16px;
|
86
|
-
float: left;
|
87
|
-
}
|
88
|
-
.dupe input {
|
89
|
-
float: right;
|
90
|
-
margin-top: 12px;
|
91
|
-
}
|
92
|
-
</style>
|
93
|
-
<title>Hydroponics <%= settings.version %></title>
|
94
|
-
</head>
|
95
|
-
|
96
|
-
<body class="container">
|
97
|
-
<div class="header">
|
98
|
-
<h1>Hydroponics</h1>
|
99
|
-
</div>
|
100
|
-
<div class="dupecontainer">
|
101
|
-
<div class="dupe">
|
102
|
-
<h3>Foreign Dupe</h3>
|
103
|
-
<div id='slider'><div></div></div>
|
104
|
-
<div class="loader" style="display:none;"></div>
|
105
|
-
<div id='button'><button>Update</button></div>
|
106
|
-
<input id='foreign_key'></input>
|
107
|
-
<p><%= @table.to_s.gsub("_"," ") %>: <span id='sliderct'><%= db[@table].count %></span></p>
|
108
|
-
</div>
|
109
|
-
</div>
|
110
|
-
</body>
|
111
|
-
</html>
|