iZsh-wwmd 0.2.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/History.txt +24 -0
  2. data/README.rdoc +87 -0
  3. data/Rakefile +34 -0
  4. data/examples/config_example.yaml +24 -0
  5. data/examples/wwmd_example.rb +73 -0
  6. data/lib/wwmd.rb +78 -0
  7. data/lib/wwmd/class_extensions.rb +2 -0
  8. data/lib/wwmd/class_extensions/extensions_base.rb +235 -0
  9. data/lib/wwmd/class_extensions/extensions_encoding.rb +79 -0
  10. data/lib/wwmd/class_extensions/extensions_external.rb +18 -0
  11. data/lib/wwmd/class_extensions/extensions_nilclass.rb +11 -0
  12. data/lib/wwmd/class_extensions/extensions_rbkb.rb +188 -0
  13. data/lib/wwmd/class_extensions/mixins_string_encoding.rb +40 -0
  14. data/lib/wwmd/guid.rb +155 -0
  15. data/lib/wwmd/page.rb +3 -0
  16. data/lib/wwmd/page/auth.rb +17 -0
  17. data/lib/wwmd/page/constants.rb +64 -0
  18. data/lib/wwmd/page/form.rb +99 -0
  19. data/lib/wwmd/page/form_array.rb +296 -0
  20. data/lib/wwmd/page/headers.rb +111 -0
  21. data/lib/wwmd/page/helpers.rb +30 -0
  22. data/lib/wwmd/page/html2text_hpricot.rb +76 -0
  23. data/lib/wwmd/page/html2text_nokogiri.rb +42 -0
  24. data/lib/wwmd/page/inputs.rb +47 -0
  25. data/lib/wwmd/page/irb_helpers.rb +114 -0
  26. data/lib/wwmd/page/page.rb +241 -0
  27. data/lib/wwmd/page/parsing_convenience.rb +94 -0
  28. data/lib/wwmd/page/reporting_helpers.rb +87 -0
  29. data/lib/wwmd/page/scrape.rb +198 -0
  30. data/lib/wwmd/page/spider.rb +127 -0
  31. data/lib/wwmd/urlparse.rb +104 -0
  32. data/lib/wwmd/viewstate.rb +17 -0
  33. data/lib/wwmd/viewstate/viewstate.rb +101 -0
  34. data/lib/wwmd/viewstate/viewstate_deserializer_methods.rb +217 -0
  35. data/lib/wwmd/viewstate/viewstate_from_xml.rb +128 -0
  36. data/lib/wwmd/viewstate/viewstate_types.rb +51 -0
  37. data/lib/wwmd/viewstate/viewstate_utils.rb +162 -0
  38. data/lib/wwmd/viewstate/viewstate_yaml.rb +25 -0
  39. data/lib/wwmd/viewstate/vs_stubs.rb +22 -0
  40. data/lib/wwmd/viewstate/vs_stubs/vs_array.rb +38 -0
  41. data/lib/wwmd/viewstate/vs_stubs/vs_binary_serialized.rb +30 -0
  42. data/lib/wwmd/viewstate/vs_stubs/vs_hashtable.rb +42 -0
  43. data/lib/wwmd/viewstate/vs_stubs/vs_hybrid_dict.rb +42 -0
  44. data/lib/wwmd/viewstate/vs_stubs/vs_indexed_string.rb +6 -0
  45. data/lib/wwmd/viewstate/vs_stubs/vs_indexed_string_ref.rb +24 -0
  46. data/lib/wwmd/viewstate/vs_stubs/vs_int_enum.rb +27 -0
  47. data/lib/wwmd/viewstate/vs_stubs/vs_list.rb +34 -0
  48. data/lib/wwmd/viewstate/vs_stubs/vs_pair.rb +29 -0
  49. data/lib/wwmd/viewstate/vs_stubs/vs_read_types.rb +11 -0
  50. data/lib/wwmd/viewstate/vs_stubs/vs_read_value.rb +35 -0
  51. data/lib/wwmd/viewstate/vs_stubs/vs_sparse_array.rb +58 -0
  52. data/lib/wwmd/viewstate/vs_stubs/vs_string.rb +33 -0
  53. data/lib/wwmd/viewstate/vs_stubs/vs_string_array.rb +39 -0
  54. data/lib/wwmd/viewstate/vs_stubs/vs_string_formatted.rb +32 -0
  55. data/lib/wwmd/viewstate/vs_stubs/vs_stub_helpers.rb +37 -0
  56. data/lib/wwmd/viewstate/vs_stubs/vs_triplet.rb +31 -0
  57. data/lib/wwmd/viewstate/vs_stubs/vs_type.rb +23 -0
  58. data/lib/wwmd/viewstate/vs_stubs/vs_unit.rb +30 -0
  59. data/lib/wwmd/viewstate/vs_stubs/vs_value.rb +35 -0
  60. data/lib/wwmd/wwmd_config.rb +52 -0
  61. data/lib/wwmd/wwmd_puts.rb +9 -0
  62. data/lib/wwmd/wwmd_utils.rb +28 -0
  63. data/spec/README +3 -0
  64. data/spec/form_array.spec +49 -0
  65. data/spec/spider_csrf_test.spec +28 -0
  66. data/spec/urlparse_test.spec +101 -0
  67. data/tasks/ann.rake +80 -0
  68. data/tasks/bones.rake +20 -0
  69. data/tasks/gem.rake +201 -0
  70. data/tasks/git.rake +40 -0
  71. data/tasks/notes.rake +27 -0
  72. data/tasks/post_load.rake +34 -0
  73. data/tasks/rdoc.rake +51 -0
  74. data/tasks/rubyforge.rake +55 -0
  75. data/tasks/setup.rb +292 -0
  76. data/tasks/spec.rake +54 -0
  77. data/tasks/test.rake +40 -0
  78. data/tasks/zentest.rake +36 -0
  79. metadata +174 -0
@@ -0,0 +1,51 @@
1
+ module WWMD
2
+ # private const byte Marker_Format = 0xff;
3
+ # private const byte Marker_Version_1 = 1;
4
+ # private const int StringTableSize = 0xff;
5
+
6
+ VIEWSTATE_MAGIC = ["\xff\x01"] unless defined?(VIEWSTATE_MAGIC)
7
+
8
+ VIEWSTATE_TYPES = {
9
+ # System.Web.UI.LosFormatter
10
+ # System.Web.UI.ObjectStateFormatter
11
+ # .DeserializeValue
12
+
13
+ 0x00 => :debug, ##X debugging
14
+ 0x01 => :int16, #RX private const byte Token_Int16 = 1;
15
+ 0x02 => :int32, #RX private const byte Token_Int32 = 2;
16
+ 0x03 => :byte, #RX private const byte Token_Byte = 3;
17
+ 0x04 => :char, #RX private const byte Token_Char = 4;
18
+ 0x05 => :string, ##X private const byte Token_String = 5;
19
+ 0x06 => :date_time, #RX private const byte Token_DateTime = 6;
20
+ 0x07 => :double, #RX private const byte Token_Double = 7;
21
+ 0x08 => :single, #RX private const byte Token_Single = 8;
22
+ 0x09 => :color, ##X private const byte Token_Color = 9;
23
+ 0x0a => :known_color, ##X private const byte Token_KnownColor = 10;
24
+ 0x0b => :int_enum, ##X private const byte Token_IntEnum = 11;
25
+ 0x0c => :empty_color, #VX private const byte Token_EmptyColor = 12;
26
+ 0x0f => :pair, ##X private const byte Token_Pair = 15;
27
+ 0x10 => :triplet, ##X private const byte Token_Triplet = 0x10;
28
+ 0x14 => :array, ##X private const byte Token_Array = 20;
29
+ 0x15 => :string_array, ##X private const byte Token_StringArray = 0x15;
30
+ 0x16 => :list, ##X private const byte Token_ArrayList = 0x16;
31
+ 0x17 => :hashtable, ##X private const byte Token_Hashtable = 0x17
32
+ 0x18 => :hybrid_dict, ##X private const byte Token_HybridDictionary = 0x18;
33
+ 0x19 => :type, ##X private const byte Token_Type = 0x19;
34
+ 0x1b => :unit, ##X private const byte Token_Unit = 0x1b;
35
+ 0x1c => :empty_unit, #VX private const byte Token_EmptyUnit = 0x1c;
36
+ 0x1e => :indexed_string, ##X private const byte Token_IndexedStringAdd = 30;
37
+ 0x1f => :indexed_string_ref, ##X private const byte Token_IndexedString = 0x1f;
38
+ 0x28 => :string_formatted, ##X private const byte Token_StringFormatted = 40;
39
+ 0x29 => :typeref_add, ##X private const byte Token_TypeRefAdd = 0x29;
40
+ 0x2a => :typeref_add_local, ##X private const byte Token_TypeRefAddLocal = 0x2a;
41
+ 0x2b => :typeref, ##X private const byte Token_TypeRef = 0x2b;
42
+ 0x32 => :binary_serialized, ##X private const byte Token_BinarySerialized = 50;
43
+ 0x3c => :sparse_array, ##X private const byte Token_SparseArray = 60;
44
+ 0x64 => :null, #VX private const byte Token_Null = 100;
45
+ 0x65 => :empty_byte, #VX private const byte Token_EmptyString = 0x65;
46
+ 0x66 => :zeroint32, #VX private const byte Token_ZeroInt32 = 0x66;
47
+ 0x67 => :bool_true, #VX private const byte Token_True = 0x67;
48
+ 0x68 => :bool_false, #VX private const byte Token_False = 0x68;
49
+ } unless defined?(VIEWSTATE_TYPES)
50
+
51
+ end
@@ -0,0 +1,162 @@
1
+ module WWMD
2
+ module ViewStateUtils
3
+
4
+ def putd(msg)
5
+ puts(msg) if self.debug
6
+ end
7
+
8
+ def slog(obj,msg=nil)
9
+ raise "No @value" if not obj.respond_to?(:value)
10
+ raise "No @size" if not obj.respond_to?(:size)
11
+ return nil if !self.debug
12
+ putd "#{@stack.size.to_s(16).rjust(8,"0")} [0x#{obj.opcode.to_s(16)}] #{obj.class}: #{msg}"
13
+ end
14
+
15
+ def dlog(t,msg)
16
+ raise "null token passed to dlog()" if t.nil?
17
+ o = WWMD::VIEWSTATE_TYPES[t]
18
+ @obj_counts[o] ||= 0
19
+ @obj_counts[o] += 1
20
+ return nil if !self.debug
21
+ putd "#{self.last_offset} [0x#{t.to_s(16).rjust(2,"0")}] #{VIEWSTATE_TYPES[t]}: #{msg}"
22
+ end
23
+
24
+ def write_7bit_encoded_int(val)
25
+ s = ""
26
+ while (val >= 0x80) do
27
+ s << [val | 0x80].pack("C")
28
+ val = val >> 7
29
+ end
30
+ s << [val].pack("C")
31
+ return s
32
+ end
33
+
34
+ # why oh why did I have to go find this?
35
+ # System.IO.BinaryReader.Read7BitEncodedInt
36
+ def read_7bit_encoded_int(buf=nil)
37
+ l = 0 # length
38
+ s = 0 # shift
39
+ b = "" # byte
40
+ buf = buf.scan(/./m) if buf
41
+ begin
42
+ if not buf
43
+ b = self.read_int
44
+ else
45
+ b = buf.shift.unpack("C").first
46
+ end
47
+ l |= (b & 0x7f) << s
48
+ s += 7
49
+ end while ((b & 0x80) != 0)
50
+ return l
51
+ end
52
+
53
+ def read_string
54
+ len = read_7bit_encoded_int
55
+ starr = []
56
+ (1..len).each { |i| starr << @bufarr.shift }
57
+ return starr.to_s
58
+ # @bufarr.slice!(0..(len - 1)).join("")
59
+ end
60
+
61
+ def read(count)
62
+ @bufarr.slice!(0..(count - 1)).join("")
63
+ end
64
+
65
+ def read_int
66
+ @bufarr.shift.unpack("C").first
67
+ end
68
+ alias_method :read_byte, :read_int
69
+
70
+ def write_int(val)
71
+ [val].pack("C")
72
+ end
73
+ alias_method :write_byte, :write_int
74
+
75
+ def read_short
76
+ self.read(2).unpack("S").first
77
+ end
78
+
79
+ def write_short(val)
80
+ [val].pack("n")
81
+ end
82
+
83
+ def read_int32
84
+ @bufarr.slice!(0..3).join("").unpack("L").first
85
+ end
86
+ alias_method :read_single, :read_int32
87
+
88
+ def write_int32(val)
89
+ [val].pack("I")
90
+ end
91
+ alias_method :write_single, :write_int32
92
+
93
+ def read_double
94
+ @bufarr.slice!(0..7).join("").unpack("Q").first
95
+ end
96
+
97
+ def write_double(val)
98
+ [val].pack("Q")
99
+ end
100
+
101
+ def magic?
102
+ @magic = [@bufarr.shift,@bufarr.shift].join("")
103
+ VIEWSTATE_MAGIC.include?(@magic)
104
+ end
105
+
106
+ def read_raw_byte
107
+ @bufarr.shift
108
+ end
109
+
110
+ def serialize_type(op,ref)
111
+ op_str = [op].pack("C")
112
+ s = op_str
113
+ case op
114
+ when VIEWSTATE_TYPES.index(:typeref)
115
+ s << write_7bit_encoded_int(ref)
116
+ when VIEWSTATE_TYPES.index(:typeref_add_local)
117
+ s << write_7bit_encoded_int(ref.size)
118
+ s << ref
119
+ when VIEWSTATE_TYPES.index(:typeref_add)
120
+ s << write_7bit_encoded_int(ref.size)
121
+ s << ref
122
+ else
123
+ raise "Invalid Type Error #{op.to_s(16)}"
124
+ end
125
+ return s
126
+ end
127
+
128
+ def deserialize_type(t=nil)
129
+ op = self.read_byte
130
+ case op
131
+ when VIEWSTATE_TYPES.index(:typeref)
132
+ type = read_7bit_encoded_int
133
+ return [op,type]
134
+ when VIEWSTATE_TYPES.index(:typeref_add_local)
135
+ name = read_string
136
+ return [op,name]
137
+ when VIEWSTATE_TYPES.index(:typeref_add)
138
+ name = read_string
139
+ return [op,name]
140
+ else
141
+ raise "Invalid Type Error 0x#{op.to_s(16)}"
142
+ end
143
+ end
144
+
145
+ def offset(cur=nil)
146
+ (self.size - @bufarr.size).to_s(16).rjust(8,"0")
147
+ end
148
+
149
+ def throw(t=nil)
150
+ STDERR.puts "==== Error at Type 0x#{t.to_s(16).rjust(2,"0")}"
151
+ STDERR.puts "offset: #{self.offset}"
152
+ STDERR.puts "left: #{@bufarr.size}"
153
+ STDERR.puts @bufarr[0..31].join("").hexdump
154
+ end
155
+
156
+ def next_type
157
+ t = @bufarr.first.unpack("C").first
158
+ throw(t) if not VIEWSTATE_TYPES.include?(t)
159
+ VIEWSTATE_TYPES[t]
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,25 @@
1
+ class String
2
+ # right now I have no idea why "\x0d\x0a" is getting munged in yaml transforms
3
+ # something weird helped find by timur@. double up "\r" before "\n" works
4
+ # this might be mac specific and break on other platforms. I don't care.
5
+ # patch not for general use do not try this at home.
6
+ def to_yaml( opts = {} )
7
+ YAML::quick_emit( is_complex_yaml? ? object_id : nil, opts ) do |out|
8
+ if is_binary_data?
9
+ out.scalar( "tag:yaml.org,2002:binary", [self].pack("m"), :literal )
10
+ elsif ( self =~ /\r\n/ )
11
+ # out.scalar( "tag:yaml.org,2002:binary", [self].pack("m"), :literal )
12
+ out.scalar( taguri, self.gsub(/\r\n/,"\r\r\n"), :quote2 )
13
+ elsif to_yaml_properties.empty?
14
+ out.scalar( taguri, self, self =~ /^:/ ? :quote2 : to_yaml_style )
15
+ else
16
+ out.map( taguri, to_yaml_style ) do |map|
17
+ map.add( 'str', "#{self}" )
18
+ to_yaml_properties.each do |m|
19
+ map.add( m, instance_variable_get( m ) )
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ module WWMD::VSStubs; end
2
+ require 'wwmd/viewstate/vs_stubs/vs_stub_helpers'
3
+ require 'wwmd/viewstate/vs_stubs/vs_read_value'
4
+ require 'wwmd/viewstate/vs_stubs/vs_read_types'
5
+ require 'wwmd/viewstate/vs_stubs/vs_value'
6
+ require 'wwmd/viewstate/vs_stubs/vs_array'
7
+ require 'wwmd/viewstate/vs_stubs/vs_binary_serialized'
8
+ require 'wwmd/viewstate/vs_stubs/vs_int_enum'
9
+ require 'wwmd/viewstate/vs_stubs/vs_hashtable'
10
+ require 'wwmd/viewstate/vs_stubs/vs_hybrid_dict'
11
+ require 'wwmd/viewstate/vs_stubs/vs_list'
12
+ require 'wwmd/viewstate/vs_stubs/vs_pair'
13
+ require 'wwmd/viewstate/vs_stubs/vs_sparse_array'
14
+ require 'wwmd/viewstate/vs_stubs/vs_string'
15
+ require 'wwmd/viewstate/vs_stubs/vs_string_array'
16
+ require 'wwmd/viewstate/vs_stubs/vs_string_formatted'
17
+ require 'wwmd/viewstate/vs_stubs/vs_triplet'
18
+ require 'wwmd/viewstate/vs_stubs/vs_type'
19
+ require 'wwmd/viewstate/vs_stubs/vs_unit'
20
+ require 'wwmd/viewstate/vs_stubs/vs_indexed_string'
21
+ require 'wwmd/viewstate/vs_stubs/vs_indexed_string_ref'
22
+
@@ -0,0 +1,38 @@
1
+ module WWMD
2
+ class VSStubs::VSArray
3
+ include VSStubHelpers
4
+
5
+ attr_accessor :value
6
+ attr_reader :typeref
7
+ attr_reader :typeval
8
+
9
+ def initialize(typeref,typeval)
10
+ @typeref = typeref
11
+ @typeval = typeval
12
+ @value = []
13
+ end
14
+
15
+ def add(obj)
16
+ @value << obj
17
+ end
18
+
19
+ def serialize
20
+ stack = super
21
+ stack << self.write_7bit_encoded_int(self.value.size)
22
+ self.value.each do |v|
23
+ stack << v.serialize
24
+ end
25
+ return stack
26
+ end
27
+
28
+ def to_xml
29
+ xml = super
30
+ xml.add_attribute("size", self.value.size.to_s)
31
+ self.value.each do |v|
32
+ xml.add_element(v.to_xml)
33
+ end
34
+ xml
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,30 @@
1
+ module WWMD
2
+ class VSStubs::VSBinarySerialized
3
+ include VSStubHelpers
4
+
5
+ attr_accessor :value
6
+
7
+ def initialize()
8
+ @value = ''
9
+ end
10
+
11
+ def set(str)
12
+ @value = str
13
+ end
14
+
15
+ def serialize
16
+ stack = super
17
+ stack << self.write_7bit_encoded_int(self.size)
18
+ stack << self.value
19
+ return stack
20
+ end
21
+
22
+ def to_xml
23
+ xml = super
24
+ xml.add_attribute("encoding","base64")
25
+ xml.add_text(self.value.b64e)
26
+ xml
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ module WWMD
2
+ class VSStubs::VSHashtable
3
+ include VSStubHelpers
4
+
5
+ attr_accessor :value
6
+
7
+ def initialize()
8
+ @value = []
9
+ end
10
+
11
+ def add(obj1,obj2)
12
+ @value << [obj1,obj2]
13
+ end
14
+
15
+ def serialize
16
+ stack = super
17
+ stack << self.write_7bit_encoded_int(self.size)
18
+ self.value.each do |k,v|
19
+ stack << k.serialize
20
+ stack << v.serialize
21
+ end
22
+ return stack
23
+ end
24
+
25
+ def to_xml
26
+ xml = super
27
+ xml.add_attribute("size",self.value.size.to_s)
28
+ self.value.each do |k,v|
29
+ pair = REXML::Element.new("Pair")
30
+ key = REXML::Element.new("Key")
31
+ key.add_element(k.to_xml)
32
+ val = REXML::Element.new("Value")
33
+ val.add_element(v.to_xml)
34
+ pair.add_element(key)
35
+ pair.add_element(val)
36
+ xml.add_element(pair)
37
+ end
38
+ xml
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,42 @@
1
+ module WWMD
2
+ class VSStubs::VSHybridDict
3
+ include VSStubHelpers
4
+
5
+ attr_accessor :value
6
+
7
+ def initialize()
8
+ @value = []
9
+ end
10
+
11
+ def add(obj1,obj2)
12
+ @value << [obj1,obj2]
13
+ end
14
+
15
+ def serialize
16
+ stack = super
17
+ stack << self.write_7bit_encoded_int(self.size)
18
+ self.value.each do |k,v|
19
+ stack << k.serialize
20
+ stack << v.serialize
21
+ end
22
+ return stack
23
+ end
24
+
25
+ def to_xml
26
+ xml = super
27
+ xml.add_attribute("size",self.value.size.to_s)
28
+ self.value.each do |k,v|
29
+ pair = REXML::Element.new("Pair")
30
+ key = REXML::Element.new("Key")
31
+ key.add_element(k.to_xml)
32
+ val = REXML::Element.new("Value")
33
+ val.add_element(v.to_xml)
34
+ pair.add_element(key)
35
+ pair.add_element(val)
36
+ xml.add_element(pair)
37
+ end
38
+ xml
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ module WWMD
2
+ class VSStubs::VSIndexedString < VSStubs::VSString
3
+ def serialize; super; end
4
+ def to_xml; super; end
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ module WWMD
2
+ class VSStubs::VSIndexedStringRef
3
+ include VSStubHelpers
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(ref)
8
+ @value = ref
9
+ end
10
+
11
+ def serialize
12
+ stack = super
13
+ stack << self.write_int(@value)
14
+ return stack
15
+ end
16
+
17
+ def to_xml
18
+ xml = super
19
+ xml.add_text(self.value.to_s)
20
+ xml
21
+ end
22
+
23
+ end
24
+ end