rubycas-server 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +37 -0
- data/Manifest.txt +10 -0
- data/Rakefile +3 -2
- data/bin/rubycas-server-ctl +1 -1
- data/config.example.yml +44 -11
- data/custom_views.example.rb +11 -0
- data/lib/casserver/authenticators/ldap.rb +11 -5
- data/lib/casserver/conf.rb +35 -12
- data/lib/casserver/controllers.rb +111 -23
- data/lib/casserver/models.rb +23 -0
- data/lib/casserver/postambles.rb +21 -24
- data/lib/casserver/utils.rb +16 -0
- data/lib/casserver/version.rb +3 -3
- data/lib/casserver/views.rb +50 -36
- data/lib/casserver.rb +9 -2
- data/lib/themes/cas.css +1 -0
- data/vendor/camping-1.5.180/lib/camping/db.rb +78 -0
- data/vendor/camping-1.5.180/lib/camping/fastcgi.rb +244 -0
- data/vendor/camping-1.5.180/lib/camping/reloader.rb +163 -0
- data/vendor/camping-1.5.180/lib/camping/session.rb +123 -0
- data/vendor/camping-1.5.180/lib/camping/webrick.rb +65 -0
- data/vendor/camping-1.5.180/lib/camping-unabridged.rb +762 -0
- data/vendor/camping-1.5.180/lib/camping.rb +55 -0
- metadata +10 -11
@@ -0,0 +1,55 @@
|
|
1
|
+
%w[active_support markaby tempfile uri].map{|l|require l}
|
2
|
+
module Camping;Apps=[];C=self;S=IO.read(__FILE__).sub(/S=I.+$/,'')
|
3
|
+
P="Cam\ping Problem!";module Helpers;def R(c,*g);p,h=/\(.+?\)/,g.grep(Hash)
|
4
|
+
(g-=h).inject(c.urls.find{|x|x.scan(p).size==g.size}.dup){|s,a|s.sub p,C.
|
5
|
+
escape((a[a.class.primary_key]rescue a))}+(h.any?? "?"+h[0].map{|x|x.map{|z|C.
|
6
|
+
escape z}*"="}*"&": "")end;def URL c='/',*a;c=R(c,*a)if c.
|
7
|
+
respond_to?:urls;c=self/c;c="//"+@env.HTTP_HOST+c if c[/^\//];URI(c)end;def/p
|
8
|
+
p[/^\//]?@root+p : p end;def errors_for o;ul.errors{o.errors.each_full{|x|li x}
|
9
|
+
}if o.errors.any?end end;module Base;include Helpers;attr_accessor:input,
|
10
|
+
:cookies,:env,:headers,:body,:status,:root;def method_missing*a,&b
|
11
|
+
a.shift if a[0]==:render;m=Mab.new({},self);s=m.capture{send(*a,&b)}
|
12
|
+
s=m.capture{send(:layout){s}} if /^_/!~a[0].to_s and m.respond_to?:layout
|
13
|
+
s end;def r s,b,h={};@status=s;@headers.merge!h;@body=b end
|
14
|
+
def redirect*a;r 302,'','Location'=>URL(*a)end;Z="\r\n"
|
15
|
+
def to_a;[@status,@body,@headers]end
|
16
|
+
def initialize r,e,m;e=H[e.to_hash];@status,@method,@env,@headers,@root=200,m.
|
17
|
+
downcase,e,{'Content-Type'=>"text/html"},e.SCRIPT_NAME.sub(/\/$/,'')
|
18
|
+
@k=C.kp e.HTTP_COOKIE;q=C.qsp e.QUERY_STRING;@in=r
|
19
|
+
if%r|\Amultipart/form-.*boundary=\"?([^\";,]+)|n.match e.CONTENT_TYPE
|
20
|
+
b=/(?:\r?\n|\A)#{Regexp::quote("--#$1")}(?:--)?\r$/;until@in.eof?;fh=H[];for l in@in
|
21
|
+
case l;when Z;break;when/^Content-D.+?: form-data;/;fh.u H[*$'.
|
22
|
+
scan(/(?:\s(\w+)="([^"]+)")/).flatten];when/^Content-Type: (.+?)(\r$|\Z)/m;fh[
|
23
|
+
:type]=$1;end;end;fn=fh[:name];o=if fh[:filename];o=fh[:tempfile]=Tempfile.new(:C)
|
24
|
+
o.binmode;else;fh=""end;while l=@in.read(16384);if l=~b;o<<$`.chomp;@in.seek(-$'.
|
25
|
+
size,IO::SEEK_CUR);break;end;o<<l;end;C.qsp(fn,'&;',fh,q) if fn;fh[:tempfile].rewind if
|
26
|
+
fh.is_a?H;end;elsif@method=="post";q.u C.qsp(@in.read)end;@cookies,@input=
|
27
|
+
@k.dup,q.dup end;def service*a;@body=send(@method,*a)if respond_to?@method
|
28
|
+
@headers["Set-Cookie"]=@cookies.map{|k,v|"#{k}=#{C.escape(v)}; path=#{self/'/'
|
29
|
+
}"if v!=@k[k]}-[nil];self end;def to_s;a=[];@headers.map{|k,v|[*v].map{|x|a<<
|
30
|
+
"#{k}: #{x}"}};"Status: #{@status}#{Z+a*Z+Z*2+@body}"end;end
|
31
|
+
X=module Controllers;@r=[];class<<self;def r;@r;end;def R*u;r=@r;Class.new{
|
32
|
+
meta_def(:urls){u};meta_def(:inherited){|x|r<<x}}end;def M;def M;end;constants.map{|c|
|
33
|
+
k=const_get(c);k.send:include,C,Base,Models;r[0,0]=k if !r.include?k;k.meta_def(
|
34
|
+
:urls){["/#{c.downcase}"]}if !k.respond_to?:urls}end;def D p;r.map{|k|k.urls.
|
35
|
+
map{|x|return k,$~[1..-1]if p=~/^#{x}\/?$/}};[NotFound,[p]]end end;class
|
36
|
+
NotFound<R();def get p;r(404,Mab.new{h1 P;h2 p+" not found"})end end;class
|
37
|
+
ServerError<R();def get k,m,e;r(500,Mab.new{h1 P;h2"#{k}.#{m}";h3"#{e.class
|
38
|
+
} #{e.message}:";ul{e.backtrace.each{|bt|li(bt)}}}.to_s)end end;self;end;class<<
|
39
|
+
self;def goes m;eval S.gsub(/Camping/,m.to_s).gsub("A\pps=[]","Cam\ping::Apps<<\
|
40
|
+
self"),TOPLEVEL_BINDING;end;def escape s;s.to_s.gsub(/[^ \w.-]+/n){'%'+($&.
|
41
|
+
unpack('H2'*$&.size)*'%').upcase}.tr(' ','+')end;def un s;s.tr('+',' ').gsub(
|
42
|
+
/%([\da-f]{2})/in){[$1].pack('H*')}end;def qsp q,d='&;',y=nil,z=H[];m=proc{|_,o,n|o.u(
|
43
|
+
n,&m)rescue([*o]<<n)};q.to_s.split(/[#{d}] */n).inject((b,z=z,H[])[0]){|h,p|k,v=un(p).
|
44
|
+
split('=',2);h.u k.split(/[\]\[]+/).reverse.inject(y||v){|x,i|H[i,x]},&m}end;def
|
45
|
+
kp s;c=qsp(s,';,')end;def run r=$stdin,e=ENV;X.M;k,a=X.D un("/#{e[
|
46
|
+
'PATH_INFO']}".gsub(/\/+/,'/'));k.new(r,e,(m=e['REQUEST_METHOD']||"GET")).Y.
|
47
|
+
service *a;rescue Object=>x;X::ServerError.new(r,e,'get').service(k,m,x)end
|
48
|
+
def method_missing m,c,*a;X.M;k=X.const_get(c).new(StringIO.new,H['HTTP_HOST',
|
49
|
+
'','SCRIPT_NAME','','HTTP_COOKIE',''],m.to_s);H.new(a.pop).each{|e,f|k.send(
|
50
|
+
"#{e}=",f)}if Hash===a[-1];k.service *a;end;end;module Views;include X,Helpers
|
51
|
+
end;module Models;autoload:Base,'camping/db';def Y;self;end;end;class Mab<Markaby::Builder
|
52
|
+
include Views;def tag!*g,&b;h=g[-1];[:href,:action,:src].map{|a|(h[a]=self/h[a])rescue
|
53
|
+
0};super end end;H=HashWithIndifferentAccess;class H;def method_missing m,*a
|
54
|
+
m.to_s=~/=$/?self[$`]=a[0]:a==[]?self[m]:raise(NoMethodError,"#{m}")end
|
55
|
+
alias_method:u,:regular_update;end end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rubycas-server
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.5.0
|
7
|
+
date: 2007-09-20 00:00:00 -04:00
|
8
8
|
summary: Provides single sign on for web applications using the CAS protocol.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- bin/rubycas-server
|
38
38
|
- bin/rubycas-server-ctl
|
39
39
|
- config.example.yml
|
40
|
+
- custom_views.example.rb
|
40
41
|
- lib/casserver.rb
|
41
42
|
- lib/casserver/authenticators/active_directory_ldap.rb
|
42
43
|
- lib/casserver/authenticators/base.rb
|
@@ -66,6 +67,13 @@ files:
|
|
66
67
|
- resources/init.d.sh
|
67
68
|
- setup.rb
|
68
69
|
- test/test_casserver.rb
|
70
|
+
- vendor/camping-1.5.180/lib/camping-unabridged.rb
|
71
|
+
- vendor/camping-1.5.180/lib/camping.rb
|
72
|
+
- vendor/camping-1.5.180/lib/camping/db.rb
|
73
|
+
- vendor/camping-1.5.180/lib/camping/fastcgi.rb
|
74
|
+
- vendor/camping-1.5.180/lib/camping/reloader.rb
|
75
|
+
- vendor/camping-1.5.180/lib/camping/session.rb
|
76
|
+
- vendor/camping-1.5.180/lib/camping/webrick.rb
|
69
77
|
test_files:
|
70
78
|
- test/test_cas.rb
|
71
79
|
- test/test_casserver.rb
|
@@ -81,15 +89,6 @@ extensions: []
|
|
81
89
|
requirements: []
|
82
90
|
|
83
91
|
dependencies:
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: camping
|
86
|
-
version_requirement:
|
87
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
88
|
-
requirements:
|
89
|
-
- - ">="
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: "1.5"
|
92
|
-
version:
|
93
92
|
- !ruby/object:Gem::Dependency
|
94
93
|
name: activesupport
|
95
94
|
version_requirement:
|