Capcode 0.8.6 → 0.8.7
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/README.rdoc +72 -1
- data/doc/rdoc/classes/Capcode.html +549 -444
- data/doc/rdoc/classes/Capcode/Helpers.html +293 -133
- data/doc/rdoc/classes/Capcode/Helpers/Authorization.html +60 -29
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/README_rdoc.html +94 -8
- data/doc/rdoc/files/lib/capcode/configuration_rb.html +101 -0
- data/doc/rdoc/files/lib/capcode/helpers/auth_rb.html +1 -32
- data/doc/rdoc/files/lib/capcode/render/erb_rb.html +1 -1
- data/doc/rdoc/files/lib/capcode/render/haml_rb.html +1 -1
- data/doc/rdoc/files/lib/capcode/render/markaby_rb.html +1 -1
- data/doc/rdoc/files/lib/capcode/render/sass_rb.html +1 -1
- data/doc/rdoc/files/lib/capcode/render/text_rb.html +1 -1
- data/doc/rdoc/files/lib/capcode_rb.html +8 -1
- data/doc/rdoc/fr_file_index.html +1 -0
- data/doc/rdoc/fr_method_index.html +19 -11
- data/examples/blog-couchdb.rb +4 -3
- data/examples/erb/cf.rhtml +1 -0
- data/examples/haml/cf.haml +4 -1
- data/examples/render-erb.rb +4 -1
- data/examples/render-haml_sass.rb +6 -2
- data/examples/render-image.rb +70 -0
- data/examples/render-static.rb +4 -1
- data/examples/render-static.ru +0 -2
- data/examples/render-use.rb +31 -0
- data/examples/static/coderay.css +131 -0
- data/examples/static/index.html +19 -0
- data/lib/capcode.rb +125 -76
- data/lib/capcode/configuration.rb +39 -0
- data/lib/capcode/helpers/auth.rb +22 -23
- data/lib/capcode/render/erb.rb +25 -18
- data/lib/capcode/render/haml.rb +28 -19
- data/lib/capcode/render/markaby.rb +2 -1
- data/lib/capcode/render/sass.rb +19 -13
- data/lib/capcode/render/text.rb +1 -1
- data/lib/capcode/version.rb +1 -1
- metadata +8 -2
@@ -72,6 +72,37 @@
|
|
72
72
|
|
73
73
|
<div id="contextContent">
|
74
74
|
|
75
|
+
<div id="description">
|
76
|
+
<p>
|
77
|
+
Because this helper was trully inspired by this post : <a
|
78
|
+
href="http://www.gittr.com/index.php/archive/sinatra-basic-authentication-selectively-applied">www.gittr.com/index.php/archive/sinatra-basic-authentication-selectively-applied</a>/
|
79
|
+
and because the code in this post was extracted out of Wink, this file
|
80
|
+
follow the Wink license :
|
81
|
+
</p>
|
82
|
+
<p>
|
83
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
84
|
+
copy of this software and associated documentation files (the
|
85
|
+
"Software"), to deal in the Software without restriction,
|
86
|
+
including without limitation the rights to use, copy, modify, merge,
|
87
|
+
publish, distribute, sublicense, and/or sell copies of the Software, and to
|
88
|
+
permit persons to whom the Software is furnished to do so, subject to the
|
89
|
+
following conditions:
|
90
|
+
</p>
|
91
|
+
<p>
|
92
|
+
The above copyright notice and this permission notice shall be included in
|
93
|
+
all copies or substantial portions of the Software.
|
94
|
+
</p>
|
95
|
+
<p>
|
96
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
97
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
98
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
99
|
+
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
100
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
101
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
102
|
+
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
103
|
+
</p>
|
104
|
+
|
105
|
+
</div>
|
75
106
|
|
76
107
|
|
77
108
|
</div>
|
@@ -80,7 +111,7 @@
|
|
80
111
|
<h3 class="section-bar">Methods</h3>
|
81
112
|
|
82
113
|
<div class="name-list">
|
83
|
-
<a href="#
|
114
|
+
<a href="#M000026">http_authentication</a>
|
84
115
|
</div>
|
85
116
|
</div>
|
86
117
|
|
@@ -102,11 +133,11 @@
|
|
102
133
|
<div id="methods">
|
103
134
|
<h3 class="section-bar">Public Instance methods</h3>
|
104
135
|
|
105
|
-
<div id="method-
|
106
|
-
<a name="
|
136
|
+
<div id="method-M000026" class="method-detail">
|
137
|
+
<a name="M000026"></a>
|
107
138
|
|
108
139
|
<div class="method-heading">
|
109
|
-
<a href="#
|
140
|
+
<a href="#M000026" class="method-signature">
|
110
141
|
<span class="method-name">http_authentication</span><span class="method-args">( opts = {}, &b )</span>
|
111
142
|
</a>
|
112
143
|
</div>
|
@@ -142,32 +173,32 @@ The block must return a Hash of username => password like that :
|
|
142
173
|
}
|
143
174
|
</pre>
|
144
175
|
<p><a class="source-toggle" href="#"
|
145
|
-
onclick="toggleCode('
|
146
|
-
<div class="method-source-code" id="
|
176
|
+
onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
|
177
|
+
<div class="method-source-code" id="M000026-source">
|
147
178
|
<pre>
|
148
|
-
<span class="ruby-comment cmt"># File lib/capcode/helpers/auth.rb, line
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
179
|
+
<span class="ruby-comment cmt"># File lib/capcode/helpers/auth.rb, line 105</span>
|
180
|
+
105: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">http_authentication</span>( <span class="ruby-identifier">opts</span> = {}, <span class="ruby-operator">&</span><span class="ruby-identifier">b</span> )
|
181
|
+
106: <span class="ruby-ivar">@auth</span> = <span class="ruby-keyword kw">nil</span>
|
182
|
+
107:
|
183
|
+
108: <span class="ruby-ivar">@auth_type</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:type</span>]<span class="ruby-operator">||</span><span class="ruby-identifier">:basic</span>
|
184
|
+
109: <span class="ruby-identifier">realm</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:realm</span>]<span class="ruby-operator">||</span><span class="ruby-value str">"Capcode.app"</span>
|
185
|
+
110: <span class="ruby-identifier">opaque</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:opaque</span>]<span class="ruby-operator">||</span><span class="ruby-value str">"opaque"</span>
|
186
|
+
111: <span class="ruby-ivar">@authorizations</span> = <span class="ruby-identifier">b</span>
|
187
|
+
112:
|
188
|
+
113: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">authorized?</span>
|
189
|
+
114:
|
190
|
+
115: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@auth_type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:basic</span>
|
191
|
+
116: <span class="ruby-identifier">basic_unauthorized!</span>(<span class="ruby-identifier">realm</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">auth</span>.<span class="ruby-identifier">provided?</span>
|
192
|
+
117: <span class="ruby-identifier">bad_request!</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">auth</span>.<span class="ruby-identifier">basic?</span>
|
193
|
+
118: <span class="ruby-identifier">basic_unauthorized!</span>(<span class="ruby-identifier">realm</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">basic_authorize</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">auth</span>.<span class="ruby-identifier">credentials</span>)
|
194
|
+
119: <span class="ruby-keyword kw">else</span>
|
195
|
+
120: <span class="ruby-identifier">digest_unauthorized!</span>(<span class="ruby-identifier">realm</span>, <span class="ruby-identifier">opaque</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">auth</span>.<span class="ruby-identifier">provided?</span>
|
196
|
+
121: <span class="ruby-identifier">bad_request!</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">auth</span>.<span class="ruby-identifier">digest?</span>
|
197
|
+
122: <span class="ruby-identifier">digest_unauthorized!</span>(<span class="ruby-identifier">realm</span>, <span class="ruby-identifier">opaque</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">digest_authorize</span>
|
198
|
+
123: <span class="ruby-keyword kw">end</span>
|
199
|
+
124:
|
200
|
+
125: <span class="ruby-identifier">request</span>.<span class="ruby-identifier">env</span>[<span class="ruby-value str">'REMOTE_USER'</span>] = <span class="ruby-identifier">auth</span>.<span class="ruby-identifier">username</span>
|
201
|
+
126: <span class="ruby-keyword kw">end</span>
|
171
202
|
</pre>
|
172
203
|
</div>
|
173
204
|
</div>
|
data/doc/rdoc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Wed, 21 Oct 2009 16:44:30 +0200
|
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Wed Oct 21 15:27:11 +0200 2009</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -91,6 +91,26 @@ href="http://www.algorithmique.net/capcode">www.algorithmique.net/capcode</a>/
|
|
91
91
|
<a href="../classes/Capcode.html">Capcode</a> is a web microframework
|
92
92
|
</p>
|
93
93
|
<h2>FEATURES/PROBLEMS:</h2>
|
94
|
+
<h3>0.8.7</h3>
|
95
|
+
<ul>
|
96
|
+
<li>Route‘s captures are now passed to all methods in a coontroller
|
97
|
+
|
98
|
+
</li>
|
99
|
+
<li>Add :content_type option to renderers (see render-image.rb)
|
100
|
+
|
101
|
+
</li>
|
102
|
+
<li>Add <a href="../classes/Capcode.html#M000012">Capcode.set</a> for
|
103
|
+
configuration. So Capcode::Herpers#erb_path=, Capcode::Herpers#sass_path=
|
104
|
+
and Capcode::Herpers#haml_path= are deprecated, you must now use `set :erb,
|
105
|
+
…’, `set :sass, …’ and `set :haml, …’
|
106
|
+
(see render-erb.rb and render-haml_sass.rb)
|
107
|
+
|
108
|
+
</li>
|
109
|
+
<li>Add <a href="../classes/Capcode.html#M000008">Capcode.use</a> to allow
|
110
|
+
usage of Rack middlewares (see render-use.rb)
|
111
|
+
|
112
|
+
</li>
|
113
|
+
</ul>
|
94
114
|
<h3>0.8.6</h3>
|
95
115
|
<ul>
|
96
116
|
<li>HUGE bug correction
|
@@ -209,7 +229,7 @@ href="../classes/Capcode/Resource.html">Capcode::Resource</a> in your
|
|
209
229
|
models
|
210
230
|
|
211
231
|
</li>
|
212
|
-
<li><a href="../classes/Capcode.html#
|
232
|
+
<li><a href="../classes/Capcode.html#M000011">Capcode.run</a> now accept a
|
213
233
|
block. The content of the block is executed just before the server start.
|
214
234
|
|
215
235
|
</li>
|
@@ -251,12 +271,12 @@ href="http://github.com/judofyr/camping/blob/master/examples/blog.rb">github.com
|
|
251
271
|
<h3>0.6.0</h3>
|
252
272
|
<ul>
|
253
273
|
<li>Add :root option to <a
|
254
|
-
href="../classes/Capcode.html#
|
274
|
+
href="../classes/Capcode.html#M000011">Capcode.run</a>. This option allow
|
255
275
|
you to specify the root directory for static files
|
256
276
|
|
257
277
|
</li>
|
258
278
|
<li>Add :working_directory option to <a
|
259
|
-
href="../classes/Capcode.html#
|
279
|
+
href="../classes/Capcode.html#M000011">Capcode.run</a>. This option allow
|
260
280
|
you to specify the working directory
|
261
281
|
|
262
282
|
</li>
|
@@ -515,10 +535,76 @@ for complete examples.
|
|
515
535
|
end
|
516
536
|
|
517
537
|
end
|
538
|
+
|
539
|
+
Capcode.run( )
|
540
|
+
</pre>
|
541
|
+
<h3>HTTP Authentication</h3>
|
542
|
+
<pre>
|
543
|
+
# file: sample.rb
|
544
|
+
require 'rubygems'
|
545
|
+
require 'capcode'
|
546
|
+
|
547
|
+
module Capcode
|
548
|
+
class Public < Route '/public'
|
549
|
+
def get
|
550
|
+
render "This page is not protected"
|
551
|
+
end
|
552
|
+
end
|
553
|
+
|
554
|
+
class Private < Route '/private'
|
555
|
+
def get
|
556
|
+
http_authentication( :type => :digest, :realm => "Private part" ) {
|
557
|
+
{ "greg" => "p4ssw0rd" }
|
558
|
+
}
|
559
|
+
|
560
|
+
render "This page is private - Hello #{request.env['REMOTE_USER']}"
|
561
|
+
end
|
562
|
+
end
|
563
|
+
end
|
564
|
+
|
565
|
+
Capcode.run( )
|
518
566
|
</pre>
|
519
567
|
<p>
|
520
|
-
|
568
|
+
Second example :
|
521
569
|
</p>
|
570
|
+
<pre>
|
571
|
+
# file: sample.rb
|
572
|
+
require 'rubygems'
|
573
|
+
require 'capcode'
|
574
|
+
|
575
|
+
module Capcode
|
576
|
+
|
577
|
+
http_authentication( :type => :digest, :realm => "Private part", :routes => ['/admin', '/private'] ) {
|
578
|
+
{ "greg" => "p4ssw0rd" }
|
579
|
+
}
|
580
|
+
|
581
|
+
class Public < Route '/public'
|
582
|
+
def get
|
583
|
+
render "This page is not protected"
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
587
|
+
class Private < Route '/private'
|
588
|
+
def get
|
589
|
+
render "This page is private - Hello #{request.env['REMOTE_USER']}"
|
590
|
+
end
|
591
|
+
end
|
592
|
+
|
593
|
+
class PrivateAgain < Route '/private/again'
|
594
|
+
def get
|
595
|
+
render "This page is also private - Hello #{request.env['REMOTE_USER']}"
|
596
|
+
end
|
597
|
+
end
|
598
|
+
|
599
|
+
class Admin < Route '/admin'
|
600
|
+
def get
|
601
|
+
render "This page is private - Hello #{request.env['REMOTE_USER']}"
|
602
|
+
end
|
603
|
+
end
|
604
|
+
end
|
605
|
+
|
606
|
+
Capcode.run( )
|
607
|
+
</pre>
|
522
608
|
<h2>DEPLOYMENT</h2>
|
523
609
|
<h3>With Passenger</h3>
|
524
610
|
<p>
|
@@ -531,7 +617,7 @@ First create the directory structure :
|
|
531
617
|
</pre>
|
532
618
|
<p>
|
533
619
|
Then put your app in <tt>my_app/</tt> and comment or remove the line with
|
534
|
-
<tt><a href="../classes/Capcode.html#
|
620
|
+
<tt><a href="../classes/Capcode.html#M000011">Capcode.run</a></tt>
|
535
621
|
</p>
|
536
622
|
<p>
|
537
623
|
Create a rack configuration file (<tt>config.ru</tt>) in <tt>my_app/</tt>
|
@@ -541,9 +627,9 @@ Create a rack configuration file (<tt>config.ru</tt>) in <tt>my_app/</tt>
|
|
541
627
|
run Capcode.application()
|
542
628
|
</pre>
|
543
629
|
<p>
|
544
|
-
<tt><a href="../classes/Capcode.html#
|
630
|
+
<tt><a href="../classes/Capcode.html#M000010">Capcode.application</a></tt>
|
545
631
|
take the same parameters as <tt><a
|
546
|
-
href="../classes/Capcode.html#
|
632
|
+
href="../classes/Capcode.html#M000011">Capcode.run</a></tt> (and block
|
547
633
|
too). Be carefull, if you use static files (with the static renderer) you
|
548
634
|
must set the <tt>:root</tt> option (<tt>:root =>
|
549
635
|
File.expand_path(File.dirname(<em>FILE</em>))</tt> is probably good)
|
@@ -0,0 +1,101 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
+
<head>
|
8
|
+
<title>File: configuration.rb</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
+
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
+
<script type="text/javascript">
|
13
|
+
// <![CDATA[
|
14
|
+
|
15
|
+
function popupCode( url ) {
|
16
|
+
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
+
}
|
18
|
+
|
19
|
+
function toggleCode( id ) {
|
20
|
+
if ( document.getElementById )
|
21
|
+
elem = document.getElementById( id );
|
22
|
+
else if ( document.all )
|
23
|
+
elem = eval( "document.all." + id );
|
24
|
+
else
|
25
|
+
return false;
|
26
|
+
|
27
|
+
elemStyle = elem.style;
|
28
|
+
|
29
|
+
if ( elemStyle.display != "block" ) {
|
30
|
+
elemStyle.display = "block"
|
31
|
+
} else {
|
32
|
+
elemStyle.display = "none"
|
33
|
+
}
|
34
|
+
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
|
38
|
+
// Make codeblocks hidden by default
|
39
|
+
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
+
|
41
|
+
// ]]>
|
42
|
+
</script>
|
43
|
+
|
44
|
+
</head>
|
45
|
+
<body>
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
<div id="fileHeader">
|
50
|
+
<h1>configuration.rb</h1>
|
51
|
+
<table class="header-table">
|
52
|
+
<tr class="top-aligned-row">
|
53
|
+
<td><strong>Path:</strong></td>
|
54
|
+
<td>lib/capcode/configuration.rb
|
55
|
+
</td>
|
56
|
+
</tr>
|
57
|
+
<tr class="top-aligned-row">
|
58
|
+
<td><strong>Last Update:</strong></td>
|
59
|
+
<td>Wed Oct 21 15:45:13 +0200 2009</td>
|
60
|
+
</tr>
|
61
|
+
</table>
|
62
|
+
</div>
|
63
|
+
<!-- banner header -->
|
64
|
+
|
65
|
+
<div id="bodyContent">
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
<div id="contextContent">
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
</div>
|
74
|
+
|
75
|
+
|
76
|
+
</div>
|
77
|
+
|
78
|
+
|
79
|
+
<!-- if includes -->
|
80
|
+
|
81
|
+
<div id="section">
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
<!-- if method_list -->
|
91
|
+
|
92
|
+
|
93
|
+
</div>
|
94
|
+
|
95
|
+
|
96
|
+
<div id="validator-badges">
|
97
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
98
|
+
</div>
|
99
|
+
|
100
|
+
</body>
|
101
|
+
</html>
|
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Wed Oct 21 13:40:26 +0200 2009</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -68,37 +68,6 @@
|
|
68
68
|
|
69
69
|
<div id="contextContent">
|
70
70
|
|
71
|
-
<div id="description">
|
72
|
-
<p>
|
73
|
-
Because this helper was trully inspired by this post : <a
|
74
|
-
href="http://www.gittr.com/index.php/archive/sinatra-basic-authentication-selectively-applied">www.gittr.com/index.php/archive/sinatra-basic-authentication-selectively-applied</a>/
|
75
|
-
and because the code in this post was extracted out of Wink, this file
|
76
|
-
follow the Wink license :
|
77
|
-
</p>
|
78
|
-
<p>
|
79
|
-
Permission is hereby granted, free of charge, to any person obtaining a
|
80
|
-
copy of this software and associated documentation files (the
|
81
|
-
"Software"), to deal in the Software without restriction,
|
82
|
-
including without limitation the rights to use, copy, modify, merge,
|
83
|
-
publish, distribute, sublicense, and/or sell copies of the Software, and to
|
84
|
-
permit persons to whom the Software is furnished to do so, subject to the
|
85
|
-
following conditions:
|
86
|
-
</p>
|
87
|
-
<p>
|
88
|
-
The above copyright notice and this permission notice shall be included in
|
89
|
-
all copies or substantial portions of the Software.
|
90
|
-
</p>
|
91
|
-
<p>
|
92
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
93
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
94
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
95
|
-
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
96
|
-
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
97
|
-
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
98
|
-
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
99
|
-
</p>
|
100
|
-
|
101
|
-
</div>
|
102
71
|
|
103
72
|
|
104
73
|
</div>
|